diff --git a/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java b/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java index 27a81f8..94e2190 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java @@ -6,6 +6,7 @@ import org.ntlab.tampoposerver.models.FriendPair; import org.ntlab.tampoposerver.repositories.UserRepository; import org.ntlab.tampoposerver.models.User; +import org.ntlab.tampoposerver.services.FriendService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -28,6 +29,9 @@ 変数名は先頭小文字 未コミットの編集→スタッシュで書き換えてしまったコードを退避させることができる + +ポストマンでテスト +1. */ @Path("/users") @@ -35,13 +39,15 @@ public class UsersResource { - // 初期化 - private UserRepository userRepository = null; //spring bootがインスタンスを1個作って管理している インスタンスが一個しかないクラスをシングルトンという - @Autowired//インスタンスを作るときに呼び出されるメソッドであるコンストラクタを書く - public UsersResource(UserRepository userRepository) { + private final UserRepository userRepository; + private final FriendService friendService; + + @Autowired + public UsersResource(UserRepository userRepository, + FriendService friendService) { //インスタンスを作るときに呼び出されるメソッドであるコンストラクタを書く this.userRepository = userRepository; - + this.friendService = friendService; } //@Path("/{uid}/..")などパスを指定する @@ -54,10 +60,9 @@ repositoryのメソッド名:add, get, delete 本来の流れはインターフェースだけ決めておく メソッド名と引数名*/ public Response getUsers() { - //TODO:getAllUsersという名前でユーザーのリストを返してくれるメソッドを作ってもらう List users = userRepository.getAllUsers(); if (users.isEmpty()) { - return Response.noContent().build(); // 204 + return Response.noContent().build(); } return Response.ok(users).build(); } @@ -83,7 +88,7 @@ } - //単一アカウントの情報を返す ok + //単一アカウントの情報を返す @GET @Path("/{userId}") @Produces(MediaType.APPLICATION_JSON) @@ -199,7 +204,7 @@ ); } - //ここから先ニックネームアップデート + //ニックネームアップデート user.setName(newName); return Response.ok(user.getName(), MediaType.APPLICATION_JSON).build(); @@ -233,14 +238,14 @@ } - //ここから先パスワードのアップデート + //パスワードのアップデート user.setPassword(newPassword); return Response.ok().build(); } - //単一アカウントのemailの取得 ok + //単一アカウントのemailの取得 @GET @Path("/{userId}/email") @Produces(MediaType.APPLICATION_JSON) @@ -275,13 +280,13 @@ ); } - //ここから先emailアップデート + //emailアップデート user.setEmail(newEmail); return Response.ok(user.getEmail(), MediaType.APPLICATION_JSON).build(); } - //指定されたIDのアイコンを返す ok + //指定されたIDのアイコンを返す @GET @Path("/{userId}/icon") @Produces(MediaType.APPLICATION_JSON) @@ -342,18 +347,17 @@ .build() ); } - //TODO:山際くんにpairIdを取ってきて自分じゃない方のuserIdを渡すメソッドを作ってもらう - ArrayList friendIds = user.getFriendPairs(); - //pairIdからuserIdを2つ引っ張ってくる - friendIds.get(0).getUser0Id(); - //山際くんが書く - - //userIdで自分じゃない方をピックアップ - - //リストにして返却 + //pairIdを取ってきて自分じゃない方のuserIdを渡す + List friendIds = friendService.getFriendIds(token, userId); + if (friendIds == null) { // 認証失敗 or ユーザ無し + throw new WebApplicationException( + Response.status(Response.Status.FORBIDDEN) + .entity("認証失敗またはユーザ不一致") + .build()); + } return Response - .ok(friendIds) + .ok() .build(); } @@ -387,10 +391,10 @@ } - //ペアの削除  TODO:山際くんのものを使うために実装を変更 + //ペアの削除  @DELETE @Path("/{userId}/friends/{pairId}") - public Response deleteFriends(@PathParam("userId") String userId, @PathParam("pairId") String pairId, @QueryParam("token") String token) { + public Response deleteFriends(@PathParam("userId") String userId, @PathParam("pairId") int pairId, @QueryParam("token") String token) { User user = userRepository.getUser(userId); if (user == null) { throw new NotFoundException("IDが存在しません"); @@ -405,17 +409,12 @@ ); } - FriendPair pair = user.getFriendPairs() - .stream() - .filter(p -> p.getId().equals(pairId)) - .findFirst() - .orElse(null); + boolean removed = friendService.removeFriendPair(token, pairId); + if(!removed) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } - - - //TODO:岩谷さんにペア削除を作ってもらう - userRepository.deleteFriendPair(userId, pair); return Response.noContent().build(); } }