diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 5115826..f6c7990 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,18 +4,10 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
@@ -30,7 +22,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -43,9 +57,9 @@
-
+ {
+ "associatedIndex": 8
+}
@@ -60,12 +74,18 @@
"RequestMappingsPanelWidth0": "75",
"RequestMappingsPanelWidth1": "75",
"RunOnceActivity.ShowReadmeOnStart": "true",
+ "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
+ "RunOnceActivity.git.unshallow": "true",
"Spring Boot.TampopotestApplication.executor": "Run",
"com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
- "git-widget-placeholder": "master",
+ "git-widget-placeholder": "swclaude2",
"junie.onboarding.icon.badge.shown": "true",
"kotlin-language-version-configured": "true",
"last_opened_file_path": "C:/Users/student/IdeaProjects/tampopo-server",
+ "node.js.detected.package.eslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "settings.editor.selected.configurable": "junie.application.models",
"to.speed.mode.migration.done": "true",
"vue.rearranger.settings.migration": "true"
}
@@ -95,10 +115,25 @@
1764234417568
+
+
+
+ 1765866299994
+
+
+
+ 1765866299994
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index ceb8f35..a086685 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,8 +19,11 @@
}
dependencies {
- implementation 'org.springframework.boot:spring-boot-starter-jersey'
- testImplementation 'org.springframework.boot:spring-boot-starter-jersey-test'
+ implementation 'org.springframework.boot:spring-boot-starter-web'
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+ implementation 'com.h2database:h2'
+ implementation 'org.springframework.boot:spring-boot-starter-validation'
+ testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
diff --git a/src/main/java/com/example/tampopotest/controller/ActivityController.java b/src/main/java/com/example/tampopotest/controller/ActivityController.java
new file mode 100644
index 0000000..ae07029
--- /dev/null
+++ b/src/main/java/com/example/tampopotest/controller/ActivityController.java
@@ -0,0 +1,108 @@
+package com.example.tampopotest.controller;
+
+import com.example.tampopotest.entity.Activity;
+import com.example.tampopotest.service.ActivityService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@RestController
+public class ActivityController {
+
+ @Autowired
+ private ActivityService activityService;
+
+ @GetMapping("/users/{user-id}/activities")
+ public ResponseEntity> getActivities(@PathVariable("user-id") String userId) {
+ try {
+ List activities = activityService.getActivitiesByUserId(userId);
+ return ResponseEntity.ok(activities);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @PostMapping("/users/{user-id}/activities")
+ public ResponseEntity createActivity(@PathVariable("user-id") String userId,
+ @RequestParam("text") String text) {
+ try {
+ Activity activity = activityService.createActivity(userId, text);
+ return ResponseEntity.ok(activity);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+ }
+ }
+
+ @GetMapping("/users/{user-id}/activities/{activity-id}")
+ public ResponseEntity getActivity(@PathVariable("user-id") String userId,
+ @PathVariable("activity-id") Long activityId) {
+ try {
+ Activity activity = activityService.getActivityById(activityId);
+ return ResponseEntity.ok(activity);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @DeleteMapping("/users/{user-id}/activities/{activity-id}")
+ public ResponseEntity deleteActivity(@PathVariable("user-id") String userId,
+ @PathVariable("activity-id") Long activityId) {
+ try {
+ activityService.deleteActivity(activityId);
+ return ResponseEntity.ok().build();
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @GetMapping("/users/{user-id}/activities/{activity-id}/text")
+ public ResponseEntity getActivityText(@PathVariable("user-id") String userId,
+ @PathVariable("activity-id") Long activityId) {
+ try {
+ String text = activityService.getActivityText(activityId);
+ return ResponseEntity.ok(text);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @PutMapping("/users/{user-id}/activities/{activity-id}/text")
+ public ResponseEntity updateActivityText(@PathVariable("user-id") String userId,
+ @PathVariable("activity-id") Long activityId,
+ @RequestParam("new-text") String newText) {
+ try {
+ String text = activityService.updateActivityText(activityId, newText);
+ return ResponseEntity.ok(text);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @GetMapping("/users/{user-id}/activities/{activity-id}/updated-time")
+ public ResponseEntity getActivityUpdatedTime(@PathVariable("user-id") String userId,
+ @PathVariable("activity-id") Long activityId) {
+ try {
+ LocalDateTime time = activityService.getActivityUpdatedTime(activityId);
+ return ResponseEntity.ok(time);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @GetMapping("/users/{user-id}/activities/last-updated-time")
+ public ResponseEntity getLastUpdatedTime(@PathVariable("user-id") String userId) {
+ try {
+ LocalDateTime time = activityService.getLastUpdatedTime(userId);
+ if (time == null) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ return ResponseEntity.ok(time);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+}
diff --git a/src/main/java/com/example/tampopotest/controller/ChatController.java b/src/main/java/com/example/tampopotest/controller/ChatController.java
new file mode 100644
index 0000000..07818a8
--- /dev/null
+++ b/src/main/java/com/example/tampopotest/controller/ChatController.java
@@ -0,0 +1,109 @@
+package com.example.tampopotest.controller;
+
+import com.example.tampopotest.entity.ChatRequest;
+import com.example.tampopotest.entity.ChatRoom;
+import com.example.tampopotest.entity.Message;
+import com.example.tampopotest.service.ChatService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+public class ChatController {
+
+ @Autowired
+ private ChatService chatService;
+
+ // Chat Requests
+ @GetMapping("/chat-requests")
+ public ResponseEntity> getAllChatRequests() {
+ try {
+ List requests = chatService.getAllChatRequests();
+ return ResponseEntity.ok(requests);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @PostMapping("/chat-requests")
+ public ResponseEntity createChatRequest(@RequestParam("from-user-id") String fromUserId,
+ @RequestParam("to-user-id") String toUserId) {
+ try {
+ ChatRequest request = chatService.createChatRequest(fromUserId, toUserId);
+ return ResponseEntity.ok(request);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+ }
+ }
+
+ @DeleteMapping("/chat-requests/{chat-request-id}")
+ public ResponseEntity deleteChatRequest(@PathVariable("chat-request-id") Long chatRequestId) {
+ try {
+ chatService.deleteChatRequest(chatRequestId);
+ return ResponseEntity.ok().build();
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ // Chat Rooms
+ @GetMapping("/chat-rooms")
+ public ResponseEntity> getAllChatRooms() {
+ try {
+ List rooms = chatService.getAllChatRooms();
+ return ResponseEntity.ok(rooms);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @PostMapping("/chat-rooms")
+ public ResponseEntity createChatRoom(@RequestParam("user-id1") String userId1,
+ @RequestParam("user-id2") String userId2) {
+ try {
+ ChatRoom room = chatService.createChatRoom(userId1, userId2);
+ return ResponseEntity.ok(room);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+ }
+ }
+
+ @GetMapping("/chat-rooms/{chatroom-id}/{user-id}")
+ public ResponseEntity> getMessages(@PathVariable("chatroom-id") Long chatroomId,
+ @PathVariable("user-id") String userId) {
+ try {
+ List messages = chatService.getMessagesByChatroomId(chatroomId);
+ return ResponseEntity.ok(messages);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @PostMapping("/chat-rooms/{chatroom-id}/{user-id}")
+ public ResponseEntity createMessage(@PathVariable("chatroom-id") Long chatroomId,
+ @PathVariable("user-id") String userId,
+ @RequestParam("text") String text) {
+ try {
+ Message message = chatService.createMessage(chatroomId, userId, text);
+ return ResponseEntity.ok(message);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+ }
+ }
+
+ @PutMapping("/chat-rooms/{chatroom-id}/{user-id}/message")
+ public ResponseEntity updateMessage(@PathVariable("chatroom-id") Long chatroomId,
+ @PathVariable("user-id") String userId,
+ @RequestParam("message-id") Long messageId,
+ @RequestParam("new-text") String newText) {
+ try {
+ Message message = chatService.updateMessage(messageId, newText);
+ return ResponseEntity.ok(message);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+}
diff --git a/src/main/java/com/example/tampopotest/controller/FriendController.java b/src/main/java/com/example/tampopotest/controller/FriendController.java
new file mode 100644
index 0000000..d56bbcd
--- /dev/null
+++ b/src/main/java/com/example/tampopotest/controller/FriendController.java
@@ -0,0 +1,125 @@
+package com.example.tampopotest.controller;
+
+import com.example.tampopotest.entity.FriendPair;
+import com.example.tampopotest.entity.FriendRequest;
+import com.example.tampopotest.service.FriendService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+public class FriendController {
+
+ @Autowired
+ private FriendService friendService;
+
+ // /users/{user-id}/friends
+ @GetMapping("/users/{user-id}/friends")
+ public ResponseEntity> getFriends(@PathVariable("user-id") String userId) {
+ try {
+ List friends = friendService.getFriendsByUserId(userId);
+ return ResponseEntity.ok(friends);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @GetMapping("/users/{user-id}/friends/{pair-id}")
+ public ResponseEntity getFriendPair(@PathVariable("user-id") String userId,
+ @PathVariable("pair-id") Long pairId) {
+ try {
+ FriendPair pair = friendService.getFriendPairById(pairId);
+ return ResponseEntity.ok(pair);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @DeleteMapping("/users/{user-id}/friends/{pair-id}")
+ public ResponseEntity deleteFriendPair(@PathVariable("user-id") String userId,
+ @PathVariable("pair-id") Long pairId) {
+ try {
+ friendService.deleteFriendPair(pairId);
+ return ResponseEntity.ok().build();
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ // /friend-requests
+ @GetMapping("/friend-requests")
+ public ResponseEntity> getAllFriendRequests() {
+ try {
+ List requests = friendService.getAllFriendRequests();
+ return ResponseEntity.ok(requests);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @PostMapping("/friend-requests")
+ public ResponseEntity createFriendRequest(@RequestParam("from-user-id") String fromUserId,
+ @RequestParam("to-user-id") String toUserId) {
+ try {
+ FriendRequest request = friendService.createFriendRequest(fromUserId, toUserId);
+ return ResponseEntity.ok(request);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+ }
+ }
+
+ @DeleteMapping("/friend-requests/{friend-request-id}")
+ public ResponseEntity deleteFriendRequest(@PathVariable("friend-request-id") Long friendRequestId) {
+ try {
+ friendService.deleteFriendRequest(friendRequestId);
+ return ResponseEntity.ok().build();
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ // /friends
+ @GetMapping("/friends")
+ public ResponseEntity> getAllFriendPairs() {
+ try {
+ List pairs = friendService.getAllFriendPairs();
+ return ResponseEntity.ok(pairs);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @PostMapping("/friends")
+ public ResponseEntity createFriendPair(@RequestParam("user-id1") String userId1,
+ @RequestParam("user-id2") String userId2) {
+ try {
+ FriendPair pair = friendService.createFriendPair(userId1, userId2);
+ return ResponseEntity.ok(pair);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).build();
+ }
+ }
+
+ @DeleteMapping("/friends/pairs/{pair-id}")
+ public ResponseEntity deleteFriendPairByPairId(@PathVariable("pair-id") Long pairId) {
+ try {
+ friendService.deleteFriendPairByUsers(pairId);
+ return ResponseEntity.ok().build();
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
+ }
+ }
+
+ @GetMapping("/friends/users/{user-id}")
+ public ResponseEntity> getFriendPairsByUserId(@PathVariable("user-id") String userId) {
+ try {
+ List pairs = friendService.getFriendPairsByUserId(userId);
+ return ResponseEntity.ok(pairs);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+}
diff --git a/src/main/java/com/example/tampopotest/controller/UserController.java b/src/main/java/com/example/tampopotest/controller/UserController.java
new file mode 100644
index 0000000..3eb7094
--- /dev/null
+++ b/src/main/java/com/example/tampopotest/controller/UserController.java
@@ -0,0 +1,223 @@
+package com.example.tampopotest.controller;
+
+import com.example.tampopotest.entity.User;
+import com.example.tampopotest.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/users")
+public class UserController {
+
+ @Autowired
+ private UserService userService;
+
+ @GetMapping
+ public ResponseEntity> getAllUsers() {
+ try {
+ List userIds = userService.getAllUserIds();
+ return ResponseEntity.ok(userIds);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+ }
+ }
+
+ @PostMapping
+ public ResponseEntity