From 488c4e068586c276ba0ce877095151aabf44a485 Mon Sep 17 00:00:00 2001 From: Seonjun Kim Date: Thu, 18 Dec 2025 14:06:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:health=20check=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/team4backend/security/SecurityPaths.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/example/team4backend/security/SecurityPaths.java b/src/main/java/com/example/team4backend/security/SecurityPaths.java index 7385a98..1d8d2aa 100644 --- a/src/main/java/com/example/team4backend/security/SecurityPaths.java +++ b/src/main/java/com/example/team4backend/security/SecurityPaths.java @@ -12,8 +12,7 @@ private SecurityPaths() {} "/prompts", "/relationships", "/chat-styles", - "/health", - "/" + "/health" }; public static final String[] CSRF_IGNORED = { @@ -28,7 +27,8 @@ private SecurityPaths() {} "/prompts", "/users", "/targets", - "/relationships" + "/relationships", + "/health" }; public static final String[] PUBLIC_DOCS = { From c55488ab1bfce2d9944919a6a4d222a287b494fe Mon Sep 17 00:00:00 2001 From: Seonjun Kim Date: Thu, 18 Dec 2025 14:30:31 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:health=20check=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/team4backend/controller/AiController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/example/team4backend/controller/AiController.java b/src/main/java/com/example/team4backend/controller/AiController.java index bc28c55..d07c90e 100644 --- a/src/main/java/com/example/team4backend/controller/AiController.java +++ b/src/main/java/com/example/team4backend/controller/AiController.java @@ -22,6 +22,7 @@ public ResponseEntity> chat(@RequestBody PromptRequest promptReq System.out.println("=== AiController.chat() 호출됨 === userInput: " + promptRequest.getUserInput()); String aiResponse = aiService.generateContent(promptRequest.getUserInput()); System.out.println("=== AiController.chat() 응답 완료 ==="); + return ResponseEntity.ok(ApiResult.ok(aiResponse)); } } From 0daf3777d3cf27c8b3fbcb7c14b410722f76aee2 Mon Sep 17 00:00:00 2001 From: Seonjun Kim Date: Thu, 18 Dec 2025 14:58:52 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=EB=A7=88=EC=A7=80=EB=A7=89=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=97=B0=EB=9D=BD=ED=95=9C=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EA=B0=B1=EC=8B=A0=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../team4backend/controller/TargetController.java | 10 ++++++++++ .../example/team4backend/domain/TargetPerson.java | 2 ++ .../repository/TargetPersonRepository.java | 7 +++++++ .../team4backend/service/TargetService.java | 15 +++++++++++++++ 4 files changed, 34 insertions(+) diff --git a/src/main/java/com/example/team4backend/controller/TargetController.java b/src/main/java/com/example/team4backend/controller/TargetController.java index d4b66c9..0b5b3cc 100644 --- a/src/main/java/com/example/team4backend/controller/TargetController.java +++ b/src/main/java/com/example/team4backend/controller/TargetController.java @@ -73,4 +73,14 @@ public ResponseEntity> deleteTarget( targetService.deleteTarget(userDetails.getId(), targetId); return ResponseEntity.ok(ApiResult.ok("대상자 정보가 삭제되었습니다.")); } + + @Operation(summary = "최근 메시지 보낸날짜 갱신", description = "메시지를 보내면 최근 메시지를 보낸 날짜를 갱신합니다.") + @PutMapping("/{targetId}/message-date") + public ResponseEntity> updateLastMessageDate( + @AuthenticationPrincipal CustomUserDetails userDetails, + @PathVariable Long targetId + ) { + targetService.updateLastMessageDate(userDetails.getId(), targetId); + return ResponseEntity.ok(ApiResult.ok("최근 메시지 보낸 날짜가 업데이트되었습니다.")); + } } \ No newline at end of file diff --git a/src/main/java/com/example/team4backend/domain/TargetPerson.java b/src/main/java/com/example/team4backend/domain/TargetPerson.java index bbeb593..53278ab 100644 --- a/src/main/java/com/example/team4backend/domain/TargetPerson.java +++ b/src/main/java/com/example/team4backend/domain/TargetPerson.java @@ -47,6 +47,8 @@ public class TargetPerson extends BaseTimeEntity { @JoinColumn(name = "chat_style_id") private ChatStyle chatStyle; + private Instant lastMessageDate; + private Instant deletedAt; @Builder diff --git a/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java b/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java index a86891e..1a1421f 100644 --- a/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java +++ b/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java @@ -6,6 +6,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; +import java.time.Instant; import java.util.Optional; import java.util.List; @@ -30,4 +31,10 @@ public interface TargetPersonRepository extends JpaRepository findOwnerIdByIdAndDeletedAtIsNull(@Param("id") Long id); + + @Modifying + @Query("UPDATE TargetPerson t SET t.lastMessageDate = :date WHERE t.id = :targetId AND t.user.id = :userId AND t.deletedAt IS NULL") + int updateLastMessageDate(@Param("targetId") Long targetId, + @Param("userId") Long userId, + @Param("date") Instant date); } diff --git a/src/main/java/com/example/team4backend/service/TargetService.java b/src/main/java/com/example/team4backend/service/TargetService.java index 2576080..c577cca 100644 --- a/src/main/java/com/example/team4backend/service/TargetService.java +++ b/src/main/java/com/example/team4backend/service/TargetService.java @@ -19,6 +19,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.Instant; import java.util.List; @Service @@ -150,4 +151,18 @@ public void deleteTarget(Long userId, Long targetId) { throw new BusinessException(ErrorCode.AUTH_FORBIDDEN); } + + @Transactional + public void updateLastMessageDate(Long userId, Long targetId) { + int updated = targetPersonRepository.updateLastMessageDate( + targetId, + userId, + Instant.now() + ); + + if (updated == 0) { + // targetId가 존재하지 않거나 userId가 일치하지 않음 + throw new BusinessException(ErrorCode.NOT_FOUND); + } + } }