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<ChatRequest> 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(未認証&トークンの不一致) //ChatRequestRepository.getChatRequest(chatRequestId); if (!userRepository.checkToken(null, null) && !userRepository.checkToken(null, null)) { return Response.status(Response.Status.UNAUTHORIZED).build(); } //404チャットリクエストが見つかりません。 ChatRequest deleted = chatRequestRepository.deleteChatRequest(chatRequestId); if (deleted==null) { return status(Response.Status.NOT_FOUND) .entity("チャットリクエストが見つかりません") // 404 .build(); } //204チャットリクエストが削除されました return status(Response.Status.NO_CONTENT).build(); } }