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.ArrayList;
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)
@Produces (MediaType.APPLICATION_JSON)
public Response postFriends(@FormParam("token")String token,@FormParam("user0-id")String user0Id,@FormParam("user1-id")String user1Id){
// System.out.println("POST /friends called");
// System.out.println("token=" + token + ", user0=" + user0Id + ", user1=" + user1Id);
//400
if (token == null || token.isEmpty()) { //トークンがないか空だったら
var response = Response.status(Response.Status.BAD_REQUEST).entity("トークンが無効です。");
return Response.status(Response.Status.BAD_REQUEST).build();
}
// System.out.println("400 checked");
//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();
}
// System.out.println("403 checked");
//200成功
FriendPair pair = friendService.createFriendPair(user0Id,user1Id);
// System.out.println("friendService started");
if (pair == null) {
// System.out.println("No friend pair created");
return Response.status(Response.Status.NOT_FOUND).build();
}
return Response.status(Response.Status.OK).entity(pair).build();
//500は勝手にサーバがエラーでたらでるから書かない
}
@Path("/pairs/{pair-id}")
@GET
@Produces (MediaType.APPLICATION_JSON)
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("/pairs/{pair-id}")
@DELETE
@Produces (MediaType.APPLICATION_JSON)
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は勝手にサーバがエラーでたらでるから書かない
}
@Path("/users/{user-id}")
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getFriendslist(@PathParam("user-id") String userId, @QueryParam("token") String token){
//400
if (token == null || token.isEmpty()) { //トークンがないか空だったら
var response = Response.status(Response.Status.BAD_REQUEST).entity("トークンが無効です。");
return Response.status(Response.Status.BAD_REQUEST).build();
}
//200成功
ArrayList<String> pair = friendService.getFriendIds(token, userId);
if (pair == null) {
return Response.status(Response.Status.NOT_FOUND).build();
}
//200成功
return Response.status(Response.Status.OK).entity(pair).build();
}
}