Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.balybus.galaxy.domain.tblAuthenticationMail;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Comment;

@Getter
@Builder
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class TblAuthenticationMail {
@Id
@Column(name="am_seq")
@Comment(value="인증코드 메일 구분자")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; //구분자
private String email; //이메일
private String code; //인증코드

/* ==================================================
* UPDATE
* ================================================== */
public void updateCode(String code) { this.code = code; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.balybus.galaxy.domain.tblAuthenticationMail;

import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface TblAuthenticationMailRepository extends JpaRepository<TblAuthenticationMail, Long> {
Optional<TblAuthenticationMail> findByEmail(String email);
Optional<TblAuthenticationMail> findByIdAndEmailAndCode(Long id, String email, String code);
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
@Service
@RequiredArgsConstructor
@Transactional
public class CommonServiceImpl {
public class CommonServiceImpl implements CommonService {

private final TblImgServiceImpl imgService;

Expand All @@ -42,6 +42,7 @@ public class CommonServiceImpl {
* @param dto ImgRequestDto.uploadUserImg
* @return ImgResponseDto.uploadUserImg
*/
@Override
@Transactional
public ImgResponseDto.uploadUserImg uploadUserImg(UserDetails userDetails, ImgRequestDto.uploadUserImg dto) {
//1. 이미지 개수 검사
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/com/balybus/galaxy/global/temp/TempService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.balybus.galaxy.global.temp;

import com.balybus.galaxy.global.utils.mail.ContentType;
import com.balybus.galaxy.global.utils.mail.SendMailRequest;
import com.balybus.galaxy.global.utils.mail.SendMailUtils;
import jakarta.mail.MessagingException;
Expand Down Expand Up @@ -31,12 +32,15 @@ public void authenticationMail(String userEmail) {
* @param tempPassword String
*/
private void sendingMail(String userEmail, String tempPassword){
SendMailRequest request = new SendMailRequest();
request.setToMail(userEmail);
request.setTitle("[돌봄워크] "+"이메일 인증");
request.setFromName("은하수 개발단");
SendMailRequest request = SendMailRequest.builder()
.toMail(userEmail)
.title("Test :: 제목")
.fromName("Test :: 은하수 개발단")
.contentType(ContentType.AUTHENTICATION)
.content(tempPassword)
.build();
try {
sendMailUtils.sendMail(request, tempPassword);
sendMailUtils.sendMail(request);
} catch (UnsupportedEncodingException | MessagingException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.balybus.galaxy.global.utils.mail;

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum ContentType {
AUTHENTICATION("mail/sendTempAuthentication"),
;

private final String uri;
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,23 @@
package com.balybus.galaxy.global.utils.mail;

import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@Builder(toBuilder = true)
@ToString
public class SendMailRequest {
private String fromName; //보내는 사람
private String toMail; //받는 메일
private String title; //제목
private final String fromName; //보내는 사람
private final String toMail; //받는 메일
private final String title; //제목
private final ContentType contentType; //이메일 html uri
private final String content; //내용

public static class SendMailRequestBuilder {
public SendMailRequestBuilder title(String title) {
this.title = "[돌봄워크] " + title; // 빌더의 필드(title) 직접 수정
return this;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.thymeleaf.context.Context;
Expand All @@ -28,8 +27,7 @@ public class SendMailUtils {
* 메일을 전송합니다.
* @param request 메일 데이터
*/
@Async
public void sendMail(SendMailRequest request, String content) throws UnsupportedEncodingException, MessagingException {
public void sendMail(SendMailRequest request) throws UnsupportedEncodingException, MessagingException {
// 클래스 생성
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, false, "UTF-8");
Expand All @@ -44,21 +42,20 @@ public void sendMail(SendMailRequest request, String content) throws Unsupported
mimeMessageHelper.setSubject(request.getTitle());

//메일 내용
String html = createHtml(content);
String html = createHtml(request.getContentType(), request.getContent());
mimeMessageHelper.setText(html, true); // 메일 본문 내용, HTML 여부

// 메일 전송
javaMailSender.send(mimeMessage);

log.info("Succeeded to send Email");
}

/**
* 타임리프를 사용하여 메일 내용을 생성합니다.
*/
private String createHtml(String content) {
private String createHtml(ContentType contentType, String content) {
Context context = new Context();
context.setVariable("content", content);
return templateEngine.process("mail/sendTempAuthentication", context);
return templateEngine.process(contentType.getUri(), context);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.balybus.galaxy.global.utils.mail.dto;

import lombok.Builder;
import lombok.Getter;

public class MailRequestDto {
@Getter
@Builder
public static class AuthenticationMail{
private String email;
}
@Getter
@Builder
public static class CheckAuthenticationCode{
private Long amSeq;
private String email;
private String code;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.balybus.galaxy.global.utils.mail.dto;

import lombok.Builder;
import lombok.Getter;

public class MailResponseDto {
@Getter
@Builder
public static class AuthenticationMail{
private Long mailSeq;
}

@Getter
@Builder
public static class CheckAuthenticationCode{
private boolean checker;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import com.balybus.galaxy.domain.tblCenterManager.dto.CenterManagerRequestDto;
import com.balybus.galaxy.domain.tblCenterManager.dto.CenterManagerResponseDto;
import com.balybus.galaxy.global.exception.BadRequestException;
import com.balybus.galaxy.helper.domain.TblHelper;
import com.balybus.galaxy.global.utils.mail.dto.MailRequestDto;
import com.balybus.galaxy.login.dto.request.RefreshTokenDTO;
import com.balybus.galaxy.global.exception.ErrorResponse;
import com.balybus.galaxy.login.dto.request.SignUpDTO;
Expand Down Expand Up @@ -56,7 +56,7 @@ public ResponseEntity<RefreshTokenResponse> refreshToken() {
}

/**
* 로그인
* 로그인 API
* @param dto MemberRequest.LoginDto
* @return ResponseEntity
*/
Expand All @@ -72,6 +72,40 @@ public ResponseEntity<?> signIn(@RequestBody MemberRequest.SignInDto dto) {
return ResponseEntity.ok().body(loginService.signIn(dto));
}

/**
* 회원가입시 이메일 인증코드 발급 및 전송 API
* @param dto MailRequestDto.AuthenticationMail
* @return ResponseEntity<?>
*/
@PostMapping("/authentication-mail")
@Operation(summary = "회원가입시 이메일 인증코드 발급 및 전송 API",
description = "이메일 인증코드를 생성 및 인증코드를 이메일로 전송합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "인증코드 발급 및 전송 성공",
content = @Content(schema = @Schema(implementation = MemberResponse.SignInDto.class))),
@ApiResponse(responseCode = "4000", description = "사용자정의에러코드:등록된 이메일 사용자가 존재합니다.",
content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
})
public ResponseEntity<?> authenticationMail(@RequestBody MailRequestDto.AuthenticationMail dto) {
return ResponseEntity.ok(loginService.authenticationMail(dto));
}

/**
* 회원가입시 이메일 인증코드 일치 여부 확인 API
* @param dto MailRequestDto.CheckAuthenticationCode
* @return ResponseEntity<?>
*/
@PostMapping("/check-code")
@Operation(summary = "회원가입시 이메일 인증코드 일치 여부 확인 API",
description = "인증코드가 일치하는지 확인합니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "인증결과 전송",
content = @Content(schema = @Schema(implementation = MemberResponse.SignInDto.class)))
})
public ResponseEntity<?> checkAuthenticationCode(@RequestBody MailRequestDto.CheckAuthenticationCode dto) {
return ResponseEntity.ok(loginService.checkAuthenticationCode(dto));
}


/**
* 요양 보호사 회원 가입
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package com.balybus.galaxy.login.serviceImpl;

import com.balybus.galaxy.global.utils.mail.dto.MailRequestDto;
import com.balybus.galaxy.global.utils.mail.dto.MailResponseDto;
import com.balybus.galaxy.login.dto.request.RefreshTokenDTO;
import com.balybus.galaxy.member.dto.request.MemberRequest;
import com.balybus.galaxy.member.dto.response.MemberResponse;
Expand All @@ -8,4 +10,7 @@ public interface LoginService {
String renewAccessToken(RefreshTokenDTO refreshTokenDTO);
String getRefreshToken();
MemberResponse.SignInDto signIn(MemberRequest.SignInDto loginDto);
MailResponseDto.AuthenticationMail authenticationMail(MailRequestDto.AuthenticationMail dto);
MailResponseDto.CheckAuthenticationCode checkAuthenticationCode(MailRequestDto.CheckAuthenticationCode dto);

}
Loading