diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java index d45cbb8..08960c5 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java @@ -3,7 +3,6 @@ import org.ntlab.tampoposerver.models.ChatRequest; import org.springframework.stereotype.Repository; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -13,19 +12,36 @@ private int id = 0; public ChatRequest addChatRequest(String senderId, String receiverId) { - return null; + ChatRequest chatRequest = new ChatRequest(id, senderId, receiverId); + chatRequests.put(id, chatRequest); + id++; + return chatRequest; } public ChatRequest getChatRequest(int chatRequestId) { return chatRequests.get(chatRequestId); } - public ArrayList getChatRequestsForUser(String userId) { - return null; + public List getChatRequestsForUser(String userId) { + if(userId == null) { + return null; + } + List chatRequestsForUser; + chatRequestsForUser = chatRequests.values().stream().filter(chatReq -> chatReq.getReceiverId().equals(userId) || chatReq.getSenderId().equals(userId)).toList(); + if(chatRequestsForUser.isEmpty()) { + return null; + } + return chatRequestsForUser; } public ChatRequest deleteChatRequest(int chatRequestId) { - return null; + ChatRequest chatRequest = chatRequests.get(chatRequestId); + if(chatRequest == null) { + return null; + } + + chatRequest = chatRequests.remove(chatRequestId); + return chatRequest; } } diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java index cf0cc06..c016ec6 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.List; import static jakarta.ws.rs.core.Response.status; @@ -45,7 +46,7 @@ //200(成功レスポンス) - ArrayList requests = chatRequestRepository.getChatRequestsForUser(userId);//前の人がListだったらArrayListになるから作ってて頼む時はListで頼め + List requests = chatRequestRepository.getChatRequestsForUser(userId);//前の人がListだったらArrayListになるから作ってて頼む時はListで頼め //tokenのチェックはこっちでする、ほかのひとがしていた // 岩谷さんのUserRepositoryでtokenの確認を行う if (!userRepository.checkToken(userId, token) ) { @@ -91,19 +92,25 @@ @Path("/chat-requests/{chat-request-id}") @DELETE public Response deleteChatRequest( - @QueryParam("receiver-token") String receiverToken, + @QueryParam("token") String token, @PathParam("chat-request-id") Integer chatRequestId) { //401承認が必要です - if (receiverToken == null || receiverToken.isEmpty()) { + if (token == null || token.isEmpty()) { return status(Response.Status.UNAUTHORIZED) .entity("認証が必要です") // 401 .build(); } //403(未認証&トークンの不一致) - //ChatRequestRepository.getChatRequest(chatRequestId); - if (!userRepository.checkToken(null, null) && !userRepository.checkToken(null, null)) { + ChatRequest chatRequest = chatRequestRepository.getChatRequest(chatRequestId); + if (chatRequest == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + String senderId = chatRequest.getSenderId(); + String receiverId = chatRequest.getReceiverId(); + + if (!userRepository.checkToken(senderId, token) && !userRepository.checkToken(receiverId, token)) { return Response.status(Response.Status.UNAUTHORIZED).build(); } diff --git a/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java b/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java index ddea638..30a951c 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java @@ -12,6 +12,8 @@ import java.util.ArrayList; import java.util.List; + +import static io.micrometer.common.util.StringUtils.isBlank; /* //6/10報告:全部できた(friendまで)、UserRepositoryとの連携ができていない(updateあります?)、responseがない //6/17報告:すべてのユーザーの情報を持ってくるところ、フレンドペアの自分じゃない方のuidを返すところ、フレンドペアの削除はもらったものを連携できていない @@ -40,13 +42,13 @@ private final UserRepository userRepository; - private final FriendService friendService; + private final FriendService friendService; @Autowired public UsersResource(UserRepository userRepository, - FriendService friendService) { //インスタンスを作るときに呼び出されるメソッドであるコンストラクタを書く + FriendService friendService) { //インスタンスを作るときに呼び出されるメソッドであるコンストラクタを書く this.userRepository = userRepository; - this.friendService = friendService; + this.friendService = friendService; } //@Path("/{uid}/..")などパスを指定する @@ -73,13 +75,30 @@ @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public Response createUser(@FormParam("user-id") String userId, @FormParam("password") String password) { - //ユーザーがいるか調べる - User user = userRepository.getUser(userId); - if (userRepository.getUser(userId) != null) { + if (isBlank(userId) || isBlank(password)) { + throw new WebApplicationException( + Response.status(Response.Status.BAD_REQUEST) + .entity("ユーザーIDおよびパスワードを入力してください") + .build()); + } + + + //ユーザーIDが存在しているか調べる +// ArrayList userIdList = new ArrayList(); +// userIdList.add(userRepository.getAllUsers()); +// for (int i = 0; i < userIdList.size(); i++) { +// if(userId.equals(userIdList.get(i).toString())) { +// throw new WebApplicationException(Response.Status.CONFLICT); +// } +// } + + User existingUser = userRepository.getUser(userId); + if (existingUser != null) { return Response.status(Response.Status.CONFLICT) - .entity("すでにユーザーが存在しています") + .entity("ユーザーIDが重複しています") .build(); } + User newUser = userRepository.addUser(userId, password); //6/12ここはswaggerではなくコードを仕様にすると決定しました。 @@ -143,6 +162,21 @@ @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public Response login(@PathParam("user-id") String userId, @FormParam("password") String password) { + + if (userId == null || userId.isBlank()) { + throw new WebApplicationException( + Response.status(Response.Status.BAD_REQUEST) + .entity("user-id は必須です") + .build()); + } + + if (password == null || password.isBlank()) { + throw new WebApplicationException( + Response.status(Response.Status.BAD_REQUEST) + .entity("password は必須です") + .build()); + } + //存在チェック User user = userRepository.getUser(userId); if (user == null) { @@ -224,6 +258,15 @@ if (user == null) { throw new WebApplicationException(Response.Status.NOT_FOUND); } + + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + return Response.ok(user.getPassword(), MediaType.APPLICATION_JSON).build(); } @@ -231,43 +274,12 @@ @PUT @Path("/{user-id}/password") @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updatePassword(@PathParam("user-id") String userId, @FormParam("new-password") String newPassword) { + public Response updatePassword(@PathParam("user-id") String userId, @FormParam("new-password") String newPassword, @FormParam("token") String token) { - User user = userRepository.getUser(userId); - if (user == null) { - throw new WebApplicationException( - Response.status(Response.Status.NOT_FOUND) - .entity("ユーザーが存在しません") - .build() - ); + if (newPassword == null || newPassword.isBlank()) { + throw new WebApplicationException(Response.Status.BAD_REQUEST); } - - //パスワードのアップデート - user.setPassword(newPassword); - return Response.ok().build(); - - } - - - //単一アカウントのemailの取得 - @GET - @Path("/{user-id}/email") - @Produces(MediaType.APPLICATION_JSON) - public Response getEmail(@PathParam("user-id") String userId) { - User user = userRepository.getUser(userId); - if (user == null) { - throw new WebApplicationException(Response.Status.NOT_FOUND); - } - return Response.ok(user.getEmail(), MediaType.APPLICATION_JSON).build(); - } - - //指定されたIDのemailを変更する - @PUT - @Path("/{user-id}/email") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updateEmail(@PathParam("user-id") String userId, @FormParam("new-email") String newEmail, @FormParam("token") String token) { - User user = userRepository.getUser(userId); if (user == null) { throw new WebApplicationException( @@ -285,6 +297,73 @@ ); } + + //パスワードのアップデート + user.setPassword(newPassword); + return Response.ok().build(); + + } + + + //単一アカウントのemailの取得 + @GET + @Path("/{user-id}/email") + @Produces(MediaType.APPLICATION_JSON) + public Response getEmail(@PathParam("user-id") String userId, @QueryParam("token") String token) { + + User user = userRepository.getUser(userId); + if (user == null) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + return Response.ok(user.getEmail(), MediaType.APPLICATION_JSON).build(); + } + + //指定されたIDのemailを変更する + @PUT + @Path("/{user-id}/email") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + public Response updateEmail(@PathParam("user-id") String userId, @FormParam("new-email") String newEmail, @FormParam("token") String token) { + + if (newEmail == null || newEmail.isBlank()) { + throw new WebApplicationException(Response.Status.BAD_REQUEST); + } + + + User user = userRepository.getUser(userId); + if (user == null) { + throw new WebApplicationException( + Response.status(Response.Status.NOT_FOUND) + .entity("ユーザーが存在しません") + .build() + ); + } + //メールアドレスの重複チェック + ArrayList userEmailLists = userRepository.getAllEmails(); + for (String userEmailList : userEmailLists) { + if (userEmailList != null && userEmailList.equals(newEmail)) { + throw new WebApplicationException(Response.status(Response.Status.CONFLICT).entity("emailが重複しています").build()); + //return Response.status(Response.Status.CONFLICT).entity("emailが重複しています").build(); + } + } + + if (token == null || !token.equals(user.getToken())) { + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗") + .build() + ); + } + + //emailアップデート user.setEmail(newEmail); return Response.ok(user.getEmail(), MediaType.APPLICATION_JSON).build(); @@ -309,6 +388,10 @@ @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public String updateIcon(@PathParam("user-id") String userId, @FormParam("new-icon") String newIcon, @FormParam("token") String token) { + if (newIcon == null || newIcon.isBlank()) { + throw new WebApplicationException(Response.Status.BAD_REQUEST); + } + User user = userRepository.getUser(userId); if (user == null) { throw new WebApplicationException( @@ -372,6 +455,11 @@ @Path("/{user-id}/friends/{pair-id}") @Produces(MediaType.APPLICATION_JSON) public Response getPairId(@PathParam("user-id") String userId, @QueryParam("token") String token, @PathParam("pair-id") String pairId) { + + if (pairId == null || pairId.isBlank()) { + throw new WebApplicationException(Response.Status.BAD_REQUEST); + } + User user = userRepository.getUser(userId); if (user == null) { throw new WebApplicationException( @@ -400,7 +488,11 @@ @DELETE @Path("/{user-id}/friends/{pair-id}") @Produces(MediaType.APPLICATION_JSON) - public Response deleteFriends(@PathParam("user-id") String userId, @PathParam("pair-id") int pairId, @QueryParam("token") String token) { + public Response deleteFriends(@PathParam("user-id") String userId, @PathParam("pair-id") Integer pairId, @QueryParam("token") String token) { + + if (pairId == null || pairId <= 0) { + throw new WebApplicationException(Response.Status.BAD_REQUEST); + } User user = userRepository.getUser(userId); if (user == null) { throw new NotFoundException("IDが存在しません"); @@ -417,7 +509,7 @@ boolean removed = friendService.removeFriendPair(token, pairId); - if(!removed) { + if (!removed) { throw new WebApplicationException(Response.Status.NOT_FOUND); } diff --git a/src/test/java/org/ntlab/tampoposerver/models/ChatRequestTest.java b/src/test/java/org/ntlab/tampoposerver/models/ChatRequestTest.java new file mode 100644 index 0000000..4886c25 --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/models/ChatRequestTest.java @@ -0,0 +1,33 @@ +package org.ntlab.tampoposerver.models; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ChatRequestTest { + + @Test + void contextLoads() { + ChatRequest c1 = new ChatRequest(0,"u02","u01"); + ChatRequest c2 = new ChatRequest(1,"u01","u02"); + assertEquals(0, c1.getChatRequestId()); + assertEquals("u02", c1.getSenderId()); + assertEquals("u01", c1.getReceiverId()); + assertEquals(1, c2.getChatRequestId()); + assertEquals("u01", c2.getSenderId()); + assertEquals("u02", c2.getReceiverId()); + + c1.setChatRequestId(2); + c1.setSenderId("u01"); + c1.setReceiverId("u02"); + c2.setChatRequestId(3); + c2.setSenderId("u02"); + c2.setReceiverId("u01"); + assertEquals(2, c1.getChatRequestId()); + assertEquals("u01", c1.getSenderId()); + assertEquals("u02", c1.getReceiverId()); + assertEquals(3, c2.getChatRequestId()); + assertEquals("u02", c2.getSenderId()); + assertEquals("u01", c2.getReceiverId()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/ChatRequestRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/ChatRequestRepositoryTest.java new file mode 100644 index 0000000..123bf3e --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/repositories/ChatRequestRepositoryTest.java @@ -0,0 +1,66 @@ +package org.ntlab.tampoposerver.repositories; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.junit.jupiter.api.Test; +import org.ntlab.tampoposerver.models.ChatRequest; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +public class ChatRequestRepositoryTest { + + @Test + void contestLoads() throws JsonProcessingException { + ChatRequestRepository chatRequestRepository = new ChatRequestRepository(); + + //addとgetのテスト + ChatRequest chatRequest1 = chatRequestRepository.addChatRequest("u1","u2"); + ChatRequest chatRequest2 = chatRequestRepository.addChatRequest("u2","u3"); + ChatRequest chatRequest3 = chatRequestRepository.addChatRequest("u3","u4"); + + ChatRequest c1 = chatRequestRepository.getChatRequest(0); + ChatRequest c2 = chatRequestRepository.getChatRequest(1); + ChatRequest c3 = chatRequestRepository.getChatRequest(2); + ChatRequest c_null1 = chatRequestRepository.getChatRequest(-1); + assertEquals(chatRequest1, c1); + assertEquals(chatRequest2, c2); + assertEquals(chatRequest3, c3); + assertNotEquals(chatRequest1, c2); + assertNotNull(c1); + assertNull(c_null1); + + //Listのgetテスト + List list1 = chatRequestRepository.getChatRequestsForUser("u2"); + List list_null1 = chatRequestRepository.getChatRequestsForUser("u0"); + assertNotNull(list1); + assertNull(list_null1); + + //Jsonでの表示テスト + ObjectMapper mapper = new ObjectMapper(); + mapper.registerModule(new JavaTimeModule()); + mapper.findAndRegisterModules(); + + String chatRequestJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(list1); + System.out.println("u2_list: " + chatRequestJson); + + String singleChatRequestJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString( + chatRequestRepository.getChatRequest(0) + ); + System.out.println("id0,u1 and u2: " + singleChatRequestJson); + + //deleteテスト + ChatRequest before = chatRequestRepository.getChatRequest(0); + ChatRequest after = chatRequestRepository.deleteChatRequest(0); + ChatRequest c_null2 = chatRequestRepository.deleteChatRequest(-1); + assertNotNull(after); + assertEquals(before, after); + assertNull(c_null2); + ChatRequest c_null3 = chatRequestRepository.getChatRequest(0); + assertNull(c_null3); + } +}