쪽지
@RestController
public class MessageRestController {
private final MessageService messageService;
public MessageRestController(MessageService messageService) {
this.messageService = messageService;
}
@PostMapping("/messages")
public MessageResponse createMessage(@LoginMember String senderId, @RequestBody MessageRequest request) {
return messageService.create(senderId, request);
}
// 사용자가 보낸 전체 쪽지 조회
@GetMapping("/messages/senders")
public List<MessageSendResponse> findAllSendMessages(@LoginMember String senderId) {
return messageService.findAllSendMessages(senderId);
}
@DeleteMapping("/messages/senders/{messageId}")
public void deleteSendMessage(@PathVariable Long messageId, @LoginMember String senderId) {
messageService.deleteSendMessage(messageId, senderId);
}
// 사용자가 받은 전체 쪽지 조회
@GetMapping("/messages/receivers")
public List<MessageSendResponse> findAllReceiveMessages(@LoginMember String receiveId) {
return messageService.findAllReceiveMessages(receiveId);
}
@DeleteMapping("/messages/receivers/{messageId}")
public void deleteReceiveMessage(@PathVariable Long messageId, @LoginMember String receiverId) {
messageService.deleteReceiveMessage(messageId, receiverId);
}
}
public MessageResponse create(String senderId, MessageRequest request) {
if(request.receiverId().startsWith("C")){
companyRepository.findById(request.receiverId())
.orElseThrow(() -> new NoSuchElementException("해당 기업이 존재하지 않습니다!"));
}
if (request.receiverId().startsWith("P")) {
programmerRepository.findById(request.receiverId())
.orElseThrow(() -> new NoSuchElementException("해당 개발자가 존재하지 않습니다!"));
}
Message message = messageRepository.save(
new Message(
senderId,
request.receiverId()));
return new MessageResponse(
message.getId(),
message.getReceiverId(),
message.getSenderId());
}
//사용자가 보낸거 찾을거야
public List<MessageSendResponse> findAllSendMessages(String senderId) {
List<Message> messageList = messageRepository.findAllBySenderId(senderId);
List<MessageSendResponse> messageSendResponses = new ArrayList<>();
for (Message message : messageList) {
if(senderId.startsWith("C")){
//1. company객체를 찾아서
Company company = companyRepository.findById(message.getSenderId())
.orElseThrow(() -> new NoSuchElementException(message.getSenderId() + "님이 보낸 쪽지가 없습니다."));
//2. companyname에 접근해(가져와) 저장한다.
messageSendResponses.add(new MessageSendResponse(message.getId(), company.getCompanyname()));
}
if(senderId.startsWith("P")){
//1. programmer객체를 찾아서
Programmer programmer = programmerRepository.findById(message.getSenderId())
.orElseThrow(() -> new NoSuchElementException(message.getSenderId() + "님이 보낸 쪽지가 없습니다."));
//2. programmerName에 접근해(가져와) 저장한다.
messageSendResponses.add(new MessageSendResponse(message.getId(), programmer.getName()));
}
}
return messageSendResponses;
}
2-2. 받은 쪽지 목록 조회
마찬가지이다.
//내가 받은거
public List<MessageSendResponse> findAllReceiveMessages(String receiveId) {
List<Message> messageList = messageRepository.findAllByReceiverId(receiveId);
List<MessageSendResponse> messageSendResponses = new ArrayList<>();
for (Message message : messageList) {
if(receiveId.startsWith("C")){
Programmer programmer = programmerRepository.findById(message.getSenderId())
.orElseThrow(() -> new NoSuchElementException(message.getSenderId() + "님이 보낸 쪽지가 없습니다."));
messageSendResponses.add(new MessageSendResponse(message.getId(), programmer.getName()));
}
if(receiveId.startsWith("P")){
Company company = companyRepository.findById(message.getSenderId())
.orElseThrow(() -> new NoSuchElementException(message.getSenderId() + "님이 보낸 쪽지가 없습니다."));
messageSendResponses.add(new MessageSendResponse(message.getId(), company.getCompanyname()));
}
}
return messageSendResponses;
}
//내가 보낸 메세지 삭제
public void deleteSendMessage(Long messageId, String senderId) {
Message message = messageRepository.findById(messageId)
.orElseThrow(() -> new NoSuchElementException("해당 메세지가 없습니다."));
if (!message.getSenderId().equals(senderId)) throw new IllegalArgumentException("송신 ID가 일치하지 않습니다.");
else {
messageRepository.deleteById(messageId);
}
}
public void deleteReceiveMessage(Long messageId, String receiverId) {
Message message = messageRepository.findById(messageId)
.orElseThrow(() -> new NoSuchElementException("해당 메세지가 없습니다."));
if (!message.getReceiverId().equals(receiverId)) throw new IllegalArgumentException("송신 ID가 일치하지 않습니다.");
else {
messageRepository.deleteById(messageId);
}
}
}
현재 문제점들은
- 쪽지 조회
- 내가 보낸 쪽지 조회와 받은 쪽지 조회의 코드가 너무나도 유사하다. 개발자or기업의 이름때문에 저렇게 중복되는 코드를 작성해야하는걸까?
- 쪽지 삭제
- 구현되어 있는 쪽지 삭제는 내가 보낸 쪽지를 삭제하면 받은 사람의 쪽지도 같이 삭제되어버린다. 이게 맞을까?
- 탈퇴된 회원의 쪽지는 없어지나?
- 나한테 A라는 사람이 쪽지를 보냈는데, 그 사람이 회원탈퇴를 했을 때 그 사람이 보낸 쪽지들도 다 사라지는 것인가?
여러가지의 문제점이 있다. 이런 문제점을 내일부터 하나하나 해결해 나가고자 한다.
😐 느낀점
내가 보낸 것, 내가 받은 것 2가지로 분류하는게 일단 어려웠던 것 같다.