diff --git a/.gradle/8.14/fileChanges/last-build.bin b/.gradle/8.14/fileChanges/last-build.bin deleted file mode 100644 index f76dd23..0000000 --- a/.gradle/8.14/fileChanges/last-build.bin +++ /dev/null Binary files differ diff --git a/.gradle/8.14/gc.properties b/.gradle/8.14/gc.properties deleted file mode 100644 index e69de29..0000000 --- a/.gradle/8.14/gc.properties +++ /dev/null diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29..0000000 --- a/.gradle/vcs-1/gc.properties +++ /dev/null diff --git a/.idea/misc.xml b/.idea/misc.xml index 9080f9e..9879958 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,7 +4,7 @@ - + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build/classes/java/main/org/ntlab/tampoposerver/JerseyConfig.class b/build/classes/java/main/org/ntlab/tampoposerver/JerseyConfig.class deleted file mode 100644 index aca4086..0000000 --- a/build/classes/java/main/org/ntlab/tampoposerver/JerseyConfig.class +++ /dev/null Binary files differ diff --git a/build/classes/java/main/org/ntlab/tampoposerver/ServletInitializer.class b/build/classes/java/main/org/ntlab/tampoposerver/ServletInitializer.class deleted file mode 100644 index 0db777a..0000000 --- a/build/classes/java/main/org/ntlab/tampoposerver/ServletInitializer.class +++ /dev/null Binary files differ diff --git a/build/classes/java/main/org/ntlab/tampoposerver/TampopoServerApplication.class b/build/classes/java/main/org/ntlab/tampoposerver/TampopoServerApplication.class deleted file mode 100644 index 91eb52f..0000000 --- a/build/classes/java/main/org/ntlab/tampoposerver/TampopoServerApplication.class +++ /dev/null Binary files differ diff --git a/build/classes/java/main/org/ntlab/tampoposerver/models/User.class b/build/classes/java/main/org/ntlab/tampoposerver/models/User.class deleted file mode 100644 index 93237a2..0000000 --- a/build/classes/java/main/org/ntlab/tampoposerver/models/User.class +++ /dev/null Binary files differ diff --git a/build/classes/java/main/org/ntlab/tampoposerver/repositories/UserRepository.class b/build/classes/java/main/org/ntlab/tampoposerver/repositories/UserRepository.class deleted file mode 100644 index d0ae91f..0000000 --- a/build/classes/java/main/org/ntlab/tampoposerver/repositories/UserRepository.class +++ /dev/null Binary files differ diff --git a/build/resources/main/application.properties b/build/resources/main/application.properties deleted file mode 100644 index 5370fb9..0000000 --- a/build/resources/main/application.properties +++ /dev/null @@ -1 +0,0 @@ -spring.application.name=tampopo-server diff --git a/build/tmp/bootWar/MANIFEST.MF b/build/tmp/bootWar/MANIFEST.MF deleted file mode 100644 index 59499bc..0000000 --- a/build/tmp/bootWar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/build/tmp/war/MANIFEST.MF b/build/tmp/war/MANIFEST.MF deleted file mode 100644 index 59499bc..0000000 --- a/build/tmp/war/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/src/main/java/org/ntlab/tampoposerver/models/Activity.java b/src/main/java/org/ntlab/tampoposerver/models/Activity.java index 207f3df..bd2781f 100644 --- a/src/main/java/org/ntlab/tampoposerver/models/Activity.java +++ b/src/main/java/org/ntlab/tampoposerver/models/Activity.java @@ -1,6 +1,10 @@ package org.ntlab.tampoposerver.models; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonIgnore; + public class Activity { + @JsonIgnore private String userId; private String activityId; private String text; diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java index ec8bb8e..02816d9 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/ActivityRepository.java @@ -1,8 +1,86 @@ package org.ntlab.tampoposerver.repositories; +import org.ntlab.tampoposerver.models.Activity; import org.springframework.stereotype.Repository; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + @Repository public class ActivityRepository { + //アクティビティ情報を保存するハッシュマップを作成 + private final HashMap> activityMap = new HashMap<>(); + + //アクティビティクラスにはユーザID、アクティビティID、テキスト、投稿した時間を入れる + public Activity addActivity(String userId, String activityId, String text,String updateTime) { + Activity a = new Activity(userId,activityId,text,updateTime); + + //ハッシュマップがなかった場合にアクティビティを入れるハッシュマップの作成 + if(activityMap.get(userId) == null) { + activityMap.put(userId, new HashMap<>()); + } + //アクティビティマップにそのユーザのアクティビティIDと4項目を保存 + activityMap.get(userId).put(activityId,a); + + //userActivityMapはアクティビティマップのバリューのこと(そのバリューは表になってる) +// HashMap userActivityMap = activityMap.getOrDefault(userId, new HashMap<>()); +// userActivityMap.put(activityId, a); +// activityMap.put(userId, userActivityMap); + + return a; + } + //アクティビティを取得 + public Activity getActivity(String userId,String activityId) { + if(activityMap.get(userId) == null) { + return null; + } + return activityMap.get(userId).get(activityId); + } + + //アクティビティを削除するメソッド + public boolean deleteActivity(String userId, String activityId) { + HashMap userActivities = activityMap.get(userId); + if (userActivities != null && userActivities.containsKey(activityId)) { + userActivities.remove(activityId); + return true; // 成功 + } + return false; // 存在しない場合は削除できない + } + + //単一アクティビティの投稿時間の取得 + public String getActivityUpdateTime(String userId, String activityId) { + HashMap userActivities = activityMap.get(userId); + if (userActivities != null) { + Activity activity = userActivities.get(activityId); + if (activity != null) { + return activity.getUpdateTime(); + } + } + return null; // アクティビティが存在しない場合 + } + + //ユーザーの最後のアクティビティの投稿時間を返す + public String getLastUpdatedTime(String userId) { + HashMap userActivities = activityMap.get(userId); + if (userActivities != null && !userActivities.isEmpty()) {//userActivitiesが存在かつ要素が入っていれば + // 最も新しい更新時間を取得 + return userActivities.values().stream()//取り出した値(Activityの集合)をストリームに変換し順に処理をつなげていく + .map(Activity::getUpdateTime)//更新日時を取得します + .max(String::compareTo)//更新日時の中から「最大の値」(最も新しい日時)を取得します + .orElse(null); // 最後の更新時間が見つからない場合はnullを返す + } + return null; // ユーザーにアクティビティがない場合 + } + + //そのユーザの全アクティビティ情報を保存するリストをの作成 + public List getActivitiesForUser(String userId){ + if(activityMap.get(userId) == null) { + return new ArrayList<>(); + } + + //keySet());ならアクティビティIDだけで詳細が取れない + return new ArrayList<>(activityMap.get(userId).keySet()); + } } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java index 1450b1e..c65beaa 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java @@ -27,7 +27,7 @@ return userMap.get(userId); } - public ArrayList getAllUsers() { + public ArrayList getAllUsers() {//全アカウントのuserIdを取得 ArrayList u = new ArrayList<>(); for (String key : userMap.keySet()) { u.add(userMap.get(key)); @@ -54,7 +54,18 @@ User user = getUser(userId); if (user == null) return false; if (pair == null) return false; - boolean result = user.getFriendPairs().remove(pair); + boolean result = user.getFriendPairs().remove(pair); return result; } -} \ No newline at end of file + + public boolean checkToken(String userId, String token) {// 指定されたユーザーのトークンと渡されたトークンの確認 + User user = getUser(userId); + if (user == null) return false; + if (token == null) return false; + if (user.getToken().equals(token)) { + return true; + } else { + return false; + } + } +} diff --git a/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java b/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java index df7ee74..01502e8 100644 --- a/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java +++ b/src/main/java/org/ntlab/tampoposerver/resources/FriendsResource.java @@ -1,18 +1,104 @@ package org.ntlab.tampoposerver.resources; -import jakarta.ws.rs.GET; -import jakarta.ws.rs.Path; -import jakarta.ws.rs.PathParam; -import jakarta.ws.rs.QueryParam; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import org.ntlab.tampoposerver.models.FriendPair; +import org.ntlab.tampoposerver.repositories.UserRepository; +import org.ntlab.tampoposerver.services.FriendService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; +import java.util.UUID; + @Path("/friends") @Component public class FriendsResource { - @Path("/{pair-id}") - @GET - public String getFriends(@QueryParam("token") String token, @PathParam("pair-id") String pairId) { - return "Hello World!!"; + + private UserRepository userRepository = null; + private FriendService friendService = null; + + @Autowired + public FriendsResource(UserRepository userRepository, FriendService friendService) { + this.userRepository = userRepository; + this.friendService = friendService; } + + + + @Path("/{pair-id}") + @GET + public Response getFriend(@QueryParam("token") String token, @PathParam("pair-id") int pairId) { + //400 + + //200 + FriendPair pair = friendService.getFriendPair(token, pairId); + if (pair == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + return Response.status(Response.Status.OK).build(); + } + @POST + @Consumes (MediaType.APPLICATION_FORM_URLENCODED) + public void postFriends(@FormParam("token")String token,@FormParam("user0-id")String user0Id,@FormParam("user1-id")String user1Id){ + //400 + if (token.isBlank()){ //トークンが空文字だった時 + var response = Response.status(Response.Status.NOT_FOUND).entity("不正なリクエストです!"); + throw new WebApplicationException(response.build()); + } + //401 + //if (!UserRepository.getUser()){ //トークンが通らなかった時 + // var response = Response.status(Response.Status.NOT_FOUND).entity("トークンが無効です。");//404 + // throw new WebApplicationException(response.build()); + //} + + //403 + + //404 + //if (!friendService.createFriendPair(user0Id,user1Id){ //ユーザIDが変化した時、 + // var response = Response.status(Response.Status.NOT_FOUND).entity("データが存在しません。");//404 + // throw new WebApplicationException(response.build()); + //} + + + //200 + + //500は勝手にサーバがエラーでたらでるから書かない + + + return; + } + @Path("/{pair-id}") + @DELETE + public Response deleteFriend(@QueryParam("token") String token, @PathParam("pair-id") Integer pairId) { + //400 + if (token.isBlank()){ //トークンが空文字だった時 + var response = Response.status(Response.Status.NOT_FOUND).entity("不正なリクエストです。"); + throw new WebApplicationException(response.build()); + } + + //401 + //if (!userRepository.getUser()){ //トークンが通らなかった時 + // var response = Response.status(Response.Status.NOT_FOUND).entity("トークンが無効です。");//404 + // throw new WebApplicationException(response.build()); + //} + //403ここで書く必要なし + + //404 + if (!friendService.removeFriendPair(token,pairId)){ //トークンに対応したユーザが選択したフレンドが存在しない時 + var response = Response.status(Response.Status.NOT_FOUND).entity("データが存在しないです。");//404 + throw new WebApplicationException(response.build()); + } + + //200 + return Response.status(Response.Status.OK).build(); + + //500は勝手にサーバがエラーでたらでるから書かない + } + + } + diff --git a/src/test/java/org/ntlab/tampoposerver/models/ActivityTest.java b/src/test/java/org/ntlab/tampoposerver/models/ActivityTest.java new file mode 100644 index 0000000..0cf437e --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/models/ActivityTest.java @@ -0,0 +1,33 @@ +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; + +@SpringBootTest +public class ActivityTest { + @Test + void contextLoads() { + Activity a1 = new Activity("xyz","0","今からご飯食べる!","2025-06-05 14:23:45"); + Activity a2 = new Activity("abc","1","外出中!","2025-06-05 14:30:50"); + + System.out.println(a1.getUserId()); + System.out.println(a1.getActivityId()); + System.out.println(a1.getText()); + System.out.println(a1.getUpdateTime()); + System.out.println(a2.getUserId()); + System.out.println(a2.getActivityId()); + System.out.println(a2.getText()); + System.out.println(a2.getUpdateTime()); + + assertEquals("xyz",a1.getUserId()); + assertEquals("0",a1.getActivityId()); + assertEquals("今からご飯食べる!",a1.getText()); + assertEquals("2025-06-05 14:23:45",a1.getUpdateTime()); + assertEquals("abc",a2.getUserId()); + assertEquals("1",a2.getActivityId()); + assertEquals("外出中!",a2.getText()); + assertEquals("2025-06-05 14:30:50",a2.getUpdateTime()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java new file mode 100644 index 0000000..ebbd4d9 --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/repositories/ActivityRepositoryTest.java @@ -0,0 +1,72 @@ +package org.ntlab.tampoposerver.repositories; + +import org.junit.jupiter.api.Test; +import org.ntlab.tampoposerver.models.Activity; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +@SpringBootTest +public class ActivityRepositoryTest { + @Test + void contextLoads() { + ActivityRepository activityRepository = new ActivityRepository(); + //アクティビティの追加 + Activity a1 = activityRepository.addActivity("xyz","activity-id1", "今暇やねん","2025/05/14 15:20"); + Activity a2 = activityRepository.addActivity("abc","activity-id2", "お風呂入ってたわ","2025/07/14 23:50"); + Activity a100 = activityRepository.addActivity("abc","activity-id100", "プログラミングなう","2025/06/17 14:17"); + Activity a = activityRepository.getActivity("xyz","activity-id1"); + System.out.println(a); + System.out.println(a1); + System.out.println(a2); + assertEquals(a1,a); + assertNotEquals(a2,a); + //アクティビティマップにそのユーザのアクティビティIDと4項目を保存(アクティビティの内容も取得済み) + Activity a3 = activityRepository.getActivity("xyz","activity-id1"); + Activity a4 = activityRepository.getActivity("kkk","activity-id1"); + Activity a5 = activityRepository.getActivity("xyz","activity-id10"); + assertEquals(a1.getUserId(),a3.getUserId()); + assertEquals(a1.getActivityId(),a3.getActivityId()); + assertEquals(a1.getText(),a3.getText()); + assertEquals(a1.getUpdateTime(),a3.getUpdateTime()); + assertNull(a4); + assertNull(a5); + System.out.println(a1); + System.out.println(a3); + //アクティビティを削除するメソッド + boolean result = activityRepository.deleteActivity("xyz","activity-id1"); + boolean result2 = activityRepository.deleteActivity("xyz","activity-id2"); + assertTrue(result); + assertFalse(result2); + Activity a6 = activityRepository.getActivity("xyz","activity-id1"); + assertNull(a6); + System.out.println(result); + System.out.println(result2); + System.out.println(a6); + //単一アクティビティの投稿時間の取得 + String time = activityRepository.getActivityUpdateTime("abc","activity-id2"); + String time2 = activityRepository.getActivityUpdateTime("abc","activity-id4"); + assertEquals(a2.getUpdateTime(),time); + assertNotEquals(a100.getUpdateTime(),time); + assertNull(time2); + System.out.println(a1); + System.out.println(a2); + System.out.println(time); + System.out.println(time2); + //ユーザーの最後のアクティビティの投稿時間を返す + String newtime = activityRepository.getLastUpdatedTime("abc"); + String newtime2 = activityRepository.getLastUpdatedTime("kkk"); + assertEquals(a2.getUpdateTime(),newtime); + assertNull(newtime2); + System.out.println(newtime); + System.out.println(newtime2); + //そのユーザの全アクティビティ情報を保存するリストをの作成 + List list = activityRepository.getActivitiesForUser("abc"); + List list2 = activityRepository.getActivitiesForUser("kkk"); + System.out.println(list2); + System.out.println(list); + + } +}