Skip to content

Commit

Permalink
refactor: ddd interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Seokyeong237 committed Feb 4, 2024
1 parent d34dfea commit 2bb869b
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,21 @@

import com.fullcar.core.exception.NotFoundException;
import com.fullcar.core.response.ErrorCode;
import com.fullcar.member.domain.blacklist.BlacklistRepository;
import com.fullcar.member.domain.member.*;
import com.fullcar.member.presentation.member.dto.request.CompanyRequestDto;
import com.fullcar.member.presentation.member.dto.request.EmailRequestDto;
import com.fullcar.member.presentation.member.dto.response.MemberGetResponseDto;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.thymeleaf.spring6.SpringTemplateEngine;
import org.thymeleaf.context.Context;

@Validated
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
private final BlacklistRepository blacklistRepository;
private final CompanyMapper companyMapper;
private final MemberMapper memberMapper;
private final JavaMailSender javaMailSender;
private final SpringTemplateEngine templateEngine;

/**
* 회원을 식별자로 조회합니다.
Expand All @@ -52,29 +40,4 @@ public void registerCompany(Member member, CompanyRequestDto companyRequestDto)
public MemberGetResponseDto getMember(Member member) {
return memberMapper.toDto(member);
}

public void sendMail(EmailRequestDto emailRequestDto) {
String email = emailRequestDto.getEmail();
String emailDomain = email.substring(email.lastIndexOf("@")+1);
blacklistRepository.findByEmailThrow(emailDomain);

EmailMessage emailMessage = memberMapper.toEntity(emailRequestDto);
MimeMessage mimeMessage = javaMailSender.createMimeMessage();

try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
mimeMessageHelper.setTo(emailMessage.getTo());
mimeMessageHelper.setSubject(emailMessage.getSubject());
mimeMessageHelper.setText(setContext(),true);
mimeMessageHelper.addInline("image", new ClassPathResource("static/images/fullcar_logo.png"));
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}

public String setContext() {
Context context = new Context();
return templateEngine.process("email", context);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.fullcar.member.domain.member.service;

import com.fullcar.member.presentation.member.dto.request.EmailRequestDto;
import org.springframework.transaction.annotation.Transactional;

@Transactional
public interface MailService {
void sendMail(EmailRequestDto emailRequestDto);
}
51 changes: 51 additions & 0 deletions src/main/java/com/fullcar/member/infra/MailClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.fullcar.member.infra;

import com.fullcar.member.application.member.MemberMapper;
import com.fullcar.member.domain.blacklist.BlacklistRepository;
import com.fullcar.member.domain.member.EmailMessage;
import com.fullcar.member.domain.member.service.MailService;
import com.fullcar.member.presentation.member.dto.request.EmailRequestDto;
import jakarta.mail.MessagingException;
import jakarta.mail.internet.MimeMessage;
import lombok.RequiredArgsConstructor;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring6.SpringTemplateEngine;

@Service
@RequiredArgsConstructor
public class MailClient implements MailService {
private final BlacklistRepository blacklistRepository;
private final JavaMailSender javaMailSender;
private final SpringTemplateEngine templateEngine;
private final MemberMapper memberMapper;

@Override
public void sendMail(EmailRequestDto emailRequestDto) {
String email = emailRequestDto.getEmail();
String emailDomain = email.substring(email.lastIndexOf("@")+1);
blacklistRepository.findByEmailThrow(emailDomain);

EmailMessage emailMessage = memberMapper.toEntity(emailRequestDto);
MimeMessage mimeMessage = javaMailSender.createMimeMessage();

try {
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
mimeMessageHelper.setTo(emailMessage.getTo());
mimeMessageHelper.setSubject(emailMessage.getSubject());
mimeMessageHelper.setText(setContext(),true);
mimeMessageHelper.addInline("image", new ClassPathResource("static/images/fullcar_logo.png"));
javaMailSender.send(mimeMessage);
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}

public String setContext() {
Context context = new Context();
return templateEngine.process("email", context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.fullcar.core.response.SuccessCode;
import com.fullcar.member.application.member.MemberService;
import com.fullcar.member.domain.member.Member;
import com.fullcar.member.domain.member.service.MailService;
import com.fullcar.member.presentation.member.dto.request.CompanyRequestDto;
import com.fullcar.member.presentation.member.dto.request.EmailRequestDto;
import com.fullcar.member.presentation.member.dto.response.MemberGetResponseDto;
Expand All @@ -23,6 +24,7 @@
public class MemberController {

private final MemberService memberService;
private final MailService mailService;

@Operation(summary = "회사 선택 API")
@ApiResponses({
Expand Down Expand Up @@ -53,7 +55,7 @@ public ApiResponse<MemberGetResponseDto> getMember(@CurrentMember Member member)
})
@PostMapping("/onboarding/company/email")
public ApiResponse<Object> sendAuthenticationMail(@RequestBody EmailRequestDto emailRequestDto) {
memberService.sendMail(emailRequestDto);
mailService.sendMail(emailRequestDto);
return ApiResponse.success(SuccessCode.EMAIL_SENT_SUCCESS);
}
}

0 comments on commit 2bb869b

Please sign in to comment.