From b581566221c7c0f30196242182482130b4408c09 Mon Sep 17 00:00:00 2001 From: oznchex <114240463+oznchex@users.noreply.github.com> Date: Tue, 6 Aug 2024 10:50:35 +0900 Subject: [PATCH] =?UTF-8?q?feat=20:=20private=20->=20private=20matching=20?= =?UTF-8?q?request=20mail=20auto=20send=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mail/presentation/MailController.java | 23 ------- .../linkit/mail/service/MailService.java | 36 ++++++++++- .../linkit/mail/service/MailServiceImpl.java | 60 ++++++++++--------- .../presentation/MatchingController.java | 13 +++- .../matching/service/MatchingService.java | 17 ++++-- 5 files changed, 88 insertions(+), 61 deletions(-) delete mode 100644 src/main/java/liaison/linkit/mail/presentation/MailController.java diff --git a/src/main/java/liaison/linkit/mail/presentation/MailController.java b/src/main/java/liaison/linkit/mail/presentation/MailController.java deleted file mode 100644 index 019e022d..00000000 --- a/src/main/java/liaison/linkit/mail/presentation/MailController.java +++ /dev/null @@ -1,23 +0,0 @@ -package liaison.linkit.mail.presentation; - -import liaison.linkit.mail.service.MailService; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequiredArgsConstructor -@Slf4j -@RequestMapping(value = "/api/mail") -public class MailController { - - private final MailService mailService; - - @PostMapping("") - public void mailConfirm(@RequestParam(name = "email") String email) throws Exception { - mailService.sendSimpleMessage(email); - } -} diff --git a/src/main/java/liaison/linkit/mail/service/MailService.java b/src/main/java/liaison/linkit/mail/service/MailService.java index 207a0b68..bd89bc2b 100644 --- a/src/main/java/liaison/linkit/mail/service/MailService.java +++ b/src/main/java/liaison/linkit/mail/service/MailService.java @@ -1,6 +1,38 @@ package liaison.linkit.mail.service; +import java.time.LocalDateTime; + public interface MailService { - // 메일 발송 - void sendSimpleMessage(String to)throws Exception; + + // 1. 내 이력서 -> 내 이력서 매칭 요청 보낸 경우 + void mailPrivateToPrivate( + final String receiverName, + final String senderName, + final LocalDateTime requestDate, + final String requestMessage + ) throws Exception; + + /* + 1. 수신자 이름 - receiverName + 2. 발신자 이름 - senderName + 3. 매칭 요청 발생 날짜 - requestDate + 4. 매칭 요청 보낼 때 메시지 - requestMessage + */ + + + + + + +// // 2. 내 이력서 -> 팀 소개서 매칭 요청 보낸 경우 +// void mailPrivateToTeam() throws Exception; +// // 3. 팀 소개서 -> 내 이력서 매칭 요청 보낸 경우 +// void mailTeamToPrivate() throws Exception; +// // 4. 팀 소개서 -> 팀 소개서 매칭 요청 보낸 경우 +// void mailTeamToTeam() throws Exception; +// +// // 5. 내 이력서 관련 - 매칭 성사된 경우 +// void mailSuccessPrivate() throws Exception; +// // 6. 팀 소개서 관련 - 매칭 성사된 경우 +// void mailSuccessTeam() throws Exception; } diff --git a/src/main/java/liaison/linkit/mail/service/MailServiceImpl.java b/src/main/java/liaison/linkit/mail/service/MailServiceImpl.java index 0f2c9149..6a04f359 100644 --- a/src/main/java/liaison/linkit/mail/service/MailServiceImpl.java +++ b/src/main/java/liaison/linkit/mail/service/MailServiceImpl.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.io.UnsupportedEncodingException; +import java.time.LocalDateTime; @Service @RequiredArgsConstructor @@ -22,35 +22,40 @@ public class MailServiceImpl implements MailService { @Value("${naver.id}") private String id; + // 1. 내 이력서 -> 내 이력서 매칭 요청 보낸 경우 @Override - public void sendSimpleMessage(String to) throws Exception { - MimeMessage message = createMessage(to); // "to" 로 메일 발송 - log.info("********생성된 메시지******** => " + message); + public void mailPrivateToPrivate( + final String receiverName, + final String senderName, + final LocalDateTime requestDate, + final String requestMessage + ) throws Exception { + final MimeMessage mimeMessage = createPrivateToPrivateMail( + receiverName, + senderName, + requestDate, + requestMessage + ); try { - emailSender.send(message); + emailSender.send(mimeMessage); } catch (Exception e) { e.printStackTrace(); throw new IllegalArgumentException(); } } - private MimeMessage createMessage(String to) throws MessagingException, UnsupportedEncodingException { - log.info("메일받을 사용자 : " + to); - - MimeMessage message = emailSender.createMimeMessage(); - message.addRecipients(Message.RecipientType.TO, to); - message.setSubject("관리자 회원가입을 위한 이메일 인증코드"); - - // Define dynamic content - String recipientName = "Recipient Name"; // e.g., fetched from user info - String senderName = "Sukki"; - String requestDate = "7월 12일"; - String matchingRequestMessage = "매칭 요청 본문"; - String profileSummary = "홍익대학교 시각디자인과 재학 중 초기 창업팀 근무 경험(5개월)"; - - // Use String.format() to insert variables into the message body - String msgg = String.format(""" + private MimeMessage createPrivateToPrivateMail( + final String receiverName, + final String senderName, + final LocalDateTime requestDate, + final String requestMessage + ) throws MessagingException { + final MimeMessage mimeMessage = emailSender.createMimeMessage(); + mimeMessage.addRecipients(Message.RecipientType.TO, receiverName); + mimeMessage.setSubject("[링킷] 내 이력서 매칭 요청 알림"); + + final String msgg = String.format("""
@@ -92,7 +97,7 @@ private MimeMessage createMessage(String to) throws MessagingException, Unsuppor
%s님의 이력
- %s + 이력 설명
- """, recipientName, recipientName, senderName, requestDate, senderName, matchingRequestMessage, senderName, profileSummary, senderName); - - message.setText(msgg, "utf-8", "html"); - message.setFrom(id); - log.info("********createMessage 함수에서 생성된 msgg 메시지********" + msgg); - log.info("********createMessage 함수에서 생성된 리턴 메시지********" + message); + """, receiverName, receiverName, senderName, requestDate, senderName, requestMessage, senderName, senderName); + mimeMessage.setText(msgg, "utf-8", "html"); + mimeMessage.setFrom(id); - return message; + return mimeMessage; } } diff --git a/src/main/java/liaison/linkit/matching/presentation/MatchingController.java b/src/main/java/liaison/linkit/matching/presentation/MatchingController.java index 1f859422..17c72e1f 100644 --- a/src/main/java/liaison/linkit/matching/presentation/MatchingController.java +++ b/src/main/java/liaison/linkit/matching/presentation/MatchingController.java @@ -13,7 +13,10 @@ import liaison.linkit.matching.dto.response.SuccessMatchingResponse; import liaison.linkit.matching.dto.response.contact.SuccessContactResponse; import liaison.linkit.matching.dto.response.existence.ExistenceProfileResponse; -import liaison.linkit.matching.dto.response.messageResponse.*; +import liaison.linkit.matching.dto.response.messageResponse.ReceivedPrivateMatchingMessageResponse; +import liaison.linkit.matching.dto.response.messageResponse.ReceivedTeamMatchingMessageResponse; +import liaison.linkit.matching.dto.response.messageResponse.RequestPrivateMatchingMessageResponse; +import liaison.linkit.matching.dto.response.messageResponse.RequestTeamMatchingMessageResponse; import liaison.linkit.matching.service.MatchingService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -62,7 +65,7 @@ public ResponseEntity createTeamProfileMatchingToPrivate( @Auth final Accessor accessor, @PathVariable final Long profileId, @RequestBody @Valid MatchingCreateRequest matchingCreateRequest - ) { + ) throws Exception { matchingService.createTeamProfileMatchingToPrivate(accessor.getMemberId(), profileId, matchingCreateRequest); return ResponseEntity.status(CREATED).build(); } @@ -78,6 +81,7 @@ public ResponseEntity createTeamProfileMatchingToTeam( @RequestBody @Valid MatchingCreateRequest matchingCreateRequest ) { matchingService.createTeamProfileMatchingToTeam(accessor.getMemberId(), teamMemberAnnouncementId, matchingCreateRequest); + return ResponseEntity.status(CREATED).build(); } @@ -218,6 +222,7 @@ public ResponseEntity getRequestPrivateToTea return ResponseEntity.status(HttpStatus.OK).body(requestTeamMatchingMessageResponse); } + // 내 이력서 관련 매칭일 때 수락/거절하기 버튼을 누른 경우 // 이메일 발송 자동화 필요 @PostMapping("/allow/private/matching/{privateMatchingId}") @@ -231,7 +236,7 @@ public ResponseEntity acceptReceivePrivateMatching( return ResponseEntity.status(HttpStatus.OK).build(); } - // 팀 소개서 관련 매칭일 때 수락하기 버튼을 누른 경우 + // 팀 소개서 관련 매칭일 때 수락/거절하기 버튼을 누른 경우 // 이메일 발송 자동화 필요 @PostMapping("/allow/team/matching/{teamMatchingId}") @MemberOnly @@ -244,6 +249,8 @@ public ResponseEntity acceptReceiveTeamMatching( return ResponseEntity.status(HttpStatus.OK).build(); } + + // 내 이력서 관련 매칭일 때 연락하기 버튼을 누른 경우 // 수신자가 내 이력서일 때 @GetMapping("/success/private/matching/contact/{privateMatchingId}") diff --git a/src/main/java/liaison/linkit/matching/service/MatchingService.java b/src/main/java/liaison/linkit/matching/service/MatchingService.java index a13936d3..cbe44c01 100644 --- a/src/main/java/liaison/linkit/matching/service/MatchingService.java +++ b/src/main/java/liaison/linkit/matching/service/MatchingService.java @@ -2,6 +2,7 @@ import liaison.linkit.global.exception.AuthException; import liaison.linkit.global.exception.BadRequestException; +import liaison.linkit.mail.service.MailService; import liaison.linkit.matching.domain.PrivateMatching; import liaison.linkit.matching.domain.TeamMatching; import liaison.linkit.matching.domain.repository.PrivateMatchingRepository; @@ -61,12 +62,13 @@ public class MatchingService { private final PrivateMatchingRepository privateMatchingRepository; private final TeamMatchingRepository teamMatchingRepository; private final ProfileJobRoleRepository profileJobRoleRepository; - private final TeamProfileRepository teamProfileRepository; private final TeamMemberAnnouncementRepository teamMemberAnnouncementRepository; - private final TeamMemberAnnouncementJobRoleRepository teamMemberAnnouncementJobRoleRepository; + // 매칭 관리 -> 이메일 발송 자동화 service 계층 필요 + public final MailService mailService; + // 회원 정보를 가져오는 메서드 private Member getMember(final Long memberId) { return memberRepository.findById(memberId) @@ -157,7 +159,7 @@ public void createTeamProfileMatchingToPrivate( final Long memberId, final Long profileId, final MatchingCreateRequest matchingCreateRequest - ) { + ) throws Exception { final Member member = getMember(memberId); final Profile profile = getProfileById(profileId); if (Objects.equals(getProfile(memberId).getId(), profile.getId())) { @@ -181,7 +183,14 @@ public void createTeamProfileMatchingToPrivate( REMAINED ); - privateMatchingRepository.save(newPrivateMatching); + final PrivateMatching savedPrivateMatching = privateMatchingRepository.save(newPrivateMatching); + + mailService.mailPrivateToPrivate( + profile.getMember().getMemberBasicInform().getMemberName(), + member.getMemberBasicInform().getMemberName(), + savedPrivateMatching.getCreatedAt(), + savedPrivateMatching.getRequestMessage() + ); } // 3번