diff --git a/HELP.md b/HELP.md new file mode 100644 index 0000000..b6d1455 --- /dev/null +++ b/HELP.md @@ -0,0 +1,17 @@ +# Getting Started + +### Reference Documentation + +For further reference, please consider the following sections: + +* [Official Gradle documentation](https://docs.gradle.org) +* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/3.5.7/gradle-plugin) +* [Create an OCI image](https://docs.spring.io/spring-boot/3.5.7/gradle-plugin/packaging-oci-image.html) +* [Jersey](https://docs.spring.io/spring-boot/3.5.7/reference/web/servlet.html#web.servlet.jersey) + +### Additional Links + +These additional references should also help you: + +* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1b33c55..0000000 --- a/gradle/wrapper/gradle-wrapper.jar +++ /dev/null Binary files differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d4081da..0000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/src/main/java/com/example/tampopotest/api/ChatRequestsResource.java b/src/main/java/com/example/tampopotest/api/ChatRequestsResource.java deleted file mode 100644 index 01e8eeb..0000000 --- a/src/main/java/com/example/tampopotest/api/ChatRequestsResource.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.ChatRequest; -import com.example.tampopotest.store.InMemoryStore.User; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; -import java.util.stream.Collectors; - -@Path("/chat-requests") -@Produces(MediaType.APPLICATION_JSON) -public class ChatRequestsResource { - - @GET - public Response list(@QueryParam("token") String token, - @QueryParam("user-id") String userId) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null || userId == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!auth.userId.equals(userId)) return Response.status(Response.Status.FORBIDDEN).build(); - List> res = InMemoryStore.listChatRequests().stream() - .filter(cr -> cr.senderId.equals(userId) || cr.receiverId.equals(userId)) - .map(cr -> { - Map m = new LinkedHashMap<>(); - m.put("chat-request-id", cr.id); - m.put("sender-id", cr.senderId); - m.put("receiver-id", cr.receiverId); - return m; - }).collect(Collectors.toList()); - return Response.ok(res).build(); - } - - @POST - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response create(@FormParam("token") String token, - @FormParam("sender-id") String senderId, - @FormParam("receiver-id") String receiverId) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (senderId == null || receiverId == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!auth.userId.equals(senderId)) return Response.status(Response.Status.FORBIDDEN).build(); - if (InMemoryStore.getUser(senderId) == null || InMemoryStore.getUser(receiverId) == null) - return Response.status(Response.Status.NOT_FOUND).build(); - int id = InMemoryStore.createChatRequest(senderId, receiverId); - Map res = new LinkedHashMap<>(); - res.put("chat-request-id", id); - return Response.status(204).entity(res).build(); - } - - @DELETE - @Path("/{chat-request-id}") - public Response delete(@PathParam("chat-request-id") int id, - @QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - ChatRequest cr = InMemoryStore.getChatRequest(id); - if (cr == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!(cr.senderId.equals(auth.userId) || cr.receiverId.equals(auth.userId))) - return Response.status(Response.Status.FORBIDDEN).build(); - InMemoryStore.deleteChatRequest(id); - return Response.status(204).build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/ChatRoomsResource.java b/src/main/java/com/example/tampopotest/api/ChatRoomsResource.java deleted file mode 100644 index eefa19f..0000000 --- a/src/main/java/com/example/tampopotest/api/ChatRoomsResource.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.ChatRoom; -import com.example.tampopotest.store.InMemoryStore.User; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.LinkedHashMap; -import java.util.Map; - -@Path("/chat-rooms") -@Produces(MediaType.APPLICATION_JSON) -public class ChatRoomsResource { - - @POST - public Response create(@QueryParam("user0-id") String user0, - @QueryParam("user1-id") String user1, - @QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - if (user0 == null || user1 == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!(auth.userId.equals(user0) || auth.userId.equals(user1))) return Response.status(Response.Status.FORBIDDEN).build(); - if (InMemoryStore.getUser(user0) == null || InMemoryStore.getUser(user1) == null) return Response.status(Response.Status.NOT_FOUND).build(); - Integer existing = InMemoryStore.findRoomIdByUsers(user0, user1); - int roomId = existing != null ? existing : InMemoryStore.createRoom(user0, user1); - Map res = new LinkedHashMap<>(); - res.put("room-id", roomId); - return Response.ok(res).build(); - } - - @GET - public Response get(@QueryParam("user0-id") String user0, - @QueryParam("user1-id") String user1, - @QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - if (user0 == null || user1 == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!(auth.userId.equals(user0) || auth.userId.equals(user1))) return Response.status(Response.Status.FORBIDDEN).build(); - Integer existing = InMemoryStore.findRoomIdByUsers(user0, user1); - if (existing == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("room-id", existing); - return Response.ok(res).build(); - } - - @DELETE - public Response delete(@QueryParam("chatroom-id") int roomId, - @QueryParam("user-id") String userId, - @QueryParam("token") String token) { - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.UNAUTHORIZED).build(); - ChatRoom room = InMemoryStore.getRoom(roomId); - if (room == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!(room.participants.contains(userId))) return Response.status(Response.Status.FORBIDDEN).build(); - InMemoryStore.deleteRoom(roomId); - return Response.status(204).build(); - } - - @GET - @Path("/{chatroom-id}/{user-id}/") - public Response getMessage(@PathParam("chatroom-id") int roomId, - @PathParam("user-id") String userId, - @QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.FORBIDDEN).build(); - ChatRoom room = InMemoryStore.getRoom(roomId); - if (room == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!room.participants.contains(auth.userId)) return Response.status(Response.Status.FORBIDDEN).build(); - Map res = new LinkedHashMap<>(); - res.put("message", room.lastMessage == null ? "" : room.lastMessage); - return Response.ok(res).build(); - } - - @PUT - @Path("/{chatroom-id}/{user-id}/") - public Response addUser(@PathParam("chatroom-id") int roomId, - @PathParam("user-id") String userId, - @QueryParam("token") String token) { - // token must be the same user being added - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - ChatRoom room = InMemoryStore.getRoom(roomId); - if (room == null) return Response.status(Response.Status.NOT_FOUND).build(); - room.participants.add(userId); - return Response.ok().build(); - } - - @PUT - @Path("/{chatroom-id}/{user-id}/message") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updateMessage(@PathParam("chatroom-id") int roomId, - @PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("message") String message) { - if (message == null || token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - ChatRoom room = InMemoryStore.getRoom(roomId); - if (room == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!room.participants.contains(userId)) return Response.status(Response.Status.FORBIDDEN).build(); - room.lastMessage = message; - return Response.ok().build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/FriendRequestsResource.java b/src/main/java/com/example/tampopotest/api/FriendRequestsResource.java deleted file mode 100644 index 6f3d84c..0000000 --- a/src/main/java/com/example/tampopotest/api/FriendRequestsResource.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.FriendRequest; -import com.example.tampopotest.store.InMemoryStore.User; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; -import java.util.stream.Collectors; - -@Path("/friend-requests") -@Produces(MediaType.APPLICATION_JSON) -public class FriendRequestsResource { - - @GET - public Response list(@QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - List> res = InMemoryStore.listFriendRequests().stream() - .filter(fr -> fr.senderId.equals(auth.userId) || fr.receiverId.equals(auth.userId)) - .map(fr -> { - Map m = new LinkedHashMap<>(); - m.put("friend-request-id", fr.id); - m.put("sender-id", fr.senderId); - m.put("receiver-id", fr.receiverId); - return m; - }).collect(Collectors.toList()); - if (res.isEmpty()) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(res).build(); - } - - @POST - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response create(@FormParam("token") String token, - @FormParam("sender-id") String senderId, - @FormParam("receiver-id") String receiverId) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (senderId == null || receiverId == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!auth.userId.equals(senderId)) return Response.status(Response.Status.FORBIDDEN).build(); - if (InMemoryStore.getUser(senderId) == null || InMemoryStore.getUser(receiverId) == null) - return Response.status(Response.Status.NOT_FOUND).build(); - int id = InMemoryStore.createFriendRequest(senderId, receiverId); - Map res = new LinkedHashMap<>(); - res.put("friend-request-id", id); - return Response.status(Response.Status.CREATED).entity(res).build(); - } - - @DELETE - @Path("/{friend-request-id}") - public Response delete(@PathParam("friend-request-id") int id, - @QueryParam("receiver-token") String receiverToken) { - User receiver = InMemoryStore.findUserByToken(receiverToken); - if (receiver == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - FriendRequest fr = InMemoryStore.listFriendRequests().stream().filter(f -> f.id == id).findFirst().orElse(null); - if (fr == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!receiver.userId.equals(fr.receiverId)) return Response.status(Response.Status.FORBIDDEN).build(); - boolean ok = InMemoryStore.deleteFriendRequest(id); - if (!ok) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok().build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/FriendResource.java b/src/main/java/com/example/tampopotest/api/FriendResource.java deleted file mode 100644 index b815628..0000000 --- a/src/main/java/com/example/tampopotest/api/FriendResource.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.Pair; -import com.example.tampopotest.store.InMemoryStore.User; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; - -@Path("/") -@Produces(MediaType.APPLICATION_JSON) -public class FriendResource { - - @POST - @Path("friends/") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response addPair(@FormParam("token") String token, - @FormParam("user0-id") String user0, - @FormParam("user1-id") String user1) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - if (user0 == null || user1 == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (InMemoryStore.getUser(user0) == null || InMemoryStore.getUser(user1) == null) return Response.status(Response.Status.NOT_FOUND).build(); - // Only allow if auth matches one of them - if (!(auth.userId.equals(user0) || auth.userId.equals(user1))) return Response.status(Response.Status.FORBIDDEN).build(); - int pid = InMemoryStore.addPair(user0, user1); - if (pid == -1) return Response.status(Response.Status.CONFLICT).build(); - Map res = new LinkedHashMap<>(); - res.put("pair-id", pid); - return Response.ok(res).build(); - } - - @GET - @Path("friends/pairs/{pair-id}/") - public Response getPair(@PathParam("pair-id") int pairId, - @QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - Pair p = InMemoryStore.getPair(pairId); - if (p == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!(p.user0.equals(auth.userId) || p.user1.equals(auth.userId))) return Response.status(Response.Status.FORBIDDEN).build(); - Map res = new LinkedHashMap<>(); - res.put("user0-id", p.user0); - res.put("user1-id", p.user1); - return Response.ok(res).build(); - } - - @DELETE - @Path("friends/pairs/{pair-id}/") - public Response deletePair(@PathParam("pair-id") int pairId, - @QueryParam("token") String token) { - User auth = InMemoryStore.findUserByToken(token); - if (auth == null) return Response.status(Response.Status.UNAUTHORIZED).build(); - Pair p = InMemoryStore.getPair(pairId); - if (p == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!(p.user0.equals(auth.userId) || p.user1.equals(auth.userId))) return Response.status(Response.Status.FORBIDDEN).build(); - boolean ok = InMemoryStore.removePair(pairId); - if (!ok) return Response.status(Response.Status.BAD_REQUEST).build(); - return Response.ok().build(); - } - - @GET - @Path("friends/users/{user-id}") - public Response listFriends(@PathParam("user-id") String userId, - @QueryParam("token") String token) { - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Set pids = InMemoryStore.getUserPairs(userId); - Map res = new LinkedHashMap<>(); - int i = 1; - for (Integer pid : pids) { - Pair p = InMemoryStore.getPair(pid); - if (p == null) continue; - String other = p.user0.equals(userId) ? p.user1 : p.user0; - res.put("friend" + i++, other); - } - if (res.isEmpty()) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(res).build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/UserActivitiesResource.java b/src/main/java/com/example/tampopotest/api/UserActivitiesResource.java deleted file mode 100644 index 95b2e49..0000000 --- a/src/main/java/com/example/tampopotest/api/UserActivitiesResource.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.Activity; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; - -@Path("/users/{user-id}/activities") -@Produces(MediaType.APPLICATION_JSON) -public class UserActivitiesResource { - - @GET - public Response list(@PathParam("user-id") String userId, - @QueryParam("filter") String filter) { - List list = InMemoryStore.getActivities(userId); - if (list.isEmpty()) return Response.status(Response.Status.NOT_FOUND).build(); - List toReturn = list; - if ("LATEST".equalsIgnoreCase(filter) && !list.isEmpty()) { - toReturn = Collections.singletonList(list.get(list.size() - 1)); - } - Map res = new LinkedHashMap<>(); - for (Activity a : toReturn) { - Map m = new LinkedHashMap<>(); - m.put("text", a.text); - m.put("updated-time", a.updatedTime); - res.put(a.id, m); - } - return Response.ok(res).build(); - } - - @POST - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response post(@PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("new-activity") String newActivity) { - if (token == null || newActivity == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - if (InMemoryStore.getUser(userId) == null) return Response.status(Response.Status.NOT_FOUND).build(); - String id = InMemoryStore.addActivity(userId, newActivity); - Map res = new LinkedHashMap<>(); - res.put("activity-id", id); - return Response.ok(res).build(); - } - - @GET - @Path("/{activity-id}") - public Response get(@PathParam("user-id") String userId, - @PathParam("activity-id") String activityId) { - Activity a = InMemoryStore.getActivity(userId, activityId); - if (a == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("activity-id", a.id); - res.put("text", a.text); - res.put("updated-time", a.updatedTime); - return Response.ok(res).build(); - } - - @DELETE - @Path("/{activity-id}") - public Response delete(@PathParam("user-id") String userId, - @PathParam("activity-id") String activityId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - boolean ok = InMemoryStore.deleteActivity(userId, activityId); - if (!ok) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok().build(); - } - - @GET - @Path("/{activity-id}/text") - public Response getText(@PathParam("user-id") String userId, - @PathParam("activity-id") String activityId) { - Activity a = InMemoryStore.getActivity(userId, activityId); - if (a == null) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(a.text).build(); - } - - @GET - @Path("/{activity-id}/updated-time") - public Response getUpdatedTime(@PathParam("user-id") String userId, - @PathParam("activity-id") String activityId) { - Activity a = InMemoryStore.getActivity(userId, activityId); - if (a == null) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(a.updatedTime).build(); - } - - @GET - @Path("/last-updated-time") - public Response getLastUpdated(@PathParam("user-id") String userId) { - String t = InMemoryStore.getLatestActivityTime(userId); - if (t == null) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(t).build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/UserFriendsResource.java b/src/main/java/com/example/tampopotest/api/UserFriendsResource.java deleted file mode 100644 index d6e9c77..0000000 --- a/src/main/java/com/example/tampopotest/api/UserFriendsResource.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.Pair; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; - -@Path("/users/{user-id}/friends") -@Produces(MediaType.APPLICATION_JSON) -public class UserFriendsResource { - - @GET - public Response list(@PathParam("user-id") String userId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Set pids = InMemoryStore.getUserPairs(userId); - if (pids.isEmpty()) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - for (Integer pid : pids) { - Pair p = InMemoryStore.getPair(pid); - if (p == null) continue; - Map item = new LinkedHashMap<>(); - item.put("user0-id", p.user0); - item.put("user1-id", p.user1); - res.put("pid" + pid, item); - } - return Response.ok(res).build(); - } - - @GET - @Path("/{pair-id}") - public Response get(@PathParam("user-id") String userId, - @PathParam("pair-id") String pairId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - int id; - try { id = Integer.parseInt(pairId); } catch (Exception e) { return Response.status(Response.Status.BAD_REQUEST).build(); } - Pair p = InMemoryStore.getPair(id); - if (p == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!(p.user0.equals(userId) || p.user1.equals(userId))) return Response.status(Response.Status.FORBIDDEN).build(); - String other = p.user0.equals(userId) ? p.user1 : p.user0; - Map res = new LinkedHashMap<>(); - res.put("user-id", other); - return Response.ok(res).build(); - } - - @DELETE - @Path("/{pair-id}") - public Response delete(@PathParam("user-id") String userId, - @PathParam("pair-id") int pairId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Pair p = InMemoryStore.getPair(pairId); - if (p == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!(p.user0.equals(userId) || p.user1.equals(userId))) return Response.status(Response.Status.FORBIDDEN).build(); - boolean ok = InMemoryStore.removePair(pairId); - if (!ok) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok().build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/UserNotificationsResource.java b/src/main/java/com/example/tampopotest/api/UserNotificationsResource.java deleted file mode 100644 index 7cc8353..0000000 --- a/src/main/java/com/example/tampopotest/api/UserNotificationsResource.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.Notification; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; - -@Path("/users/{user-id}/notifications") -@Produces(MediaType.APPLICATION_JSON) -public class UserNotificationsResource { - - @GET - public Response list(@PathParam("user-id") String userId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - List list = InMemoryStore.getNotifications(userId); - if (list.isEmpty()) return Response.status(Response.Status.NOT_FOUND).build(); - List ids = new ArrayList<>(); - for (Notification n : list) ids.add(n.id); - return Response.ok(ids).build(); - } - - @GET - @Path("/{notification-id}") - public Response get(@PathParam("user-id") String userId, - @PathParam("notification-id") String nid, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Notification n = InMemoryStore.getNotification(userId, nid); - if (n == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("from", n.from); - res.put("text", n.text); - res.put("time", n.time); - return Response.ok(res).build(); - } - - @GET - @Path("/{notification-id}/text") - public Response getText(@PathParam("user-id") String userId, - @PathParam("notification-id") String nid, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Notification n = InMemoryStore.getNotification(userId, nid); - if (n == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("text", n.text); - return Response.ok(res).build(); - } - - @GET - @Path("/{notification-id}/time") - public Response getTime(@PathParam("user-id") String userId, - @PathParam("notification-id") String nid, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Notification n = InMemoryStore.getNotification(userId, nid); - if (n == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("time", n.time); - return Response.ok(res).build(); - } - - @GET - @Path("/{notification-id}/from") - public Response getFrom(@PathParam("user-id") String userId, - @PathParam("notification-id") String nid, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - Notification n = InMemoryStore.getNotification(userId, nid); - if (n == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("from", n.from); - return Response.ok(res).build(); - } -} diff --git a/src/main/java/com/example/tampopotest/api/UsersResource.java b/src/main/java/com/example/tampopotest/api/UsersResource.java deleted file mode 100644 index 4c93adb..0000000 --- a/src/main/java/com/example/tampopotest/api/UsersResource.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.example.tampopotest.api; - -import com.example.tampopotest.store.InMemoryStore; -import com.example.tampopotest.store.InMemoryStore.User; -import jakarta.ws.rs.*; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.util.*; -import java.util.stream.Collectors; - -@Path("/users") -@Produces(MediaType.APPLICATION_JSON) -public class UsersResource { - - @GET - public Response listUsers() { - List ids = InMemoryStore.listUsers().stream().map(u -> u.userId).collect(Collectors.toList()); - return Response.ok(ids).build(); - } - - @POST - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response createUser(@FormParam("user-id") String userId, - @FormParam("password") String password) { - if (userId == null || password == null) { - return Response.status(Response.Status.BAD_REQUEST).build(); - } - User u = InMemoryStore.createUser(userId, password); - if (u == null) { - return Response.status(Response.Status.CONFLICT).build(); - } - String token = InMemoryStore.issueToken(u); - Map res = new LinkedHashMap<>(); - res.put("user-id", u.userId); - res.put("token", token); - return Response.ok(res).build(); - } - - @GET - @Path("/{user-id}") - public Response getUser(@PathParam("user-id") String userId) { - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("name", u.name); - res.put("icon", u.icon); - return Response.ok(res).build(); - } - - @DELETE - @Path("/{user-id}") - public Response deleteUser(@PathParam("user-id") String userId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - boolean ok = InMemoryStore.deleteUser(userId); - if (!ok) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok().build(); - } - - @POST - @Path("/{user-id}/login") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response login(@PathParam("user-id") String userId, - @FormParam("password") String password) { - if (password == null) return Response.status(Response.Status.BAD_REQUEST).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - if (!Objects.equals(u.password, password)) return Response.status(Response.Status.UNAUTHORIZED).build(); - String token = InMemoryStore.issueToken(u); - Map res = new LinkedHashMap<>(); - res.put("token", token); - return Response.ok(res).build(); - } - - @GET - @Path("/{user-id}/name") - public Response getName(@PathParam("user-id") String userId) { - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(u.name).build(); - } - - @PUT - @Path("/{user-id}/name") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updateName(@PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("new-name") String newName) { - if (token == null || newName == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - u.name = newName; - return Response.ok(newName).build(); - } - - @GET - @Path("/{user-id}/password") - public Response getPassword(@PathParam("user-id") String userId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("password", u.password); - return Response.ok(res).build(); - } - - @PUT - @Path("/{user-id}/password") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updatePassword(@PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("new-password") String newPassword) { - if (token == null || newPassword == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - u.password = newPassword; - return Response.ok().build(); - } - - @GET - @Path("/{user-id}/email") - public Response getEmail(@PathParam("user-id") String userId, - @QueryParam("token") String token) { - if (token == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - Map res = new LinkedHashMap<>(); - res.put("email", u.email); - return Response.ok(res).build(); - } - - @PUT - @Path("/{user-id}/email") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updateEmail(@PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("new-email") String newEmail) { - if (token == null || newEmail == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - // duplicate check - boolean dup = InMemoryStore.listUsers().stream().anyMatch(u -> newEmail.equals(u.email) && !u.userId.equals(userId)); - if (dup) return Response.status(Response.Status.CONFLICT).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - u.email = newEmail; - return Response.ok().build(); - } - - @GET - @Path("/{user-id}/icon") - public Response getIcon(@PathParam("user-id") String userId) { - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - return Response.ok(u.icon).build(); - } - - @PUT - @Path("/{user-id}/icon") - @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - public Response updateIcon(@PathParam("user-id") String userId, - @FormParam("token") String token, - @FormParam("new-icon") String newIcon) { - if (token == null || newIcon == null) return Response.status(Response.Status.BAD_REQUEST).build(); - if (!InMemoryStore.checkToken(userId, token)) return Response.status(Response.Status.FORBIDDEN).build(); - User u = InMemoryStore.getUser(userId); - if (u == null) return Response.status(Response.Status.NOT_FOUND).build(); - // accept base64 and set a pseudo URL - u.icon = "https://example.com/images/" + userId + ".png"; - Map res = new LinkedHashMap<>(); - res.put("icon", Integer.toHexString(newIcon.hashCode()).toUpperCase()); - return Response.ok(res).build(); - } -}