diff --git a/src/main/java/org/ntlab/tampoposerver/models/ChatRequest.java b/src/main/java/org/ntlab/tampoposerver/models/ChatRequest.java new file mode 100644 index 0000000..15aa63a --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/models/ChatRequest.java @@ -0,0 +1,37 @@ +package org.ntlab.tampoposerver.models; + +public class ChatRequest { + private Integer chatRequestId; + private String senderId; + private String receiverId; + + public ChatRequest(Integer chatRequestId, String senderId, String receiverId) { + this.chatRequestId = chatRequestId; + this.senderId = senderId; + this.receiverId = receiverId; + } + + public Integer getChatRequestId() { + return chatRequestId; + } + + public void setChatRequestId(Integer chatRequestId) { + this.chatRequestId = chatRequestId; + } + + public String getSenderId() { + return senderId; + } + + public void setSenderId(String senderId) { + this.senderId = senderId; + } + + public String getReceiverId() { + return receiverId; + } + + public void setReceiverId(String receiverId) { + this.receiverId = receiverId; + } +} diff --git a/src/main/java/org/ntlab/tampoposerver/models/UserDTO.java b/src/main/java/org/ntlab/tampoposerver/models/UserDTO.java new file mode 100644 index 0000000..a8379d3 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/models/UserDTO.java @@ -0,0 +1,29 @@ +package org.ntlab.tampoposerver.models; + +public class UserDTO { + private String name; + private String icon; + + public UserDTO(User user) { + this.name = user.getName(); + this.icon = user.getIcon(); + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + +} diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java index 9f20f74..2460b82 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java @@ -8,6 +8,8 @@ import java.util.HashMap; import java.util.List; +import static java.awt.SystemColor.text; + @Repository public class ActivityRepository { @@ -26,8 +28,11 @@ if(activityMap.get(userId) == null) { activityMap.put(userId, new HashMap<>()); } + //アクティビティマップにそのユーザのアクティビティIDと4項目を保存 activityMap.get(userId).put(activityId,a); + + acId++; @@ -38,13 +43,30 @@ return a; } - //アクティビティを取得 + //単一のアクティビティを取得 public Activity getActivity(String userId,String activityId) { if(activityMap.get(userId) == null) { return null; } - return activityMap.get(userId).get(activityId); + + HashMap activities = activityMap.get(userId); + + if(activities.get(activityId) == null) { + return null; + } + Activity activity = activities.get(activityId); + return activity; } +// +// public HashMap getActivitiesForUser(String userId){ +// if(activityMap.get(userId) == null) { +// return null; +// } +// +// //keySet());ならアクティビティIDだけで詳細が取れない +// HashMap value = activityMap.get(userId); +// return value; +// } //アクティビティのテキストが存在しないとき public boolean isValidActivity(String userId, String activityId) { @@ -60,6 +82,21 @@ return true; } + //アクティビティのテキストを返すメソッド + public String getActivityText(String userId,String activityId) { + if(activityMap.get(userId) == null) { + return null; + } + + HashMap activities = activityMap.get(userId); + + if(activities.get(activityId) == null) { + return null; + } + Activity activity = activities.get(activityId); + return activity.getText(); + } + //アクティビティを削除するメソッド public boolean deleteActivity(String userId, String activityId) { HashMap userActivities = activityMap.get(userId); @@ -104,13 +141,39 @@ return null; // ユーザーにアクティビティがない場合 } + //最新のアクティビティを返す + public Activity getLatestActivity(String userId) { + HashMap userActivities = activityMap.get(userId); + if (userActivities != null && !userActivities.isEmpty()) {//userActivitiesが存在かつ要素が入っていれば + // 最も新しい更新時間を取得 + Collection activities = userActivities.values(); + Activity latestActivity = null; // + String latestUpdateTime = ""; + for (Activity activity : activities) { + String updateTime = activity.getUpdateTime(); + if (updateTime.compareTo(latestUpdateTime) > 0) { + latestUpdateTime = updateTime; + latestActivity = activity; + } + } + //最新時刻のアクティビティを取ってきたい + return latestActivity; +// return userActivities.values().stream()//取り出した値(Activityの集合)をストリームに変換し順に処理をつなげていく +// .map(Activity::getUpdateTime)//更新日時を取得します +// .max(String::compareTo)//更新日時の中から「最大の値」(最も新しい日時)を取得します +// .orElse(null); // 最後の更新時間が見つからない場合はnullを返す + } + return null; // ユーザーにアクティビティがない場合 + } + //そのユーザの全アクティビティ情報を保存するリストをの作成 - public List getActivitiesForUser(String userId){ + public HashMap getActivitiesForUser(String userId){ if(activityMap.get(userId) == null) { - return new ArrayList<>(); + return null; } //keySet());ならアクティビティIDだけで詳細が取れない - return new ArrayList<>(activityMap.get(userId).keySet()); + HashMap value = activityMap.get(userId); + return value; } } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java new file mode 100644 index 0000000..08960c5 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/repositories/ChatRequestRepository.java @@ -0,0 +1,47 @@ +package org.ntlab.tampoposerver.repositories; + +import org.ntlab.tampoposerver.models.ChatRequest; +import org.springframework.stereotype.Repository; + +import java.util.HashMap; +import java.util.List; + +@Repository +public class ChatRequestRepository { + private final HashMap chatRequests = new HashMap<>(); + private int id = 0; + + public ChatRequest addChatRequest(String senderId, String receiverId) { + ChatRequest chatRequest = new ChatRequest(id, senderId, receiverId); + chatRequests.put(id, chatRequest); + id++; + return chatRequest; + } + + public ChatRequest getChatRequest(int chatRequestId) { + return chatRequests.get(chatRequestId); + } + + 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) { + 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/repositories/UserRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java index c65beaa..c695d39 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java @@ -27,14 +27,24 @@ return userMap.get(userId); } - public ArrayList getAllUsers() {//全アカウントのuserIdを取得 - ArrayList u = new ArrayList<>(); + public ArrayList getAllUsers() {//全アカウントのuserIdを取得 + ArrayList u = new ArrayList<>(); for (String key : userMap.keySet()) { - u.add(userMap.get(key)); + User user = userMap.get(key); + u.add(user.getUserId()); } return u; } + public ArrayList getAllEmails() { + ArrayList emails = new ArrayList<>(); + for (String key : userMap.keySet()) { + User user = getUser(key); + emails.add(user.getEmail()); + } + return emails; + } + public User deleteUser(String userId) {//ユーザー情報の削除 return userMap.remove(userId); } diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java index a4da893..c779bb1 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/ActivitiesResource.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Component; import java.time.LocalTime; +import java.util.HashMap; @Path("/users") @Component @@ -29,83 +30,89 @@ @GET //アカウントの全アクティビティを取得 public Response getActivities(@PathParam("user-id") String userId, @QueryParam("filter") String filter) { - //失敗 - //400(ユーザーnull or 空だったら) + + //400(ユーザーIDがnull or 空) if (userId == null || userId.isEmpty()) { - var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); - throw new WebApplicationException(response.build()); +// var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); +// throw new WebApplicationException(response.build()); + return Response.status(Response.Status.BAD_REQUEST).build(); } - Activity activity = activityRepository.getActivity(userId, filter); + HashMap activities = activityRepository.getActivitiesForUser(userId); - //404(アクティビティが存在しないとき) - if (activity == null) { //取得した最新のアクティビティがnullのとき + //404(取得したアクティビティがnull) + if (activities == null) { var response = Response.status(Response.Status.NOT_FOUND).entity("アクティビティが存在しません"); throw new WebApplicationException(response.build()); } - //200(アカウントの全アクティビティを取得) - return Response.status(Response.Status.OK).entity(activity).build(); - } - - @Path("/{user-id}/activities") - @POST //新規のアクティビティを投稿する - @Consumes(MediaType.APPLICATION_FORM_URLENCODED)//bodyに入力する値がある時 - public Response postActivities(@PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("new-activity") String newActivity) { - //失敗 - //400(不正なリクエスト) - if (token == null || token.isEmpty() || newActivity == null || newActivity.isEmpty()) { //トークン or 新アクティビティがnull or 空だったら - var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); - throw new WebApplicationException(response.build()); - } - - //403(未認証&トークンの不一致) - if (!userRepository.checkToken(userId, token)) { // ユーザーまたはトークンが存在しない はるかと相談済み - var response = Response.status(Response.Status.FORBIDDEN).entity("認証エラー"); - throw new WebApplicationException(response.build()); - } - - - //404(ユーザーが存在しないとき) - if (userRepository.getUser(userId) == null) { - var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーが存在しません"); - throw new WebApplicationException(response.build()); - } - /* 500(予期せぬエラー) spring bootが500を返してくれるからコードなし */ - //成功 - //200(アクティビティを作成) - LocalTime time = LocalTime.now(); //ローカルの時間を取得 - Activity addedActivity = activityRepository.addActivity(userId, newActivity, time.toString()); //追加されたアクティビティの情報を、あとで使えるように addedActivity に入れている - return Response.status(Response.Status.OK).entity(addedActivity.getActivityId()).build(); + //200(filterの値がLATESTのときに最新の単一アクティビティをGET) + if (filter != null && filter.equals("LATEST")) { //equals:filterの値とLATESTが一致しているときtrue + Activity getLatestActivity = activityRepository.getLatestActivity(userId); + return Response.status(Response.Status.OK).entity(getLatestActivity).build(); + } + + //200(アカウントの全アクティビティをGET) + return Response.status(Response.Status.OK).entity(activities).build(); } - @Path("/{user-id}/activities/{activity-id}") - @GET //アカウントの単一アクティビティを取得する - public Response getActivity(@PathParam("user-id") String userId, - @PathParam("activity-id") String activityId) { + @Path("/{user-id}/activities") + @POST //新規のアクティビティを投稿する + @Consumes(MediaType.APPLICATION_FORM_URLENCODED)//bodyに入力する値がある時 + public Response postActivities(@PathParam("user-id") String userId, + @FormParam("token") String token, + @FormParam("new-activity") String newActivity) { - //400(不正なリクエスト) - if (activityId == null || activityId.isEmpty()) { //アクティビティがnull or 空だったら + //400(トークン or 新アクティビティがnull or 空) + if (token == null || token.isEmpty() || newActivity == null || newActivity.isEmpty()) { var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); throw new WebApplicationException(response.build()); } + //403( ユーザーまたはトークンが存在しない) + if (!userRepository.checkToken(userId, token)) { + var response = Response.status(Response.Status.FORBIDDEN).entity("認証エラー"); + throw new WebApplicationException(response.build()); + } + //404(ユーザーが存在しないとき) if (userRepository.getUser(userId) == null) { var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーが存在しません"); throw new WebApplicationException(response.build()); } + //200(アクティビティを作成) + LocalTime time = LocalTime.now(); //ローカルの時間を取得 + Activity addedActivity = activityRepository.addActivity(userId, newActivity, time.toString()); //追加されたアクティビティの情報を、あとで使えるように addedActivity に入れている + return Response.status(Response.Status.OK).entity(addedActivity.getActivityId()).build(); + } + + @Path("/{user-id}/activities/{activity-id}") + @GET //アカウントの単一アクティビティを取得する(アクティビティID,テキスト,投稿時間) + @Produces(MediaType.APPLICATION_JSON) + public Response getActivity(@PathParam("user-id") String userId, + @PathParam("activity-id") String activityId) { + + //400(アクティビティがnull or 空だったら) + if (activityId == null || activityId.isEmpty()) { + var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); + throw new WebApplicationException(response.build()); + } + + //404(ユーザーかアクティビティが存在しないとき) + if (userRepository.getUser(userId) == null || activityRepository.getActivity(userId, activityId) == null) { + var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーかアクティビティが存在しません"); + throw new WebApplicationException(response.build()); + } + //200(アカウントの単一アクティビティを取得) - activityRepository.getActivity(userId, activityId); - return Response.status(Response.Status.OK).build(); + Activity activity = activityRepository.getActivity(userId,activityId); + return Response.status(Response.Status.OK).entity(activity).build(); } @Path("/{user-id}/activities/{activity-id}") @@ -114,8 +121,6 @@ @PathParam("activity-id") String activityId, @QueryParam("token") String token) { - - //失敗 //400(トークン or 新アクティビティがnull or 空だったら) if (token == null || token.isEmpty() || activityId == null || activityId.isEmpty()) { var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); @@ -129,52 +134,50 @@ } - //404(ユーザー存在しないとき) - if (userRepository.getUser(userId) == null) { - var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーが存在しません"); + //404(ユーザーかアクティビティが存在しないとき) + if (userRepository.getUser(userId) == null || activityRepository.getActivity(userId, activityId) == null) { + var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーかアクティビティが存在しません"); throw new WebApplicationException(response.build()); } - /* - 500(予期せぬエラー) - spring bootが500を返してくれるからコードなし - */ - - //成功 //200(アクティビティを削除) - activityRepository.deleteActivity(userId, activityId); - return Response.status(Response.Status.OK).build(); + boolean deleteActivity = activityRepository.deleteActivity(userId,activityId); + if (deleteActivity == true) { + return Response.status(Response.Status.OK).entity("アクティビティが削除されました").build(); + } + else { + return Response.status(Response.Status.BAD_REQUEST).entity("アクティビティが削除されませんでした").build(); + } } @Path("/{user-id}/activities/{activity-id}/text") - @GET //アカウントの単一アクティビティの文章の内容を取得する + @GET //アカウントの単一アクティビティの文章の内容を取得する(テキストのみ) public Response getActivityText(@PathParam("user-id") String userId, @PathParam("activity-id") String activityId) { - //失敗 + //400(不正なリクエスト) if (activityId == null || activityId.isEmpty()) { //アクティビティがnull or 空だったら var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); throw new WebApplicationException(response.build()); } - //404(アクティビティが存在しないとき) - if (activityRepository.getActivity(userId, activityId) == null) { //取得したアクティビティがnullのとき(不正な内容のとき) - var response = Response.status(Response.Status.NOT_FOUND).entity("アクティビティが存在しません"); + //404(ユーザーかアクティビティが存在しないとき) + if (userRepository.getUser(userId) == null || activityRepository.getActivity(userId, activityId) == null) { + var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーかアクティビティが存在しません"); throw new WebApplicationException(response.build()); } - //成功 //200(アカウントの単一アクティビティの文章の内容を取得) - activityRepository.getActivity(userId, activityId); - return Response.status(Response.Status.OK).build(); + String getActivityText = activityRepository.getActivityText(userId, activityId); + return Response.status(Response.Status.OK).entity(getActivityText).build(); } @Path("/{user-id}/activities/{activity-id}/updated-time") @GET //単一アクティビティの投稿時間を取得する public Response getActivityUpdatedTime(@PathParam("user-id") String userId, @PathParam("activity-id") String activityId) { - //失敗 + //400(不正なリクエスト) if (activityId == null || activityId.isEmpty()) { //アクティビティがnull or 空だったら var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); @@ -187,33 +190,29 @@ throw new WebApplicationException(response.build()); } - //成功 //200(単一アクティビティの投稿時間を取得する) - activityRepository.getActivityUpdateTime(userId, activityId); - return Response.status(Response.Status.OK).build(); + String getActivityUpdateTime = activityRepository.getActivityUpdateTime(userId, activityId); + return Response.status(Response.Status.OK).entity(getActivityUpdateTime).build(); } @Path("/{user-id}/activities/last-updated-time") @GET //最新のアクティビティの投稿時間を取得する public Response getActivityLastUpdatedTime(@PathParam("user-id") String userId) { - //失敗 + //400(不正なリクエスト) if (userId == null || userId.isEmpty()) { //ユーザーがnull or 空だったら var response = Response.status(Response.Status.BAD_REQUEST).entity("不正なリクエスト"); throw new WebApplicationException(response.build()); } - //404(アクティビティが存在しないとき) if (activityRepository.getActivitiesForUser(userId).isEmpty() || userRepository.getUser(userId) == null) { //ユーザの全アクティビティ情報を保存するリストが空のとき var response = Response.status(Response.Status.NOT_FOUND).entity("ユーザーかアクティビティが存在しません"); throw new WebApplicationException(response.build()); } - - //成功 //200(最新のアクティビティの投稿時間を取得する) - activityRepository.getLastUpdatedTime(userId); - return Response.status(Response.Status.OK).build(); + String getLastUpdatedTime = activityRepository.getLastUpdatedTime(userId); + return Response.status(Response.Status.OK).entity(getLastUpdatedTime).build(); } } \ No newline at end of file diff --git a/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java new file mode 100644 index 0000000..9dc8feb --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/resources/ChatRequestsResource.java @@ -0,0 +1,138 @@ +package org.ntlab.tampoposerver.resources; + +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.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 jakarta.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 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) + 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(); + } + +} \ No newline at end of file diff --git a/src/main/java/org/ntlab/tampoposerver/resources/FriendRequestsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/FriendRequestsResource.java index 1937276..0742a23 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/FriendRequestsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/FriendRequestsResource.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Component; import java.util.ArrayList; +import java.util.UUID; @Path("/friend-requests") @Component @@ -32,6 +33,12 @@ 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 requests = friendService.getFriendRequests(token); @@ -42,14 +49,18 @@ @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.APPLICATION_JSON) public Response postFriendRequest(@FormParam("sender-id") String senderId, @FormParam("receiver-id") String receiverId, @FormParam("token") String token) { - //201(フレンドリクエスト作成) + + //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(created.getId()).build(); - - } @Path("/{friend-request-id}") diff --git a/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java index 4f4f448..68f77a7 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java @@ -27,7 +27,7 @@ } - @Path("/{pair-id}") + @POST @Consumes (MediaType.APPLICATION_FORM_URLENCODED) public Response postFriends(@FormParam("token")String token,@FormParam("user0-id")String user0Id,@FormParam("user1-id")String user1Id){ @@ -38,7 +38,7 @@ } //403(未認証&トークンの不一致) - if (!userRepository.checkToken(user0Id, token) || !userRepository.checkToken(user1Id, token)) { // ユーザーまたはトークンが存在しない はるかと相談済み + 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(); } @@ -48,7 +48,7 @@ if (pair == null) { return Response.status(Response.Status.NOT_FOUND).build(); } - return Response.status(Response.Status.OK).build(); + return Response.status(Response.Status.OK).entity(pair).build(); //500は勝手にサーバがエラーでたらでるから書かない } @@ -66,7 +66,7 @@ if (pair == null) { return Response.status(Response.Status.NOT_FOUND).build(); } - return Response.status(Response.Status.OK).build(); + return Response.status(Response.Status.OK).entity(pair).build(); } @Path("/{pair-id}") diff --git a/src/main/java/org/ntlab/tampoposerver/resources/NotificationsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/NotificationsResource.java index e0d2311..ed3d776 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/NotificationsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/NotificationsResource.java @@ -19,7 +19,7 @@ public class NotificationsResource { private final UserRepository userRepository; private final NotificationRepository notificationRepository; - //finalによりインスタンス作成後に再代入不可,不変オブジェクト + //finalによりインスタンス作成後に再代入不可,不変オブジェクト(後から再代入しないため) @Autowired public NotificationsResource(UserRepository userRepository, NotificationRepository notificationRepository) { @@ -44,7 +44,8 @@ var response = Response.status(Response.Status.UNAUTHORIZED).entity("認証トークンがありません"); //401 throw new WebApplicationException(response.build()); } - if (!token.equals(user.getToken())) { //リクエストに含まれるトークンが、ユーザーに登録されているトークンと一致していない場合 + //リクエストに含まれるトークンが、ユーザーに登録されているトークンと一致していない場合 + if (!token.equals(user.getToken())) { var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です"); //403 throw new WebApplicationException(response.build()); } @@ -53,6 +54,8 @@ return Response.ok(notifications).build(); } + + //テスト用 @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public Response addNotification(@PathParam("user-id") String userID, @FormParam("from") String from, @FormParam("text") String text, @FormParam("time") String time) { @@ -60,6 +63,7 @@ var response = Response.status(Response.Status.BAD_REQUEST).entity("404"); throw new WebApplicationException(response.build()); } + Notification notification = notificationRepository.addNotification(userID, from, text, time); return Response.ok(notification).build(); } @@ -87,11 +91,13 @@ var response = Response.status(Response.Status.FORBIDDEN).entity("トークンが不正です"); //403 throw new WebApplicationException(response.build()); } - Notification notification = notificationRepository.getNotification(userID, notificationID); //通知詳細を取得 + + Notification notification = notificationRepository.getNotification(userID, notificationID); //詳細取得 if (notification == null) { var response = Response.status(Response.Status.NOT_FOUND).entity("通知が存在しません"); //404 throw new WebApplicationException(response.build()); } + return Response.ok(notification).build(); } @@ -124,11 +130,15 @@ throw new WebApplicationException(response.build()); } - Map response = new HashMap<>(); //HashMapクラスのインスタンスを生成 - response.put("text", notification.getText()); //Mapにキーと値のペアを追加 + //HashMapクラスのインスタンスを生成(キーの順序を保持しない) + Map response = new HashMap<>(); + response.put("text", notification.getText()); + //Mapにキーと値のペアを追加 + //テキストをキーでMapに格納し、レスポンスに使用 return Response.ok(response).build(); } + //通知日時だけを返す @Path("/{notification-id}/time") @GET @@ -162,6 +172,7 @@ return Response.ok(response).build(); } + //通知送信者だけを返す @Path("/{notification-id}/from") @GET diff --git a/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java b/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java index 41f7c43..fa4926a 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/UsersResource.java @@ -4,6 +4,7 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.ntlab.tampoposerver.models.FriendPair; +import org.ntlab.tampoposerver.models.UserDTO; import org.ntlab.tampoposerver.repositories.UserRepository; import org.ntlab.tampoposerver.models.User; import org.ntlab.tampoposerver.services.FriendService; @@ -12,6 +13,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 +43,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}/..")などパスを指定する @@ -59,7 +62,7 @@ repositoryのメソッド名:add, get, delete 本来の流れはインターフェースだけ決めておく メソッド名と引数名*/ public Response getUsers() { - List users = userRepository.getAllUsers(); + List users = userRepository.getAllUsers(); if (users.isEmpty()) { return Response.noContent().build(); } @@ -73,13 +76,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ではなくコードを仕様にすると決定しました。 @@ -102,7 +122,8 @@ if (user == null) { throw new WebApplicationException(Response.Status.NOT_FOUND); } - return Response.ok(user, MediaType.APPLICATION_JSON).build(); + UserDTO userDTO = new UserDTO(user); + return Response.ok(userDTO, MediaType.APPLICATION_JSON).build(); } //ユーザの削除 ok @@ -143,6 +164,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 +260,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 +276,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 +299,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 +390,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( @@ -373,6 +458,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( @@ -418,7 +508,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が存在しません"); @@ -435,7 +529,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/models/FriendPairTest.java b/src/test/java/org/ntlab/tampoposerver/models/FriendPairTest.java new file mode 100644 index 0000000..6fb65f1 --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/models/FriendPairTest.java @@ -0,0 +1,25 @@ +package org.ntlab.tampoposerver.models; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +@SpringBootTest +public class FriendPairTest { + @Test + public void verifyUserEquation() { + FriendPair testPair0 = new FriendPair("user0", "user1"); + FriendPair testPair1 = new FriendPair("another_user0", "another_user1"); + + assertEquals("user0", testPair0.getUser0Id()); + assertEquals("user1", testPair0.getUser1Id()); + assertEquals("another_user0", testPair1.getUser0Id()); + assertEquals("another_user1", testPair1.getUser1Id()); + assertNotEquals("user1", testPair0.getUser0Id()); + assertNotEquals("user0", testPair0.getUser1Id()); + assertNotEquals("another_user1", testPair1.getUser0Id()); + assertNotEquals("another_user0", testPair1.getUser1Id()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/models/FriendRequestTest.java b/src/test/java/org/ntlab/tampoposerver/models/FriendRequestTest.java new file mode 100644 index 0000000..3d4682c --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/models/FriendRequestTest.java @@ -0,0 +1,25 @@ +package org.ntlab.tampoposerver.models; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +@SpringBootTest +public class FriendRequestTest { + @Test + public void verifyFriendRequestEquation() { + FriendRequest testRequest0 = new FriendRequest("user0", "user1"); + FriendRequest testRequest1 = new FriendRequest("another_user0", "another_user1"); + + assertEquals("user0", testRequest0.getSenderId()); + assertEquals("user1", testRequest0.getReceiverId()); + assertEquals("another_user0", testRequest1.getSenderId()); + assertEquals("another_user1", testRequest1.getReceiverId()); + assertNotEquals("user1", testRequest0.getSenderId()); + assertNotEquals("user0", testRequest0.getReceiverId()); + assertNotEquals("another_user1", testRequest1.getSenderId()); + assertNotEquals("another_user0", testRequest1.getReceiverId()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java index 59910eb..a27c2a1 100644 --- a/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java +++ b/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java @@ -57,6 +57,17 @@ Activity a7 = activityRepository.getActivity("xyz", a1.getActivityId()); assertNull(a7); + //アクティビティのテキストを返すメソッド + String text = activityRepository.getActivityText("abc",a2.getActivityId()); + String text2 = activityRepository.getActivityText("abc","-1"); + assertEquals(a2.getText(),text); + assertNotEquals(a100.getText(),text); + assertNull(text2); + System.out.println(a1); + System.out.println(a2); + System.out.println(text); + System.out.println(text2); + //単一アクティビティの投稿時間の取得 String time = activityRepository.getActivityUpdateTime("abc",a2.getActivityId()); String time2 = activityRepository.getActivityUpdateTime("abc","-1"); @@ -76,11 +87,25 @@ System.out.println(newtime); System.out.println(newtime2); + + //最新のアクティビティを返す + Activity latestActivity = activityRepository.getLatestActivity("abc"); + Activity latestActivity2 = activityRepository.getLatestActivity("kkk"); + assertEquals(a2.getUpdateTime(),latestActivity.getUpdateTime()); + assertNotEquals(a100.getUpdateTime(),latestActivity.getUpdateTime()); + assertNull(latestActivity2); + System.out.println(latestActivity); + System.out.println(latestActivity2); + //そのユーザの全アクティビティ情報を保存するリストをの作成 - List list = activityRepository.getActivitiesForUser("abc"); - List list2 = activityRepository.getActivitiesForUser("kkk"); - System.out.println(list2); - System.out.println(list); +// List list = activityRepository.getActivitiesForUser("abc"); +// List list2 = activityRepository.getActivitiesForUser("kkk"); +// System.out.println(list2); +// System.out.println(list); + + activityRepository.addActivity("rana","aaa","2025/07/17 14:17"); + Activity activity = activityRepository.getActivity("rana","4"); + System.out.println(activity); } } 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); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/FriendRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/FriendRepositoryTest.java new file mode 100644 index 0000000..dc74bd1 --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/repositories/FriendRepositoryTest.java @@ -0,0 +1,49 @@ +package org.ntlab.tampoposerver.repositories; + +import org.junit.jupiter.api.Test; +import org.ntlab.tampoposerver.models.FriendPair; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +@SpringBootTest +public class FriendRepositoryTest { + @Autowired + private FriendRepository friendRepository; + + @Test + public void contextLoads() { + assertThat(friendRepository).isNotNull(); + } + + @Test + public void test() { + // Adding friend pair + FriendPair pair = new FriendPair("user-0", "user-1"); + FriendPair addedPair = friendRepository.add(pair); + assertEquals(0, addedPair.getId()); + assertEquals("user-0", addedPair.getUser0Id()); + assertEquals("user-1", addedPair.getUser1Id()); + + FriendPair anotherPair = new FriendPair("another-user-0", "another-user-1"); + FriendPair anotherAddedPair = friendRepository.add(anotherPair); + assertEquals(1, anotherAddedPair.getId()); + assertEquals("another-user-0", anotherAddedPair.getUser0Id()); + assertEquals("another-user-1", anotherAddedPair.getUser1Id()); + + FriendPair wrongIdPair = new FriendPair("wrong-user-0", "wrong-user-1"); + FriendPair addedWrongIdPair = friendRepository.add(wrongIdPair); + assertNotEquals(10, addedWrongIdPair.getId()); + assertNotEquals("wrong-user-10", addedWrongIdPair.getUser0Id()); + assertNotEquals("wrong-user-11", addedWrongIdPair.getUser1Id()); + + // Get friends + FriendPair foundPair = friendRepository.find(0); + assertEquals(0, foundPair.getId()); + assertEquals("user-0", foundPair.getUser0Id()); + assertEquals("user-1", foundPair.getUser1Id()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/FriendRequestRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/FriendRequestRepositoryTest.java new file mode 100644 index 0000000..22c7f92 --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/repositories/FriendRequestRepositoryTest.java @@ -0,0 +1,49 @@ +package org.ntlab.tampoposerver.repositories; + +import org.junit.jupiter.api.Test; +import org.ntlab.tampoposerver.models.FriendRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +@SpringBootTest() +public class FriendRequestRepositoryTest { + @Autowired + private FriendRequestRepository friendRequestRepository; + + @Test + public void contextLoads() { + assertThat(friendRequestRepository).isNotNull(); + } + + @Test + public void test() { + // Adding friend pair + FriendRequest request = new FriendRequest("user-0", "user-1"); + FriendRequest createdRequest = friendRequestRepository.create(request); + assertEquals(0, createdRequest.getId()); + assertEquals("user-0", createdRequest.getSenderId()); + assertEquals("user-1", createdRequest.getReceiverId()); + + FriendRequest anotherRequest = new FriendRequest("another-user-0", "another-user-1"); + FriendRequest anotherCreatedRequest = friendRequestRepository.create(anotherRequest); + assertEquals(1, anotherCreatedRequest.getId()); + assertEquals("another-user-0", anotherCreatedRequest.getSenderId()); + assertEquals("another-user-1", anotherCreatedRequest.getReceiverId()); + + FriendRequest wrongIdRequest = new FriendRequest("wrong-user-0", "wrong-user-1"); + FriendRequest addedWrongIdRequest = friendRequestRepository.create(wrongIdRequest); + assertNotEquals(10, addedWrongIdRequest.getId()); + assertNotEquals("wrong-user-10", addedWrongIdRequest.getSenderId()); + assertNotEquals("wrong-user-11", addedWrongIdRequest.getReceiverId()); + + // Getting friends + FriendRequest foundRequest = friendRequestRepository.find(0); + assertEquals(0, foundRequest.getId()); + assertEquals("user-0", foundRequest.getSenderId()); + assertEquals("user-1", foundRequest.getReceiverId()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/UserRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/UserRepositoryTest.java index 6ac9843..43e550b 100644 --- a/src/test/java/org/ntlab/tampoposerver/repositories/UserRepositoryTest.java +++ b/src/test/java/org/ntlab/tampoposerver/repositories/UserRepositoryTest.java @@ -18,11 +18,15 @@ User u2 = userRepository.addUser("u02", "zcv", "abc","dfgdf@gmail.com","123a876bca878d125"); User u3 = userRepository.addUser("u03", "ghj", "yyi","yijdh@gmail.com","143a876bca878d125"); // User u = userRepository.getUser("u02"); - //getAllUsersテスト - ArrayList users = userRepository.getAllUsers(); - for (User u : users) { - System.out.println(u.getUserId()); +// getAllUsersテスト + ArrayList users = userRepository.getAllUsers(); + for (String u : users) { + System.out.println(u); } +// ArrayList emails = userRepository.getAllEmails(); +// for (String email : emails) { +// System.out.println(email); +// } // System.out.println(users); // assertEquals(u2, u); // assertNotEquals(u1, u);