diff --git a/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java b/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java new file mode 100644 index 0000000..ad04de2 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/models/ChatRooms.java @@ -0,0 +1,47 @@ +package org.ntlab.tampoposerver.models; + +import java.util.Collection; + +public class ChatRooms { + private Integer chatRoomId; + private String user0Id; + private String user1Id; + private String newContent; + private String chatRoomNumber; + + public ChatRooms(Integer chatRoomId, String user0Id, String user1Id) { + this.chatRoomId = chatRoomId; + } + + public Integer getChatRoomId() { + return chatRoomId; + } + + public void setChatRoomId(Integer chatRoomId) { + this.chatRoomId = chatRoomId; + } + + public void addUser(String userId) { + } + + public void put(Integer chatRoomId, String chatRoomNumber) { + } + + public Integer updateMessage() { + return chatRoomId; + } + + public ChatRooms updateMessage(Integer chatRoomId, String userId, String newContent) {this.chatRoomId = chatRoomId; + this.user0Id = userId; + this.newContent = newContent; + return this;} + + public ChatRooms addMessage(String senderId, String content) { + return null; + } + + public ChatRooms getMessages() { + return null; + } +} + diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java new file mode 100644 index 0000000..867b778 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRoomsRepository.java @@ -0,0 +1,65 @@ +package org.ntlab.tampoposerver.repositories; + +import org.ntlab.tampoposerver.models.ChatRooms; +import org.springframework.stereotype.Repository; + +import java.util.HashMap; +import java.util.List; + +@Repository +public class ChatRoomsRepository { + private final HashMap chatRooms = new HashMap<>(); + private int id = 0; + + // 新しいチャットルーム作成(空のメッセージリスト付き) + public ChatRooms addChatRoom(String user0Id, String user1Id) { + ChatRooms chatRoom = new ChatRooms(id, user0Id, user1Id); + chatRooms.put(id, chatRoom); + id++; + return chatRoom; + } + + // ユーザーを既存チャットルームに追加(例:グループチャット用) + public ChatRooms addUserRoom(int chatRoomId, String userId) { + ChatRooms chatRoom = chatRooms.get(chatRoomId); + if (chatRoom == null) return null; + + chatRoom.addUser(userId); + return chatRoom; + } + + // メッセージを取得 + public ChatRooms getMessagesFromUser(int chatRoomId, String userId) { + ChatRooms chatRoom = chatRooms.get(chatRoomId); + if (chatRoom == null) return null; + + return chatRoom.getMessages(); + //.stream().filter(m -> m.getSenderId().equals(userId)); + } + + // 新しいメッセージを追加 + public ChatRooms addMessage(int chatRoomId, String senderId, String content) { + ChatRooms chatRoom = chatRooms.get(chatRoomId); + if (chatRoom == null) return null; + + ChatRooms message = chatRoom.addMessage(senderId, content); + return message; + } + + // 既存メッセージを更新 + public ChatRooms updateMessage(int chatRoomId, String userId, String newContent) { + ChatRooms chatRoom = chatRooms.get(chatRoomId); + if (chatRoom == null) return null; + + return chatRoom.updateMessage(chatRoomId, userId, newContent); + } + + // チャットルーム削除 + public ChatRooms deleteChatRoom(int chatRoomId) { + return chatRooms.remove(chatRoomId); + } + + public ChatRooms getChatRoom(int chatRoomId) { + return chatRooms.get(chatRoomId); + } +} \ No newline at end of file diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java new file mode 100644 index 0000000..81834e2 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/resources/ChatRoomsResource.java @@ -0,0 +1,137 @@ +package org.ntlab.tampoposerver.resources; + + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.ntlab.tampoposerver.models.ChatRequest; +import org.ntlab.tampoposerver.models.ChatRooms; +import org.ntlab.tampoposerver.models.FriendRequest; +import org.ntlab.tampoposerver.models.User; +import org.ntlab.tampoposerver.repositories.ChatRequestRepository; +import org.ntlab.tampoposerver.repositories.ChatRoomsRepository; +import org.ntlab.tampoposerver.repositories.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + + +import java.util.ArrayList; +import java.util.List; + + +import static javax.ws.rs.core.Response.status; + + +@Component +public class ChatRoomsResource { + private final ChatRoomsRepository chatRoomsRepository; + private final UserRepository userRepository; + + @Autowired + public ChatRoomsResource(UserRepository userRepository, ChatRoomsRepository chatRoomsRepository) { + this.userRepository = userRepository; + this.chatRoomsRepository = chatRoomsRepository; + } + + + //チャットルームの作成 + @POST + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.TEXT_PLAIN) + public Response createChatRoom () { + return Response.status(Response.Status.OK).entity("Successfully created a chat room").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) { + User user = userRepository.getUser(userId); + if (user == null) throw new NotFoundException("ユーザーが見つかりません"); + + +// ChatRoom room = chatRoomsRepository.getMessage(chatRoomId); +// if (room == null) throw new NotFoundException("チャットルームが存在しません"); + + + return Response.ok(chatRoomsRepository.getMessagesFromUser(chatRoomId, userId)).build(); + } + + + + + + + //チャットルームの削除 + @DELETE + @Path("/{chatroom-id}") + public Response deleteChatRoom(@PathParam("chatroom-id") int chatRoomId, @FormParam("user-id") String userId, @QueryParam("token") String token) { + ChatRooms room = chatRoomsRepository.getChatRoom(chatRoomId); + if (room == null) throw new NotFoundException("チャットルームが存在しません"); + + User user = userRepository.getUser(userId); + if (user == null) { + throw new NotFoundException("IDが存在しません"); + } + + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + + + chatRoomsRepository.deleteChatRoom(chatRoomId); + return Response.noContent().build(); + } + + + + + //チャットルームにユーザーを追加する + @PUT + @Path("/{chatroom-id}") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + public Response addChatRoomUser(@FormParam("chat-room-id") String chatRoomId, @FormParam("user-id") String userId, @QueryParam("token") String token) { + User user = userRepository.getUser(userId); + if (user == null) { + throw new NotFoundException("IDが存在しません"); + } + + //トークン認証 + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + + + return Response.status(Response.Status.OK).entity("Successfully updated").build(); + } + + + //チャットルームにメッセージを追加する + @PUT + @Path("/{chatroom-id}/{user-id}/message") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + public Response updateMessage(@PathParam("chatroom-id") int roomId, @PathParam("user-id") String userId, @FormParam("message") String message) { + ChatRooms room = chatRoomsRepository.getChatRoom(roomId); + if (room == null) throw new NotFoundException("チャットルームが存在しません"); + + + room.updateMessage(roomId, userId, message); + return Response.ok("Message updated").build(); + } + + + + + + +}