Newer
Older
tampopo-server / src / main / java / org / ntlab / tampoposerver / resources / FriendsResource.java
package org.ntlab.tampoposerver.resources;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import org.ntlab.tampoposerver.models.FriendPair;
import org.ntlab.tampoposerver.repositories.UserRepository;
import org.ntlab.tampoposerver.services.FriendService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.AliasFor;
import org.springframework.stereotype.Component;

import java.util.UUID;

@Path("/friends")
@Component
public class FriendsResource {

    private UserRepository userRepository = null;
    private FriendService friendService = null;

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


    @Path("/{pair-id}")
    @POST
    @Consumes (MediaType.APPLICATION_FORM_URLENCODED)
    public Response postFriends(@FormParam("token")String token,@FormParam("user0-id")String user0Id,@FormParam("user1-id")String user1Id){
        //400
        if (token == null || token.isEmpty()) { //トークンがないか空だったら
            var response = Response.status(Response.Status.BAD_REQUEST).entity("トークンが無効");
            return Response.status(Response.Status.BAD_REQUEST).build();
        }

        //403(未認証&トークンの不一致)
        if (!userRepository.checkToken(user0Id, token) || !userRepository.checkToken(user1Id, token)) { // ユーザーまたはトークンが存在しない はるかと相談済み
            var response = Response.status(Response.Status.FORBIDDEN).entity("認証エラー");
            return Response.status(Response.Status.BAD_REQUEST).build();
        }

        //200
        FriendPair pair = friendService.createFriendPair(user0Id,user1Id);
        if (pair == null) {
            return Response.status(Response.Status.NOT_FOUND).build();
        }
        return Response.status(Response.Status.OK).build();

        //500は勝手にサーバがエラーでたらでるから書かない
    }

    @Path("/{pair-id}")
    @GET
    public Response getFriend(@QueryParam("token") String token, @PathParam("pair-id") int pairId) {
        //400
        if (token == null || token.isBlank()) { //トークンがないか空だったら
            return Response.status(Response.Status.BAD_REQUEST).build();
        }

        //200
        FriendPair pair = friendService.getFriendPair(token, pairId);
        if (pair == null) {
            return Response.status(Response.Status.NOT_FOUND).build();
        }
        return Response.status(Response.Status.OK).build();
    }

    @Path("/{pair-id}")
    @DELETE
    public Response deleteFriend(@QueryParam("token") String token, @PathParam("pair-id") Integer pairId) {
        //400
        if (token == null || token.isEmpty()) { //トークンがないか空だったら
            var response = Response.status(Response.Status.BAD_REQUEST).entity("トークンが無効");
            return Response.status(Response.Status.BAD_REQUEST).build();
        }

        //404
        if (!friendService.removeFriendPair(token,pairId)){ //トークンに対応したユーザが選択したフレンドが存在しない時
            var response = Response.status(Response.Status.NOT_FOUND).entity("データが存在しないです。");//404
            return Response.status(Response.Status.NOT_FOUND).build();
        }

        //200
        return Response.status(Response.Status.OK).build();

        //500は勝手にサーバがエラーでたらでるから書かない
    }


}