1- package com .gdg .poppet .user .application .service ;
1+ package com .gdg .poppet .email .application .service ;
22
3+ import com .gdg .poppet .chat .domain .model .ChatRoom ;
4+ import com .gdg .poppet .chat .domain .repository .ChatRoomRepository ;
5+ import com .gdg .poppet .email .application .event .EmailSendEvent ;
6+ import com .gdg .poppet .email .infra .application .EmailSendService ;
37import com .gdg .poppet .global .exception .GlobalException ;
48import com .gdg .poppet .global .status .ErrorStatus ;
5- import com .gdg .poppet .user .application .dto .request .EmailRequestDto ;
6- import com .gdg .poppet .user .application .dto .response .EmailDto ;
7- import com .gdg .poppet .user .application .dto .response .EmailPeriodDto ;
8- import com .gdg .poppet .user .domain .converter .EmailConverter ;
9- import com .gdg .poppet .user .domain .model .Email ;
9+ import com .gdg .poppet .email .application .dto .request .EmailRequestDto ;
10+ import com .gdg .poppet .email .application .dto .response .EmailDto ;
11+ import com .gdg .poppet .email .application .dto .response .EmailPeriodDto ;
12+ import com .gdg .poppet .email .domain .converter .EmailConverter ;
13+ import com .gdg .poppet .email .domain .model .Email ;
1014import com .gdg .poppet .user .domain .model .User ;
11- import com .gdg .poppet .user .domain .repository .EmailRepository ;
15+ import com .gdg .poppet .email .domain .repository .EmailRepository ;
1216import com .gdg .poppet .user .domain .repository .UserRepository ;
1317import lombok .RequiredArgsConstructor ;
18+ import lombok .extern .slf4j .Slf4j ;
19+ import org .springframework .context .ApplicationEventPublisher ;
1420import org .springframework .stereotype .Service ;
1521import org .springframework .transaction .annotation .Transactional ;
1622
1723import java .util .List ;
1824import java .util .stream .Collectors ;
1925
26+ @ Slf4j
2027@ Service
2128@ RequiredArgsConstructor
2229public class EmailServiceImpl implements EmailService {
2330
2431 private final UserRepository userRepository ;
2532 private final EmailRepository emailRepository ;
33+ private final ChatRoomRepository chatRoomRepository ;
34+ private final EmailSendService emailSendService ;
35+ private final ApplicationEventPublisher applicationEventPublisher ;
2636
2737 /**
2838 * 사용자의 이메일 전송 주기를 반환한다.
@@ -58,7 +68,7 @@ public EmailPeriodDto patchEmailPeriod(String username, int period) {
5868 * @return 사용자가 등록한 보호자 이메일 리스트
5969 */
6070 @ Override
61- public List <EmailDto > getEmailList (String username ) {
71+ public List <EmailDto > getEmailAddressList (String username ) {
6272 User user = getUser (username );
6373 List <Email > emailList = emailRepository .findByUser (user );
6474
@@ -76,7 +86,7 @@ public List<EmailDto> getEmailList(String username) {
7686 */
7787 @ Transactional
7888 @ Override
79- public List <EmailDto > postEmail (String username , EmailRequestDto emailRequestDto ) {
89+ public List <EmailDto > postEmailAddress (String username , EmailRequestDto emailRequestDto ) {
8090 User user = getUser (username );
8191
8292 validateDuplicateEmail (emailRequestDto .getNewEmail (), user );
@@ -103,7 +113,7 @@ public List<EmailDto> postEmail(String username, EmailRequestDto emailRequestDto
103113 */
104114 @ Transactional
105115 @ Override
106- public void patchEmail (String username , Long emailId , EmailRequestDto emailRequestDto ) {
116+ public void patchEmailAddress (String username , Long emailId , EmailRequestDto emailRequestDto ) {
107117 User user = getUser (username );
108118 Email email = getEmail (emailId );
109119
@@ -123,14 +133,39 @@ public void patchEmail(String username, Long emailId, EmailRequestDto emailReque
123133 */
124134 @ Transactional
125135 @ Override
126- public void deleteEmail (String username , Long emailId ) {
136+ public void deleteEmailAddress (String username , Long emailId ) {
127137 User user = getUser (username );
128138 Email email = getEmail (emailId );
129139 validateIsUserAuthorizedForEmail (user , email );
130140
131141 emailRepository .delete (email );
132142 }
133143
144+ /**
145+ * 유저의 이메일 전송 주기에 따라, 주기 내에 생성된 이메일의 요약 내용을 이메일로 전송한다.
146+ */
147+ @ Transactional
148+ @ Override
149+ public void sendEmail (String username ) {
150+ // TODO: user data 얻는 과정 수정
151+ User user = getUser (username );
152+
153+ // 가장 최근 생성되고 메일을 보내지 않은 채팅방 조회
154+ List <ChatRoom > chatRooms = chatRoomRepository .findByUsernameAndCreatedAtAndIsMailSent (username );
155+ if (chatRooms .isEmpty ()) return ;
156+
157+ // 메일 보낼 채팅방 요약 내용 추출
158+ ChatRoom chatRoom = chatRooms .get (0 );
159+ String chatSummary = chatRoom .getSummary ();
160+ if (chatSummary == null ) return ;
161+
162+ // 메일 보냄 여부 수정
163+ chatRoom .updateIsMailSent ();
164+
165+ // 메일 전송 이벤트 발행
166+ applicationEventPublisher .publishEvent (new EmailSendEvent (user , chatRoom ));
167+ }
168+
134169 private void validateIsUserAuthorizedForEmail (User user , Email email ) {
135170 if (!email .getUser ().equals (user )) {
136171 throw new GlobalException (ErrorStatus .USER_EMAIL_FORBIDDEN );
0 commit comments