diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java new file mode 100644 index 0000000..3c56e21 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java @@ -0,0 +1,121 @@ +package org.ntlab.tampoposerver.resources; + +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import org.ntlab.tampoposerver.models.ChatRequest; +import org.ntlab.tampoposerver.models.FriendRequest; +import org.ntlab.tampoposerver.repositories.ChatRequestRepository; +import org.ntlab.tampoposerver.repositories.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; + +import static jakarta.ws.rs.core.Response.status; + + + +@Path("/chat-requests/") +@Component + +public class ChatRequestsResource { + + private ChatRequestRepository chatRequestRepository ; + private UserRepository userRepository = null; + + @Autowired + public ChatRequestsResource(UserRepository userRepository,ChatRequestRepository chatRequestRepository) { + this.userRepository = userRepository; + this.chatRequestRepository = chatRequestRepository; + } + + @GET + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + public Response getChatRequests( + @QueryParam("token") String token, + @QueryParam("user-id") String userId) { + + //400(認証が必要です) tokenがなかったら400 + if (token == null || token.isEmpty() || userId == null || userId.isEmpty()) { + return status(Response.Status.BAD_REQUEST) + .entity("認証が必要です").build(); + } + + + + //200(成功レスポンス) + ArrayList requests = chatRequestRepository.getChatRequestsForUser(userId);//前の人がListだったらArrayListになるから作ってて頼む時はListで頼め + //tokenのチェックはこっちでする、ほかのひとがしていた + // 岩谷さんのUserRepositoryでtokenの確認を行う + if (!userRepository.checkToken(userId, token) ) { + return Response.status(Response.Status.UNAUTHORIZED).build(); + } + + if (requests == null) { + return status(Response.Status.BAD_REQUEST) + .entity("認証が必要です").build(); + } + + return Response.status(Response.Status.OK).entity(requests).build(); + + } + + //チャットリクエストの作成 + //トークンを使って他人の情報を返さないように実装する。 + @POST + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + public Response postChatRequest( + @FormParam("token") String token, + @FormParam("sender-id") String senderId, + @FormParam("receiver-id") String receiverId) { + + + //204チャットがリクエストされました + ChatRequest created = chatRequestRepository.addChatRequest(senderId, receiverId); + //トークンのチェックよろしくじぶんで + if (!userRepository.checkToken(senderId, token) || !userRepository.checkToken(receiverId, token)) { + return Response.status(Response.Status.UNAUTHORIZED).build(); + } + + + if (created == null) { + return status(Response.Status.BAD_REQUEST) + .entity("チャットリクエストの作成に失敗しました").build(); + } + + return Response. + status(Response.Status.OK).entity(created.getChatRequestId()).build(); + } + + @Path("/chat-requests/{chat-request-id}") + @DELETE + public Response deleteChatRequest( + @QueryParam("receiver-token") String receiverToken, + @PathParam("chat-request-id") Integer chatRequestId) { + + //401承認が必要です + if (receiverToken == null || receiverToken.isEmpty()) { + return status(Response.Status.UNAUTHORIZED) + .entity("認証が必要です") // 401 + .build(); + } + + //403(未認証&トークンの不一致) + if (!userRepository.checkToken(senderId, token) && !userRepository.checkToken(receiverId, token)) { + return Response.status(Response.Status.UNAUTHORIZED).build(); + } + + + //404チャットリクエストが見つかりません。 + boolean deleted = deleteChatRequest(chatRequestId); + if (!deleted) { + return status(Response.Status.NOT_FOUND) + .entity("チャットリクエストが見つかりません") // 404 + .build(); + } + //204チャットリクエストが削除されました + return status(Response.Status.NO_CONTENT).build(); + } + +} \ No newline at end of file