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.models.FriendRequest;
import org.ntlab.tampoposerver.repositories.UserRepository;
import org.ntlab.tampoposerver.services.FriendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.UUID;

@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) {
        //400(不正なリクエスト)
        //トークンが空文字の時
        if (token.isBlank()) {
            return Response.status(Response.Status.BAD_REQUEST).build();
        }
        // tokenがUUIDの規格に沿っていないとき
        try {
            UUID.fromString(token);
        } catch (IllegalArgumentException e) {
            return Response.status(Response.Status.BAD_REQUEST).build();
        }

        // 200
        ArrayList<FriendRequest> requests = friendService.getFriendRequests(token);
        return Response.status(Response.Status.OK).entity(requests).build();
    }

    @POST
    @Consumes(MediaType.APPLICATION_FORM_URLENCODED)
    @Produces(MediaType.APPLICATION_JSON)
    public Response postFriendRequest(@FormParam("sender-id") String senderId, @FormParam("receiver-id") String receiverId, @FormParam("token") String token) {

        //403(未認証&トークンの不一致)
        if (!userRepository.checkToken(senderId, token) && !userRepository.checkToken(receiverId, token)) {
            return Response.status(Response.Status.UNAUTHORIZED).build();
        }

        FriendRequest created = friendService.createFriendRequest(token, senderId, receiverId);
        if (created == null) {
            return Response.status(Response.Status.BAD_REQUEST).build();
        }
        // 201(フレンドリクエスト作成)
        return Response.status(Response.Status.OK).entity(created.getId()).build();
    }

    @Path("/{friend-request-id}")
    @DELETE
    public Response deleteFriendRequest(@PathParam("friend-request-id") Integer friendRequestId, @QueryParam("receiver-token") String receiverToken) {
        //トークンが空文字の時
        if (receiverToken.isBlank()) {
            return Response.status(Response.Status.BAD_REQUEST).build();
        }

        boolean isDeleted = friendService.removeFriendRequest(receiverToken, friendRequestId);
        if (isDeleted) {
            return Response.status(Response.Status.OK).build();
        } else {
            return Response.status(Response.Status.NOT_FOUND).build();
        }
    }
}