diff --git a/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java b/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java index ea63b32..542c07d 100644 --- a/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java +++ b/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java @@ -13,9 +13,21 @@ private String newContent; private String chatRoomNumber; private List messages = new ArrayList<>(); + private List users = new ArrayList<>(); - public ChatRooms(Integer chatRoomId) { + public ChatRooms(Integer chatRoomId, String user0Id, String user1Id) { + this.chatRoomId = chatRoomId; + this.user0Id = user0Id; + this.user1Id = user1Id; + } + + public String getUser0Id(){ + return user0Id; + } + + public String getUser1Id(){ + return user1Id; } public Integer getChatRoomId() { @@ -27,6 +39,13 @@ } public void addUser(String userId) { + if (!users.contains(userId)) { + users.add(userId); + } + } + + public List getUsers() { + return new ArrayList<>(users); } public void put(Integer chatRoomId, String chatRoomNumber) { diff --git a/src/main/java/org/ntlab/tampoposerver/models/User.java b/src/main/java/org/ntlab/tampoposerver/models/User.java index 76713a6..e805cd1 100644 --- a/src/main/java/org/ntlab/tampoposerver/models/User.java +++ b/src/main/java/org/ntlab/tampoposerver/models/User.java @@ -25,6 +25,12 @@ this.icon = icon; } + public User(String userId, String password, String token){ + this.userId = userId; + this.password = password; + this.token = token; + } + public String login(){ UUID str = UUID.randomUUID(); token = str.toString(); diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java index 0553b5e..3ff56f8 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java @@ -3,6 +3,7 @@ import org.ntlab.tampoposerver.models.ChatRooms; import org.springframework.stereotype.Repository; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -12,23 +13,52 @@ private int id = 0; // 新しいチャットルーム作成(空のメッセージリスト付き) - public ChatRooms addChatRoom() { - ChatRooms chatRoom = new ChatRooms(id); + public ChatRooms addChatRoom(String user0Id, String user1Id) { + ChatRooms chatRoom = new ChatRooms(id, user0Id, user1Id); chatRooms.put(id, chatRoom); id++; return chatRoom; } + //チャットルームIDの取得 + public ChatRooms findChatRoomByUsers(String user0Id, String user1Id) { + return chatRooms.values().stream() + .filter(r -> + (r.getUser0Id().equals(user0Id) && r.getUser1Id().equals(user1Id)) || + (r.getUser0Id().equals(user1Id) && r.getUser1Id().equals(user0Id)) + ) + .findFirst() + .orElse(null); + } + + //1つのユーザーIDによってチャットルームIDの取得 + public ChatRooms findChatRoomBySingleUser(String user0Id) { + return chatRooms.values().stream() + .filter(r -> + r.getUser0Id().equals(user0Id) || r.getUser1Id().equals(user0Id) + ) + .findFirst() + .orElse(null); + } + + +// public List getChatRoomsByUser(int chatRoomId, String userId) { +// return chatRooms.values().stream() +// .filter(room -> room.getUsers().contains(userId)) +// .toList(); +// } + + // ユーザーを既存チャットルームに追加(例:グループチャット用) public ChatRooms addUserRoom(int chatRoomId, String userId) { ChatRooms chatRoom = chatRooms.get(chatRoomId); if (chatRoom == null) return null; - chatRoom.addUser(userId); + chatRoom.addUser(userId); // ← ここで追加される return chatRoom; } - // メッセージを取得 +// //メッセージを取得 // public ChatRooms getMessagesFromUser(int chatRoomId, String userId) { // ChatRooms chatRoom = chatRooms.get(chatRoomId); // if (chatRoom == null) return null; @@ -37,6 +67,7 @@ // //.stream().filter(m -> m.getSenderId().equals(userId)); // } + //メッセージを取得 public List getMessagesFromUser(int chatRoomId, String userId) { ChatRooms chatRoom = chatRooms.get(chatRoomId); if (chatRoom == null) return null; diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java index 457eabc..48058a2 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java @@ -12,7 +12,17 @@ private final Map friends = new HashMap<>(); /* 最後に追加されたフレンドペアのID */ - private int lastPairId = -1; +// private int lastPairId = -1; + + private int nextId = 0; + + public FriendRepository() { + // 初期状態で test0 と test1 をフレンドにしておく + FriendPair pair = new FriendPair("test0", "test1"); + pair.setId(nextId); + friends.put(nextId, pair); + nextId++; + } /** * 渡されたIDに紐づけられているフレンドペアを取得する @@ -30,10 +40,18 @@ * @param pair 追加するフレンドペア * @return 追加したフレンドペア */ + +// public FriendPair add(FriendPair pair) { +// lastPairId++; +// pair.setId(lastPairId); +// friends.put(pair.getId(), pair); +// return pair; +// } + public FriendPair add(FriendPair pair) { - lastPairId++; - pair.setId(lastPairId); - friends.put(pair.getId(), pair); + pair.setId(nextId); + friends.put(nextId, pair); + nextId++; return pair; } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java index c695d39..baf59a9 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java @@ -11,6 +11,15 @@ public class UserRepository { private final HashMap userMap = new HashMap<>(); + public UserRepository() { + // ✅ 起動時にユーザーを登録 + User user0 = new User("test0", "test0", "0003jfjf8hfjjdjfjhs8n3"); + User user1 = new User("test1", "test1", "6666jfjf8hfjjdjfjhs5n2"); + + userMap.put(user0.getUserId(), user0); + userMap.put(user1.getUserId(), user1); + } + public User addUser(String userId, String password) {//アカウント新規作成時追加 User u = new User(userId, password); userMap.put(userId, u); diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java index 19bb823..f8d92e9 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java @@ -16,7 +16,9 @@ import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static javax.ws.rs.core.Response.status; @@ -38,23 +40,115 @@ @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) - public Response createChatRoom () { - ChatRooms chatRoom = chatRoomsRepository.addChatRoom(); + public Response createChatRoom(@QueryParam("user0-id") String user0Id, @QueryParam("user1-id") String user1Id, @QueryParam("token") String token) { + User user = userRepository.getUser(user0Id); + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + ChatRooms chatRoom = chatRoomsRepository.addChatRoom(user0Id, user1Id); return Response.status(Response.Status.CREATED).entity(chatRoom).build(); } + @GET + @Produces(MediaType.APPLICATION_JSON) + public Response getChatroomId( + @QueryParam("user0-id") String user0Id, + @QueryParam("user1-id") String user1Id, + @QueryParam("token") String token) { + + // ユーザー存在チェック + User user = userRepository.getUser(user0Id); + if (user == null) { + return Response.status(Response.Status.NOT_FOUND) + .entity(Map.of("error", "ユーザーが存在しません")).build(); + } + + // トークンチェック + if (token == null || !token.equals(user.getToken())) { + return Response.status(Response.Status.FORBIDDEN) + .entity(Map.of("error", "認証失敗")).build(); + } + + ChatRooms chatRoom; + + // user1-id が指定された場合(2人に一致するチャットルーム) + if (user1Id != null && !user1Id.isEmpty()) { + chatRoom = chatRoomsRepository.findChatRoomByUsers(user0Id, user1Id); + if (chatRoom == null) { + return Response.status(Response.Status.NOT_FOUND) + .entity(Map.of("error", "指定された2ユーザーのチャットルームが見つかりません")).build(); + } + } + // user0-id のみ指定された場合 + else { + chatRoom = chatRoomsRepository.findChatRoomBySingleUser(user0Id); + if (chatRoom == null) { + return Response.status(Response.Status.NOT_FOUND) + .entity(Map.of("error", "ユーザーが含まれるチャットルームが見つかりません")).build(); + } + } + + return Response.ok(Map.of("chatRoomId", chatRoom.getChatRoomId())).build(); + } + +// //チャットルームIDを取得する +// @GET +// @Consumes(MediaType.APPLICATION_FORM_URLENCODED) +// @Produces(MediaType.APPLICATION_JSON) +// public Response getChatroomId(@QueryParam("user0-id") String user0Id, @QueryParam("user1-id") String user1Id, @QueryParam("token") String token) { +// User user = userRepository.getUser(user0Id); +// if (token == null || !token.equals(user.getToken())) { +// throw new WebApplicationException( +// Response.status(Response.Status.FORBIDDEN) +// .entity("認証失敗") +// .build() +// ); +// } +// ChatRooms chatRoom = chatRoomsRepository.findChatRoomByUsers(user0Id, user1Id); +// return Response.ok(Map.of("chatRoomId", chatRoom.getChatRoomId())).build(); +// } + +// //1つのユーザーIDによってチャットルームIDを取得する +// @GET +// @Consumes(MediaType.APPLICATION_FORM_URLENCODED) +// @Produces(MediaType.APPLICATION_JSON) +// public Response getChatroomId(@QueryParam("user0-id") String user0Id, @QueryParam("token") String token) { +// User user = userRepository.getUser(user0Id); +// if (token == null || !token.equals(user.getToken())) { +// throw new WebApplicationException( +// Response.status(Response.Status.FORBIDDEN) +// .entity("認証失敗") +// .build() +// ); +// } +// ChatRooms chatRoom = chatRoomsRepository.findChatRoomBySingleUsers(user0Id); +// return Response.ok(Map.of("chatRoomId", chatRoom.getChatRoomId())).build(); +// } + //メッセージを閲覧する @GET @Path("/{chat-room-id}/{user-id}") @Produces(MediaType.APPLICATION_JSON) - public Response getChatRoomMessages(@PathParam("chat-room-id") int chatRoomId, @PathParam("user-id") String userId) { + public Response getChatRoomMessages(@PathParam("chat-room-id") int chatRoomId, @PathParam("user-id") String userId, @QueryParam("token") String token) { User user = userRepository.getUser(userId); if (user == null) throw new NotFoundException("ユーザーが見つかりません"); List messages = chatRoomsRepository.getMessagesFromUser(chatRoomId, userId); // if (messages == null) throw new NotFoundException("チャットルームが存在しません"); + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + return Response.status(Response.Status.OK).entity(messages).build(); } @@ -121,7 +215,15 @@ @Path("/{chatroom-id}/{user-id}/message") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) - public Response updateMessage(@PathParam("chatroom-id") int roomId, @PathParam("user-id") String userId, @FormParam("message") String message) { + public Response updateMessage(@PathParam("chatroom-id") int roomId, @PathParam("user-id") String userId, @FormParam("message") String message, @QueryParam("token") String token) { + User user = userRepository.getUser(userId); + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } ChatRooms room = chatRoomsRepository.getChatRoom(roomId); if (room == null) throw new NotFoundException("チャットルームが存在しません"); @@ -132,7 +234,4 @@ - - - } diff --git a/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java index 1f4514a..903db44 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java @@ -32,20 +32,26 @@ @Consumes (MediaType.APPLICATION_FORM_URLENCODED) @Produces (MediaType.APPLICATION_JSON) public Response postFriends(@FormParam("token")String token,@FormParam("user0-id")String user0Id,@FormParam("user1-id")String user1Id){ +// System.out.println("POST /friends called"); +// System.out.println("token=" + token + ", user0=" + user0Id + ", user1=" + user1Id); //400 if (token == null || token.isEmpty()) { //トークンがないか空だったら var response = Response.status(Response.Status.BAD_REQUEST).entity("トークンが無効です。"); return Response.status(Response.Status.BAD_REQUEST).build(); } +// System.out.println("400 checked"); //403(未認証&トークンの不一致) if (!userRepository.checkToken(user0Id, token) && !userRepository.checkToken(user1Id, token)) { // ユーザーまたはトークンが存在しない はるかと相談済み var response = Response.status(Response.Status.FORBIDDEN).entity("認証エラーです。"); return Response.status(Response.Status.BAD_REQUEST).build(); } +// System.out.println("403 checked"); //200成功 FriendPair pair = friendService.createFriendPair(user0Id,user1Id); +// System.out.println("friendService started"); if (pair == null) { +// System.out.println("No friend pair created"); return Response.status(Response.Status.NOT_FOUND).build(); } return Response.status(Response.Status.OK).entity(pair).build(); @@ -93,5 +99,4 @@ //500は勝手にサーバがエラーでたらでるから書かない } - } \ No newline at end of file diff --git a/src/main/java/org/ntlab/tampoposerver/services/FriendService.java b/src/main/java/org/ntlab/tampoposerver/services/FriendService.java index 58ca363..de2c472 100644 --- a/src/main/java/org/ntlab/tampoposerver/services/FriendService.java +++ b/src/main/java/org/ntlab/tampoposerver/services/FriendService.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; import java.util.ArrayList; import java.util.Collection; @@ -20,6 +21,18 @@ private final FriendRepository friendRepository; private final FriendRequestRepository friendRequestRepository; + //臨時 + @PostConstruct + public void init() { + // 起動時に test0-test1 のペアをユーザーに紐付ける + FriendPair defaultPair = friendRepository.find(0); + if (defaultPair != null) { + userRepository.addFriendPair(defaultPair.getUser0Id(), defaultPair); + userRepository.addFriendPair(defaultPair.getUser1Id(), defaultPair); + } + System.out.println("Default friend pair (test0 <-> test1) initialized."); + } + @Autowired public FriendService(UserRepository userRepository, FriendRepository friendRepository, FriendRequestRepository friendRequestRepository) { this.userRepository = userRepository; @@ -123,13 +136,21 @@ public FriendPair getFriendPair(String token, int friendPairId) { FriendPair foundPair = friendRepository.find(friendPairId); if (foundPair == null) { +// System.out.println("FriendPair not found for id: " + friendPairId); return null; } User user0 = userRepository.getUser(foundPair.getUser0Id()); User user1 = userRepository.getUser(foundPair.getUser1Id()); - if (!user0.getToken().equals(token) && !user1.getToken().equals(token)) { - return null; - } +// if (!user0.getToken().equals(token) && !user1.getToken().equals(token)) { +// if (!user0.getToken().equals(token) && !user1.getToken().equals(token)) { +// System.out.println("Token mismatch! Provided: " + token); +// System.out.println("user0 token: " + user0.getToken()); +// System.out.println("user1 token: " + user1.getToken()); +// return null; +// } +// System.out.println("Token valid, returning pair"); +// return null; +// } return foundPair; }