package org.ntlab.tampoposerver.resources;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.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;
}
@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).entity(pair).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).entity(pair).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は勝手にサーバがエラーでたらでるから書かない
}
}