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(); } }