-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[JT-28] 회원가입 기능 PR입니다.
- Loading branch information
Showing
21 changed files
with
278 additions
and
78 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
spring: | ||
profiles: | ||
include: s3 | ||
include: s3, smtp |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
dependencies { | ||
// SMTP | ||
implementation 'org.springframework.boot:spring-boot-starter-mail' | ||
} |
34 changes: 34 additions & 0 deletions
34
module-domain-smtp/src/main/java/com/devtoon/jtoon/smtp/application/SmtpService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package com.devtoon.jtoon.smtp.application; | ||
|
||
import org.springframework.mail.MailException; | ||
import org.springframework.mail.javamail.JavaMailSender; | ||
import org.springframework.mail.javamail.MimeMessageHelper; | ||
import org.springframework.stereotype.Service; | ||
|
||
import com.devtoon.jtoon.exception.ExceptionCode; | ||
import com.devtoon.jtoon.exception.MemberException; | ||
import com.devtoon.jtoon.smtp.entity.Mail; | ||
import jakarta.mail.MessagingException; | ||
import jakarta.mail.internet.MimeMessage; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class SmtpService { | ||
|
||
private final JavaMailSender javaMailSender; | ||
|
||
public void sendMail(Mail mail) { | ||
MimeMessage mimeMessage = javaMailSender.createMimeMessage(); | ||
|
||
try { | ||
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "utf-8"); | ||
mimeMessageHelper.setTo(mail.getTo()); | ||
mimeMessageHelper.setSubject(mail.getSubject()); | ||
mimeMessageHelper.setText(mail.getText()); | ||
javaMailSender.send(mimeMessage); | ||
} catch (MessagingException | MailException e) { | ||
throw new MemberException(ExceptionCode.MEMBER_MESSAGE_SEND_FAILED); | ||
} | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
module-domain-smtp/src/main/java/com/devtoon/jtoon/smtp/config/MailConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package com.devtoon.jtoon.smtp.config; | ||
|
||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.mail.javamail.JavaMailSender; | ||
import org.springframework.mail.javamail.JavaMailSenderImpl; | ||
|
||
import java.util.Properties; | ||
|
||
@Configuration | ||
public class MailConfig { | ||
|
||
@Value("${smtp.username}") | ||
private String username; | ||
|
||
@Value("${smtp.password}") | ||
private String password; | ||
|
||
@Value("${smtp.host}") | ||
private String host; | ||
|
||
@Value("${smtp.port}") | ||
private Integer port; | ||
|
||
@Bean | ||
public JavaMailSender javaMailSender() { | ||
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); | ||
javaMailSender.setHost(host); | ||
javaMailSender.setUsername(username); | ||
javaMailSender.setPassword(password); | ||
javaMailSender.setPort(port); | ||
javaMailSender.setJavaMailProperties(getMailProperties()); | ||
|
||
return javaMailSender; | ||
} | ||
|
||
private Properties getMailProperties() { | ||
Properties properties = new Properties(); | ||
properties.setProperty("mail.transport.protocol", "smtp"); | ||
properties.setProperty("mail.smtp.auth", "true"); | ||
properties.setProperty("mail.smtp.starttls.enable", "true"); | ||
properties.setProperty("mail.debug", "true"); | ||
properties.setProperty("mail.smtp.ssl.trust","smtp.google.com"); | ||
properties.setProperty("mail.smtp.ssl.protocols", "TLSv1.2"); | ||
|
||
return properties; | ||
} | ||
} |
36 changes: 36 additions & 0 deletions
36
module-domain-smtp/src/main/java/com/devtoon/jtoon/smtp/entity/Mail.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package com.devtoon.jtoon.smtp.entity; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
public class Mail { | ||
|
||
private static final String DEFAULT_SUBJECT = "[JTOON] 이메일 관련 인증입니다."; | ||
|
||
private String subject = DEFAULT_SUBJECT; | ||
private String to; | ||
private String text; | ||
|
||
@Builder | ||
private Mail(String subject, String to, String text) { | ||
this.subject = subject; | ||
this.to = to; | ||
this.text = text; | ||
} | ||
|
||
public static Mail createEvent(String subject, String to, String text) { | ||
return Mail.builder() | ||
.subject(subject) | ||
.to(to) | ||
.text(text) | ||
.build(); | ||
} | ||
|
||
public static Mail createAuthentication(String to, String text) { | ||
return Mail.builder() | ||
.to(to) | ||
.text(text) | ||
.build(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
35 changes: 34 additions & 1 deletion
35
module-domain/src/main/java/com/devtoon/jtoon/member/application/MemberService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,20 +1,53 @@ | ||
package com.devtoon.jtoon.member.application; | ||
|
||
import org.springframework.security.crypto.password.PasswordEncoder; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
import com.devtoon.jtoon.exception.ExceptionCode; | ||
import com.devtoon.jtoon.exception.MemberException; | ||
import com.devtoon.jtoon.member.entity.Member; | ||
import com.devtoon.jtoon.member.repository.MemberRepository; | ||
import com.devtoon.jtoon.member.request.SignUpDto; | ||
import com.devtoon.jtoon.smtp.application.SmtpService; | ||
import com.devtoon.jtoon.smtp.entity.Mail; | ||
import java.util.UUID; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@Service | ||
@Transactional(readOnly = true) | ||
@RequiredArgsConstructor | ||
public class MemberService { | ||
|
||
private final SmtpService smtpService; | ||
private final MemberRepository memberRepository; | ||
private final PasswordEncoder passwordEncoder; | ||
|
||
@Transactional | ||
public void createMember(SignUpDto signUpDto) { | ||
Member member = signUpDto.toEntity(); | ||
validateDuplicateEmail(signUpDto.email()); | ||
String encryptedPassword = encodePassword(signUpDto.password()); | ||
Member member = signUpDto.toEntity(encryptedPassword); | ||
memberRepository.save(member); | ||
} | ||
|
||
public String sendEmailAuthentication(String email) { | ||
validateDuplicateEmail(email); | ||
UUID uuid = UUID.randomUUID(); | ||
String randomUuid = uuid.toString().substring(0, 6); | ||
Mail mail = Mail.createAuthentication(email, randomUuid); | ||
smtpService.sendMail(mail); | ||
|
||
return randomUuid; | ||
} | ||
|
||
private String encodePassword(String password) { | ||
return passwordEncoder.encode(password); | ||
} | ||
|
||
private void validateDuplicateEmail(String email) { | ||
if (memberRepository.existsByEmail(email)) { | ||
throw new MemberException(ExceptionCode.MEMBER_EMAIL_CONFLICT); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.