package org.ntlab.tampoposerver.resources;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.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
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
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.TEXT_PLAIN)
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(Integer.toString(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();
}
}
}