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)); } } 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/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 = { 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); + } + } }