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(); } }