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.ChatRequest;
import org.ntlab.tampoposerver.models.FriendRequest;
import org.ntlab.tampoposerver.repositories.ChatRequestRepository;
import org.ntlab.tampoposerver.repositories.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import static javax.ws.rs.core.Response.status;
@Path("/chat-requests/")
@Component
public class ChatRequestsResource {
private ChatRequestRepository chatRequestRepository ;
private UserRepository userRepository = null;
@Autowired
public ChatRequestsResource(UserRepository userRepository,ChatRequestRepository chatRequestRepository) {
this.userRepository = userRepository;
this.chatRequestRepository = chatRequestRepository;
}
@GET
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response getChatRequests(
@QueryParam("token") String token,
@QueryParam("user-id") String userId) {
//400(認証が必要です) tokenがなかったら400
if (token == null || token.isEmpty() || userId == null || userId.isEmpty()) {
return status(Response.Status.BAD_REQUEST)
.entity("認証が必要です").build();
}
//tokenのチェックはこっちでする、ほかのひとがしていた
// 岩谷さんのUserRepositoryでtokenの確認を行う
if (!userRepository.checkToken(userId, token) ) {
return Response.status(Response.Status.UNAUTHORIZED).entity("権限がありません").build();
}
//200(成功レスポンス)
List<ChatRequest> requests = chatRequestRepository.getChatRequestsForUser(userId);//前の人がListだったらArrayListになるから作ってて頼む時はListで頼め
//404 ユーザが存在しません
if (requests==null) {
return Response.status(Response.Status.NOT_FOUND).entity("データが存在しません").build();
}
return Response.status(Response.Status.OK).entity(requests).build();
}
//チャットリクエストの作成
//トークンを使って他人の情報を返さないように実装する。
@POST
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.TEXT_PLAIN)
public Response postChatRequest(
@FormParam("token") String token,
@FormParam("sender-id") String senderId,
@FormParam("receiver-id") String receiverId) {
//404 ユーザが存在しません
if (userRepository.getUser(senderId) == null||userRepository.getUser(receiverId)==null) {
return Response.status(Response.Status.NOT_FOUND).entity("ユーザが存在しません").build();
}
//トークンのチェックよろしくじぶんで
if (!userRepository.checkToken(senderId, token) && !userRepository.checkToken(receiverId, token)) {
return Response.status(Response.Status.UNAUTHORIZED).entity("権限がありません").build();
}
//204チャットがリクエストされました
ChatRequest created = chatRequestRepository.addChatRequest(senderId, receiverId);
if (created == null) {
return status(Response.Status.BAD_REQUEST)
.entity("チャットリクエストの作成に失敗しました").build();
}
return Response.
status(Response.Status.OK).entity(created.getChatRequestId()).build();
}
@Path("/{chat-request-id}")
@DELETE
public Response deleteChatRequest(
@QueryParam("token") String token,
@PathParam("chat-request-id") Integer chatRequestId) {
//401承認が必要です
if (token == null || token.isEmpty()) {
return status(Response.Status.BAD_REQUEST)
.entity("認証が必要です") // 401
.build();
}
//403(未認証&トークンの不一致)
ChatRequest chatRequest = chatRequestRepository.getChatRequest(chatRequestId);
if (chatRequest == null) {
return Response.status(Response.Status.NOT_FOUND).entity("データが存在しません").build();
}
String senderId = chatRequest.getSenderId();
String receiverId = chatRequest.getReceiverId();
if (!userRepository.checkToken(senderId, token) && !userRepository.checkToken(receiverId, token)) {
return Response.status(Response.Status.UNAUTHORIZED).entity("権限がありません").build();
}
//404チャットリクエストが見つかりません。
ChatRequest deleted = chatRequestRepository.deleteChatRequest(chatRequestId);
if (deleted==null) {
return status(Response.Status.NOT_FOUND)
.entity("チャットリクエストが見つかりません") // 404
.build();
}
//204チャットリクエストが削除されました
return status(Response.Status.NO_CONTENT).build();
}
}