Skip to content

Commit

Permalink
feat : 임시저장 기능 구현 (#75)
Browse files Browse the repository at this point in the history
* feat : 임시저장 기능 구현

* fix : 리시버 중복 가능하도록
  • Loading branch information
lsh1215 authored Nov 28, 2024
1 parent dc03075 commit e6c70d9
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -152,5 +152,12 @@ private String getReceiversAsString(List<Receiver> receivers) {
.collect(Collectors.joining(", "));
}


@PostMapping("/temp")
public CommonResponse<Void> saveTempMessage(
@AuthenticationPrincipal UserDetails authenticatedPrincipal,
@Valid @RequestBody MessageRequestDto.TempMessageRequest request) {
String userEmail = authenticatedPrincipal.getUsername();
messageServiceImpl.saveTempMessage(request, userEmail);
return CommonResponse.onSuccess(null);
}
}
13 changes: 13 additions & 0 deletions src/main/java/com/pictalk/message/dto/MessageRequestDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,17 @@ public static class CreateAIMessageRequest {
private String situation;
private List<String> 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<Target> targets;
}

}
20 changes: 20 additions & 0 deletions src/main/java/com/pictalk/message/service/MessageServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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)
Expand Down Expand Up @@ -99,4 +105,18 @@ public List<Message> 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);
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/pictalk/message/service/SenderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<Receiver> 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);
}

Expand Down

0 comments on commit e6c70d9

Please sign in to comment.