From 215cc391913bd61a39f3d08ca465178aeccb4249 Mon Sep 17 00:00:00 2001 From: Seonjun Kim Date: Thu, 18 Dec 2025 16:44:23 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EC=9D=98=20?= =?UTF-8?q?=EB=8C=80=EC=83=81=EC=9E=90=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EB=B6=88=EB=9F=AC=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MessageController.java | 34 +++++++++++++++++++ .../team4backend/domain/TargetPerson.java | 3 ++ .../repository/TargetPersonRepository.java | 5 +++ 3 files changed, 42 insertions(+) create mode 100644 src/main/java/com/example/team4backend/controller/MessageController.java diff --git a/src/main/java/com/example/team4backend/controller/MessageController.java b/src/main/java/com/example/team4backend/controller/MessageController.java new file mode 100644 index 0000000..ae2f3bc --- /dev/null +++ b/src/main/java/com/example/team4backend/controller/MessageController.java @@ -0,0 +1,34 @@ +package com.example.team4backend.controller; + +import com.example.team4backend.common.response.ApiResult; +import com.example.team4backend.dto.MessageListResponse; +import com.example.team4backend.security.CustomUserDetails; +import com.example.team4backend.service.MessageService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Tag(name = "Message", description = "메시지 관리 API") +@RestController +@RequestMapping("/messages") +@RequiredArgsConstructor +public class MessageController { + + private final MessageService messageService; + + @Operation(summary = "메시지 리스트 조회", description = "대상자별 이름, 추천 서두, 마지막 연락 날짜를 리스트로 조회합니다.") + @GetMapping + public ResponseEntity>> getMessageList( + @AuthenticationPrincipal CustomUserDetails userDetails + ) { + List messageList = messageService.getMessageList(userDetails.getId()); + return ResponseEntity.ok(ApiResult.ok(messageList)); + } +} diff --git a/src/main/java/com/example/team4backend/domain/TargetPerson.java b/src/main/java/com/example/team4backend/domain/TargetPerson.java index 53278ab..5967acf 100644 --- a/src/main/java/com/example/team4backend/domain/TargetPerson.java +++ b/src/main/java/com/example/team4backend/domain/TargetPerson.java @@ -49,6 +49,9 @@ public class TargetPerson extends BaseTimeEntity { private Instant lastMessageDate; + @Column(columnDefinition = "TEXT") + private String recommendedOpening; + 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 1a1421f..231dded 100644 --- a/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java +++ b/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java @@ -37,4 +37,9 @@ public interface TargetPersonRepository extends JpaRepository Date: Thu, 18 Dec 2025 16:44:23 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EC=9D=98=20?= =?UTF-8?q?=EB=8C=80=EC=83=81=EC=9E=90=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EB=B6=88=EB=9F=AC=EC=98=A4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MessageController.java | 34 +++++++++++++++++++ .../team4backend/domain/TargetPerson.java | 3 ++ .../repository/TargetPersonRepository.java | 5 +++ .../team4backend/service/MessageService.java | 26 ++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 src/main/java/com/example/team4backend/controller/MessageController.java create mode 100644 src/main/java/com/example/team4backend/service/MessageService.java diff --git a/src/main/java/com/example/team4backend/controller/MessageController.java b/src/main/java/com/example/team4backend/controller/MessageController.java new file mode 100644 index 0000000..ae2f3bc --- /dev/null +++ b/src/main/java/com/example/team4backend/controller/MessageController.java @@ -0,0 +1,34 @@ +package com.example.team4backend.controller; + +import com.example.team4backend.common.response.ApiResult; +import com.example.team4backend.dto.MessageListResponse; +import com.example.team4backend.security.CustomUserDetails; +import com.example.team4backend.service.MessageService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Tag(name = "Message", description = "메시지 관리 API") +@RestController +@RequestMapping("/messages") +@RequiredArgsConstructor +public class MessageController { + + private final MessageService messageService; + + @Operation(summary = "메시지 리스트 조회", description = "대상자별 이름, 추천 서두, 마지막 연락 날짜를 리스트로 조회합니다.") + @GetMapping + public ResponseEntity>> getMessageList( + @AuthenticationPrincipal CustomUserDetails userDetails + ) { + List messageList = messageService.getMessageList(userDetails.getId()); + return ResponseEntity.ok(ApiResult.ok(messageList)); + } +} diff --git a/src/main/java/com/example/team4backend/domain/TargetPerson.java b/src/main/java/com/example/team4backend/domain/TargetPerson.java index 53278ab..5967acf 100644 --- a/src/main/java/com/example/team4backend/domain/TargetPerson.java +++ b/src/main/java/com/example/team4backend/domain/TargetPerson.java @@ -49,6 +49,9 @@ public class TargetPerson extends BaseTimeEntity { private Instant lastMessageDate; + @Column(columnDefinition = "TEXT") + private String recommendedOpening; + 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 1a1421f..231dded 100644 --- a/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java +++ b/src/main/java/com/example/team4backend/repository/TargetPersonRepository.java @@ -37,4 +37,9 @@ public interface TargetPersonRepository extends JpaRepository getMessageList(Long userId) { + List targets = targetPersonRepository.findAllByUserIdWithDetailsAndDeletedAtIsNull(userId); + + return targets.stream() + .map(target -> MessageListResponse.of(target, target.getRecommendedOpening())) + .toList(); + } +}