Newer
Older
tampopo-server / src / main / java / org / ntlab / tampoposerver / resources / ChatRequestsResource.java
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 java.util.List;

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(成功レスポンス)
       List<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("token") String token,
            @PathParam("chat-request-id") Integer chatRequestId) {

        //401承認が必要です
        if (token == null || token.isEmpty()) {
            return status(Response.Status.UNAUTHORIZED)
                    .entity("認証が必要です") // 401
                    .build();
        }

        //403(未認証&トークンの不一致)
        ChatRequest chatRequest = chatRequestRepository.getChatRequest(chatRequestId);
        if (chatRequest == null) {
            return Response.status(Response.Status.NOT_FOUND).build();
        }
        String senderId = chatRequest.getSenderId();
        String receiverId = chatRequest.getReceiverId();

        if (!userRepository.checkToken(senderId, token) && !userRepository.checkToken(receiverId, token)) {
            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();
   }

}