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; @Path("/chat-rooms") @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.APPLICATION_JSON) public Response createChatRoom () { ChatRooms chatRoom = chatRoomsRepository.addChatRoom(); return Response.status(Response.Status.CREATED).entity(chatRoom).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("ユーザーが見つかりません"); List<ChatRooms.Message> messages = chatRoomsRepository.getMessagesFromUser(chatRoomId, userId); // if (messages == null) throw new NotFoundException("チャットルームが存在しません"); return Response.status(Response.Status.OK).entity(messages).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() ); } ChatRooms chatRoom = chatRoomsRepository.deleteChatRoom(chatRoomId); return Response.noContent().build(); //return Response.status(Response.Status.noContent).entity(chatRoom).build(); } //チャットルームにユーザーを追加する @PUT @Path("/{chatroom-id}/{user-id}") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) public Response addChatRoomUser(@PathParam("chatroom-id") int chatRoomId, @PathParam("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() ); } ChatRooms chatRoom = chatRoomsRepository.addUserRoom(chatRoomId, userId); return Response.status(Response.Status.OK).entity(chatRoom).build(); } //チャットルームにメッセージを追加する @PUT @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) { ChatRooms room = chatRoomsRepository.getChatRoom(roomId); if (room == null) throw new NotFoundException("チャットルームが存在しません"); ChatRooms chatRoom = chatRoomsRepository.addMessage(roomId, userId, message); return Response.status(Response.Status.OK).entity(chatRoom).build(); } }