Newer
Older
tampopo-server / src / main / java / org / ntlab / tampoposerver / resources / FriendRequestsResource.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.repositories.UserRepository;
import org.ntlab.tampoposerver.services.FriendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Path("/friend-requests")
@Component
public class FriendRequestsResource {

    //初期化
    private UserRepository userRepository = null;
    private FriendService friendService = null;

    @Autowired
    public FriendRequestsResource(UserRepository userRepository, FriendService friendService){
        this.userRepository = userRepository;
        this.friendService = friendService;
    }

    @GET
    public Response getfriendrequests(@QueryParam("token") String token){

        //401(トークンが無効です)
        if(!UserRepository.checkToken()){ //トークンが通らなかった時
            var response = Response.status(Response.Status.NOT_FOUND).entity("トークンが無効です。");
            throw new WebApplicationException(response.build());
        }

        //404(データが存在しません)
        if(!FriendService.getFriendPair(token)){ //トークンが通らなかった時
            var response = Response.status(Response.Status.NOT_FOUND).entity("指定されたIDのフレンドリクエストが存在しません。");
            throw new WebApplicationException(response.build());
        }

        //400(不正なリクエスト)
        //トークンが空文字の時
        if(token.isBlank()){
            throw new WebApplicationException(response.build());
        }


        //403(権限がありません)
        //409(データが重複しています)
        //500(サーバー内部でエラーが発生しました)

        //200
        FriendRequest created = service.createFriendRequest(token, senderId, receiverId);
        if(created == null){
            throw new WebApplicationException(Response.Status.BAD_REQUEST);
        }
        return Response.status(Response.Status.OK).entity(created,senderId(),receiverId()).build();

    }

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    public void postfriendrequests(@FormParam("sender-id")String senderId, @FormParam("receiver-id")String receiverId, @FormParam("token")String token){
        //201(フレンドリクエスト作成)
        FriendRequest created = service.createFriendRequest(token, senderId, receiverId);
        if(created == null){
            throw new WebApplicationException("フレンドリクエストの作成に失敗しました。", Response.Status.BAD_REQUEST);
        }
        return Response.status(Response.Status.OK).entity(created.getId()).build();

        //400(不正なリクエスト)

    }

    @Path("/{friend-request-id}")
    @DELETE
    public void deletefriendrequests(@PathParam("friend-request-id")Integer friendrequestId, @QueryParam("receiver-token")String receivertoken){
        //404
        if(!FriendService.removeFriendPair(friendrequestId, receivertoken)){ //トークンが通らなかった時
            var response = Response.status(Response.Status.NOT_FOUND).entity("指定されたIDのフレンドリクエストが存在しません。");
            throw new WebApplicationException(response.build());
        }


        return;
    }
}