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.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import static jakarta.ws.rs.core.Response.status;



@Path("/chat-requests/")
@Component

public class ChatRequestsResource {

    private ChatRequestRepository chatRequestRepository;


    @Autowired
    public ChatRequestsResource(ChatRequestRepository chatRequestRepository) {
        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();
        }

        // 岩谷さんのUserRepositoryでtokenの確認を行う

        //200(成功レスポンス)
       ArrayList<ChatRequestRepository> requests = chatRequestRepository.getChatRequests(token, userId);//前の人がListだったらArrayListになるから作ってて頼む時はListで頼め
        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チャットがリクエストされました
        ChatRequestRepository created = chatRequestRepository.createChatRequest(token, senderId, receiverId);
        if (created == null) {
         return status(Response.Status.BAD_REQUEST)
                  .entity("チャットリクエストの作成に失敗しました").build();
        }

       return Response.
       status(Response.Status.OK).entity(created.getId()).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権限がありません
        boolean hasPermission = checkUserPermission(receiverToken, chatRequestId);
        if (!hasPermission) {
            return status(Response.Status.FORBIDDEN)
                    .entity("権限がありません") // 403
                  .build();
        }
        //404チャットリクエストが見つかりません。
        boolean deleted = deleteChatRequestById(chatRequestId);
        if (!deleted) {
           return status(Response.Status.NOT_FOUND)
                   .entity("チャットリクエストが見つかりません") // 404
                   .build();
        }
        //204チャットリクエストが削除されました
        return status(Response.Status.NO_CONTENT).build();
   }

}