diff --git a/src/main/java/org/ntlab/tampoposerver/models/Notification.java b/src/main/java/org/ntlab/tampoposerver/models/Notification.java index 12994c4..ccefd39 100644 --- a/src/main/java/org/ntlab/tampoposerver/models/Notification.java +++ b/src/main/java/org/ntlab/tampoposerver/models/Notification.java @@ -7,6 +7,14 @@ private String text; private String time; + public Notification(String u, String n, String f, String tx, String tm) { + userId = u; + notificationId = n; + from = f; + text = tx; + time = tm; + } + public String getUserId() { return userId; } diff --git a/src/main/java/org/ntlab/tampoposerver/models/User.java b/src/main/java/org/ntlab/tampoposerver/models/User.java index 82c9a39..5923568 100644 --- a/src/main/java/org/ntlab/tampoposerver/models/User.java +++ b/src/main/java/org/ntlab/tampoposerver/models/User.java @@ -1,5 +1,7 @@ package org.ntlab.tampoposerver.models; +import java.util.UUID; + public class User { private String userId; private String name; @@ -56,12 +58,17 @@ this.token = token; } - public User(String uid, String n, String pas, String mail, String image){ - userId = uid; - name = n; - password = pas; - email = mail; - icon = image; + public User(String userId, String name, String password, String email, String icon){ + this.userId = userId; + this.name = name; + this.password = password; + this.email = email; + this.icon = icon; } + public String token(){ + UUID str = UUID.randomUUID(); + token = str.toString(); + return token; + } } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java index 91be6d7..4ab2a8f 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/FriendRepository.java @@ -20,22 +20,21 @@ * @param pairId 取得する対象のフレンドペアのID * @return IDに紐づけられているフレンドペアが存在すればそのペア、存在しなければnull */ - public FriendPair getFriend(int pairId) { + public FriendPair find(int pairId) { return friends.get(pairId); } /** - * 渡された二つのユーザーIDから新しいフレンドのペアを作成し追加する + * 渡されたフレンドのペアを追加する * - * @param user0Id フレンドとして追加するユーザーのユーザーID - * @param user1Id フレンドとして追加するユーザーのユーザーID - * @return 新しく作成したフレンドペア + * @param pair 追加するフレンドペア + * @return 追加したフレンドペア */ - public FriendPair addFriend(String user0Id, String user1Id) { + public FriendPair create(FriendPair pair) { lastPairId++; - FriendPair newPair = new FriendPair(lastPairId, user0Id, user1Id); - friends.put(newPair.getId(), newPair); - return newPair; + pair.setId(lastPairId); + friends.put(pair.getId(), pair); + return pair; } /** @@ -44,7 +43,7 @@ * @param pairId 削除する対象のフレンドペアのID * @return 削除できたらtrue、削除できなければfalse */ - public boolean removeFriend(int pairId) { + public boolean delete(int pairId) { FriendPair removedPair = friends.remove(pairId); return removedPair != null; } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/FriendRequestRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/FriendRequestRepository.java index 61cb942..e132740 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/FriendRequestRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/FriendRequestRepository.java @@ -19,22 +19,31 @@ * * @return すべてのフレンドリクエスト */ - public Collection getFriendRequests() { + public Collection findAll() { return friendRequests.values(); } /** - * 渡された二つのユーザーIDから新しいフレンドリクエストを作成し追加する + * 渡されたフレンドリクエストIDに一致するリクエストを返す * - * @param senderId フレンドリクエストを送ったユーザーのユーザーID - * @param receiverId フレンドリクエストを受け取ったユーザーのユーザーID - * @return 新しく作成したフレンドリクエスト + * @param id 削除する対象のフレンドリクエストのID + * @return 存在したらそのリクエストのインスタンス、存在しなければnull */ - public FriendRequest addFriendRequest(String senderId, String receiverId) { + public FriendRequest find(int id) { + return friendRequests.get(id); + } + + /** + * フレンドリクエストを追加する + * + * @param friendRequest 追加するフレンドリクエスト + * @return 追加したフレンドリクエスト + */ + public FriendRequest create(FriendRequest friendRequest) { lastId++; - FriendRequest newRequest = new FriendRequest(lastId, senderId, receiverId); - friendRequests.put(newRequest.getId(), newRequest); - return newRequest; + friendRequest.setId(lastId); + friendRequests.put(friendRequest.getId(), friendRequest); + return friendRequest; } /** @@ -43,7 +52,7 @@ * @param id 削除する対象のフレンドリクエストのID * @return 削除できたらtrue、削除できなければfalse */ - public boolean removeFriendRequest(int id) { + public boolean delete(int id) { FriendRequest removedRequest = friendRequests.remove(id); return removedRequest != null; } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/NotificationRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/NotificationRepository.java index bbaadfd..d0d1642 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/NotificationRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/NotificationRepository.java @@ -3,17 +3,44 @@ import org.ntlab.tampoposerver.models.Notification; import org.springframework.stereotype.Repository; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; @Repository public class NotificationRepository { private HashMap> notificationMap = new HashMap<>(); - public NotificationRepository() { - Notification n1 = new Notification(); - notificationMap.put("uid01", new HashMap<>()); - notificationMap.get("uid01").put("nid01", n1); + //通知の追加 + public Notification addNotification(String userId, String notificationId, String from, String text, String time) { + Notification n = new Notification(userId, notificationId, from, text, time); - Notification result = notificationMap.get("uid01").get("nid01"); + if(notificationMap.get(userId) == null) { + notificationMap.put(userId, new HashMap<>()); + } + notificationMap.get(userId).put(notificationId, n); + + return n; + } + + //通知の取得 + public Notification getNotification(String userId, String notificationId){ + if(notificationMap.get(userId) == null) { + return null; + } + return notificationMap.get(userId).get(notificationId); + } + + //ユーザーに対応した通知リストの取得(時刻降順) + public List getNotificationsForUser(String userId){ + if(notificationMap.get(userId) == null) { + return new ArrayList<>(); + } + + return notificationMap.get(userId).values().stream() + .sorted((a, b) -> b.getTime().compareTo(a.getTime())) + .map(Notification::getNotificationId) + .collect(Collectors.toList()); } } diff --git a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java index 6c9115a..0df057b 100644 --- a/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java +++ b/src/main/java/org/ntlab/tampoposerver/repositories/UserRepository.java @@ -8,15 +8,15 @@ @Repository public class UserRepository { private final HashMap userMap = new HashMap<>(); - public User addUser(String uid,String n,String pas,String mail,String image) { - User u = new User(uid,n,pas,mail,image); - userMap.put(uid,u); + public User addUser(String userId,String name,String password,String email,String icon) { + User u = new User(userId,name,password,email,icon); + userMap.put(userId,u); return u; } - public User getUser(String uid) { - return userMap.get(uid); + public User getUser(String userId) { + return userMap.get(userId); } - public User deleteUser(String uid) { - return userMap.remove(uid); + public User deleteUser(String userId) { + return userMap.remove(userId); } } diff --git a/src/main/java/org/ntlab/tampoposerver/services/FriendService.java b/src/main/java/org/ntlab/tampoposerver/services/FriendService.java new file mode 100644 index 0000000..2cd7576 --- /dev/null +++ b/src/main/java/org/ntlab/tampoposerver/services/FriendService.java @@ -0,0 +1,95 @@ +package org.ntlab.tampoposerver.services; + +import org.ntlab.tampoposerver.models.FriendPair; +import org.ntlab.tampoposerver.models.FriendRequest; +import org.ntlab.tampoposerver.repositories.FriendRepository; +import org.ntlab.tampoposerver.repositories.FriendRequestRepository; +import org.ntlab.tampoposerver.repositories.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Optional; + +// MEMO: ユーザーのトークンを認証するところはUserRepositoryに任せる +// MEMO: フレンド系の操作で認証が必要な場合はここで対応する +@Service +public class FriendService { + private final UserRepository userRepository; + private final FriendRepository friendRepository; + private final FriendRequestRepository friendRequestRepository; + + @Autowired + public FriendService(UserRepository userRepository, FriendRepository friendRepository, FriendRequestRepository friendRequestRepository) { + this.userRepository = userRepository; + this.friendRepository = friendRepository; + this.friendRequestRepository = friendRequestRepository; + } + + /** + * 新しいフレンドリクエストを作成する + * + * @param token APIリクエストをしてきたユーザーの認証用トークン + * @param senderId フレンドリクエストを送ったユーザーのユーザーID + * @param receiverId フレンドリクエストを受け取ったユーザーのユーザーID + * @return 作成されたフレンドリクエストのインスタンス + */ + public Optional createFriendRequest(String token, String senderId, String receiverId) { + return Optional.empty(); + } + + /** + * ユーザー自身に関連するフレンドリクエストをすべて返す + * + * @param token ユーザー認証用のトークン + * @return ユーザー自身に関連するすべてのフレンドリクエストのインスタンス(リクエストがなければ空のリスト) + */ + public ArrayList getFriendRequests(String token) { + return new ArrayList<>(); + } + + /** + * 指定したフレンドリクエストを削除する + * + * @param token APIリクエストをしてきたユーザーの認証用トークン + * @param friendRequestId 削除する対象のフレンドリクエストのID + * @return 削除に成功したらtrue, それ以外はfalse + */ + public boolean removeFriendRequest(String token, int friendRequestId) { + return false; + } + + /** + * 新しくフレンドペアを作成する + * + * @param token APIリクエストをしてきたユーザーの認証用トークン + * @param user0Id 片方のユーザーのユーザーID + * @param user1Id もう一方のユーザーのユーザーID + * @return 追加されたフレンドペアのインスタンス + */ + public Optional createFriendPair(String token, String user0Id, String user1Id) { + return Optional.empty(); + } + + /** + * 指定したフレンドのペアを取得する + * + * @param token APIリクエストをしてきたユーザーの認証用トークン + * @param friendPairId 取得する対象のフレンドペアのID + * @return 渡したフレンドペアのIDに対応したフレンドペア + */ + public Optional getFriendPair(String token, int friendPairId) { + return Optional.empty(); + } + + /** + * 指定したフレンドのペアを削除する + * + * @param token APIリクエストをしてきたユーザーの認証用トークン + * @param friendPairId 削除する対象のフレンドペアのID + * @return 削除に成功したらtrue, それ以外はfalse + */ + public boolean removeFriendPair(String token, int friendPairId) { + return false; + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/models/NotificationTest.java b/src/test/java/org/ntlab/tampoposerver/models/NotificationTest.java new file mode 100644 index 0000000..59c6998 --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/models/NotificationTest.java @@ -0,0 +1,27 @@ +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 NotificationTest { + + @Test + void contextLoads() { + Notification n1 = new Notification("u01","n01","u100","telephone","2025/6/5"); + Notification n2 = new Notification("u02","n02","u100","telephone","2025/6/5"); + assertEquals("u01", n1.getUserId()); + assertEquals("n01", n1.getNotificationId()); + assertEquals("u100", n1.getFrom()); + assertEquals("telephone", n1.getText()); + assertEquals("2025/6/5", n1.getTime()); + assertEquals("u02", n2.getUserId()); + assertEquals("n02", n2.getNotificationId()); + assertEquals("u100", n2.getFrom()); + assertEquals("telephone", n2.getText()); + assertEquals("2025/6/5", n2.getTime()); + } +} diff --git a/src/test/java/org/ntlab/tampoposerver/repositories/NotificationRepositoryTest.java b/src/test/java/org/ntlab/tampoposerver/repositories/NotificationRepositoryTest.java new file mode 100644 index 0000000..698f01f --- /dev/null +++ b/src/test/java/org/ntlab/tampoposerver/repositories/NotificationRepositoryTest.java @@ -0,0 +1,33 @@ +package org.ntlab.tampoposerver.repositories; + +import org.junit.jupiter.api.Test; +import org.ntlab.tampoposerver.models.Notification; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@SpringBootTest +public class NotificationRepositoryTest { + + @Test + void contextLoads() { + NotificationRepository notificationRepository = new NotificationRepository(); + + Notification n1_1 = notificationRepository.addNotification("u01","n01","u00","telephone1","2025-06-10 10:00:11"); + Notification n1_2 = notificationRepository.addNotification("u01","n02","u02","telephone2","2025-06-07 10:31:11"); + Notification n1_3 = notificationRepository.addNotification("u01","n03","u02","telephone2","2025-06-07 12:09:22"); + Notification n2 = notificationRepository.addNotification("u02","n01","u00","telephone3","2025-06-07 09:22:12"); + + Notification n = notificationRepository.getNotification("u01","n02"); + assertEquals(n1_2.getText(),n.getText()); + + n = notificationRepository.getNotification("u01","n04"); + assertNull(n); + + n = notificationRepository.getNotification("u03","n03"); + assertNull(n); + + System.out.println(notificationRepository.getNotificationsForUser("u01")); + } +}