From e6c70d959193511cf95bb38a4057b3f2e4d2f60b Mon Sep 17 00:00:00 2001 From: leesanghun Date: Thu, 28 Nov 2024 18:24:15 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20=EC=9E=84=EC=8B=9C=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20(#75)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat : 임시저장 기능 구현 * fix : 리시버 중복 가능하도록 --- .../message/controller/MessageController.java | 9 ++++++++- .../message/dto/MessageRequestDto.java | 13 ++++++++++++ .../message/service/MessageServiceImpl.java | 20 +++++++++++++++++++ .../message/service/SenderService.java | 5 +++++ .../service/facade/SendSendMessageFacade.java | 10 ++++++++-- 5 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/pictalk/message/controller/MessageController.java b/src/main/java/com/pictalk/message/controller/MessageController.java index 0f6fc44..96fd1ac 100644 --- a/src/main/java/com/pictalk/message/controller/MessageController.java +++ b/src/main/java/com/pictalk/message/controller/MessageController.java @@ -152,5 +152,12 @@ private String getReceiversAsString(List receivers) { .collect(Collectors.joining(", ")); } - + @PostMapping("/temp") + public CommonResponse saveTempMessage( + @AuthenticationPrincipal UserDetails authenticatedPrincipal, + @Valid @RequestBody MessageRequestDto.TempMessageRequest request) { + String userEmail = authenticatedPrincipal.getUsername(); + messageServiceImpl.saveTempMessage(request, userEmail); + return CommonResponse.onSuccess(null); + } } diff --git a/src/main/java/com/pictalk/message/dto/MessageRequestDto.java b/src/main/java/com/pictalk/message/dto/MessageRequestDto.java index cc435ec..72ecfe3 100644 --- a/src/main/java/com/pictalk/message/dto/MessageRequestDto.java +++ b/src/main/java/com/pictalk/message/dto/MessageRequestDto.java @@ -110,4 +110,17 @@ public static class CreateAIMessageRequest { private String situation; private List keyword; } + + @Getter + public static class TempMessageRequest { + + private String duplicateFlag = "N"; + private String content; + private String from; + private String to; + private String sendTime; + private int targetCount; + private List targets; + } + } diff --git a/src/main/java/com/pictalk/message/service/MessageServiceImpl.java b/src/main/java/com/pictalk/message/service/MessageServiceImpl.java index 74613ab..64b4a44 100644 --- a/src/main/java/com/pictalk/message/service/MessageServiceImpl.java +++ b/src/main/java/com/pictalk/message/service/MessageServiceImpl.java @@ -6,12 +6,17 @@ import com.pictalk.infra.PpurioService; import com.pictalk.message.domain.Message; import com.pictalk.message.domain.MessageStatus; +import com.pictalk.message.domain.Sender; +import com.pictalk.message.dto.MessageRequestDto; +import com.pictalk.message.dto.MessageRequestDto.TempMessageRequest; +import com.pictalk.message.dto.MessageResponseDto; import com.pictalk.message.dto.MessageResponseDto.CancelMessageResponse; import com.pictalk.message.repository.MessageRepository; import com.pictalk.message.repository.ReceiverRepository; import com.pictalk.message.repository.SenderRepository; import com.pictalk.user.domain.User; import com.pictalk.user.repository.UserRepository; +import jakarta.validation.Valid; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -29,6 +34,7 @@ public class MessageServiceImpl { private final UserRepository userRepository; private final PpurioClient ppurioClient; private final PpurioService ppurioService; + private final SenderService senderService; @Transactional(readOnly = true) @@ -99,4 +105,18 @@ public List getMessageByStatus(String userEmail, String status) { } + public void saveTempMessage(@Valid MessageRequestDto.TempMessageRequest request, String userEmail) { + User user = userRepository.findByEmail(userEmail) + .orElseThrow(() -> new GeneralException(ErrorStatus.USER_NOT_FOUND)); + + Sender sender = senderService.findOrCreateByUserAndPhoneNumber(user, request.getFrom()); + + Message message = Message.builder() + .sender(sender) + .content(request.getContent()) + .status(MessageStatus.TEMP) + .build(); + + saveMessage(message); + } } diff --git a/src/main/java/com/pictalk/message/service/SenderService.java b/src/main/java/com/pictalk/message/service/SenderService.java index b89dd4f..b97f1ce 100644 --- a/src/main/java/com/pictalk/message/service/SenderService.java +++ b/src/main/java/com/pictalk/message/service/SenderService.java @@ -17,4 +17,9 @@ public Sender findOrCreateSender(String from, User user) { return senderRepository.findByPhoneNumberAndUser(from, user) .orElseGet(() -> senderRepository.save(Sender.builder().phoneNumber(from).user(user).build())); } + + public Sender findOrCreateByUserAndPhoneNumber(User user, String from) { + return senderRepository.findByPhoneNumberAndUser(from, user) + .orElseGet(() -> senderRepository.save(Sender.builder().phoneNumber(from).user(user).build())); + } } diff --git a/src/main/java/com/pictalk/message/service/facade/SendSendMessageFacade.java b/src/main/java/com/pictalk/message/service/facade/SendSendMessageFacade.java index d0845f1..331e352 100644 --- a/src/main/java/com/pictalk/message/service/facade/SendSendMessageFacade.java +++ b/src/main/java/com/pictalk/message/service/facade/SendSendMessageFacade.java @@ -21,6 +21,7 @@ import com.pictalk.message.service.ReceiverService; import com.pictalk.message.service.SenderService; import com.pictalk.user.domain.User; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -66,12 +67,17 @@ public SendMessageResponse processMms(SendMessageRequest request, User user, Mul .sender(sender) .content(request.getContent()) .status(request.getStatus()) + .sentAt(request.getSendTime()==null ? LocalDateTime.now() : LocalDateTime.parse(request.getSendTime())) .build(); - List receivers = receiverService.findOrCreateReceivers(request.getTargets()); - for (Receiver receiver : receivers) { + for (Target target : request.getTargets()) { + Receiver receiver = Receiver.builder() + .phoneNumber(target.getTo()) + .nickname(target.getName()) + .build(); + message.addReceiver(receiver); }