From 526336a8202a9ccd8ff8b247204f8341f92f6fe2 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 16:21:56 +0900 Subject: [PATCH 01/36] =?UTF-8?q?feat:=20spring=20mail=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.gradle b/build.gradle index 81739283..44045268 100644 --- a/build.gradle +++ b/build.gradle @@ -37,11 +37,15 @@ dependencies { // jpa implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + // mail + implementation 'org.springframework.boot:spring-boot-starter-mail' + // security //implementation 'org.springframework.boot:spring-boot-starter-security' //implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6' testImplementation 'org.springframework.security:spring-security-test' + // junit testRuntimeOnly 'org.junit.platform:junit-platform-launcher' From d5fff679939b1ba533e6918354683306617a462b Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 16:22:57 +0900 Subject: [PATCH 02/36] =?UTF-8?q?fix:=20BeanMapper=20import=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/tave/tavewebsite/global/config/S3Config.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/global/config/S3Config.java b/src/main/java/com/tave/tavewebsite/global/config/S3Config.java index 4609be48..01a379ad 100644 --- a/src/main/java/com/tave/tavewebsite/global/config/S3Config.java +++ b/src/main/java/com/tave/tavewebsite/global/config/S3Config.java @@ -4,7 +4,6 @@ import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3ClientBuilder; -import net.minidev.json.writer.BeansMapper; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; From a2578113bd88aac237ef8fdac684d84a508b07f0 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 19:00:03 +0900 Subject: [PATCH 03/36] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=BC=20=EC=A0=84?= =?UTF-8?q?=EC=86=A1=EC=9D=84=20=EC=9C=84=ED=95=9C=20MailConfig=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tavewebsite/global/config/MailConfig.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/global/config/MailConfig.java diff --git a/src/main/java/com/tave/tavewebsite/global/config/MailConfig.java b/src/main/java/com/tave/tavewebsite/global/config/MailConfig.java new file mode 100644 index 00000000..3f4ab49a --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/global/config/MailConfig.java @@ -0,0 +1,49 @@ +package com.tave.tavewebsite.global.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("${spring.mail.username}") + private String from; + @Value("${spring.mail.password}") + private String password; + + @Bean + public JavaMailSender mailSender() { + JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); + // SMTP 서버명 + javaMailSender.setHost("smtp.naver.com"); + // 네이버 아이디 + javaMailSender.setUsername(from); + // 네이버 비밀번호 + javaMailSender.setPassword(password); + // SMTP 포트 + javaMailSender.setPort(465); + // 메일 인증서버 가져오기 + javaMailSender.setJavaMailProperties(getMailProperties()); + javaMailSender.setDefaultEncoding("UTF-8"); + + return javaMailSender; + } + + // 메일 인증서버 정보 가져오기 + private Properties getMailProperties() { + Properties properties = new Properties(); + properties.setProperty("mail.transport.protocol", "smtp"); // 프로토콜 설정 + properties.setProperty("mail.smtp.auth", "true"); // smtp 인증 + properties.setProperty("mail.smtp.starttls.enable", "true"); // smtp strattles 사용 + properties.setProperty("mail.debug", "true"); // 디버그 사용 + properties.setProperty("mail.smtp.ssl.trust", "smtp.naver.com"); // ssl 인증 서버 (smtp 서버명) + properties.setProperty("mail.smtp.ssl.enable", "true"); // ssl 사용 + + return properties; + } +} From 60e3c5342d5e783e357e1dc2bed51ef45d2fc4cf Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 19:00:21 +0900 Subject: [PATCH 04/36] =?UTF-8?q?feat:=20MailService=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tavewebsite/global/mail/MailService.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/global/mail/MailService.java diff --git a/src/main/java/com/tave/tavewebsite/global/mail/MailService.java b/src/main/java/com/tave/tavewebsite/global/mail/MailService.java new file mode 100644 index 00000000..af52dc78 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/global/mail/MailService.java @@ -0,0 +1,69 @@ +package com.tave.tavewebsite.global.mail; + + +import com.tave.tavewebsite.global.mail.dto.MailResponseDto; +import com.tave.tavewebsite.global.mail.exception.FailCreateMailException; +import com.tave.tavewebsite.global.mail.exception.FailMailSendException; +import jakarta.mail.Message; +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +import java.io.UnsupportedEncodingException; + +@Slf4j +@Service +@RequiredArgsConstructor +public class MailService { + + private final JavaMailSender emailSender; + + @Value("${spring.mail.username}") + private String from; + + public MailResponseDto sendManagerRegisterMessage(String to){ + + MimeMessage message; + try { + message = creatManagerRegisterMessage(to); // "to" 로 관리자 회원가입 신청메일 발송 + emailSender.send(message); + } catch (MessagingException | UnsupportedEncodingException e) { + throw new FailCreateMailException(); // message를 생성하는 경우에 발생한 예외 (서버 문제) + } catch (FailMailSendException e) { + throw new FailMailSendException(); // Mail을 발송할때 생긴 예외 + } + + return new MailResponseDto(to, "관리자 회원가입 신청 완료"); + } + + // 메일 내용 작성 + private MimeMessage creatManagerRegisterMessage(String to) throws MessagingException, UnsupportedEncodingException { + + MimeMessage message = emailSender.createMimeMessage(); + message.addRecipients(Message.RecipientType.TO, to); + // 이메일 제목 + message.setSubject("[TAVE 관리자 홈페이지] 가입 신청 완료"); + + String msgg = ""; + msgg += "

안녕하세요

"; + msgg += "

4차 산업혁명 동아리 TAVE 입니다.

"; + msgg += "
"; + msgg += "
"; + msgg += "
"; + msgg += "

관리자 회원가입 신청이 완료됐습니다.

"; + msgg += "
"; + msgg += "
"; + + message.setText(msgg, "utf-8", "html"); + // 보내는 사람의 이메일 주소, 보내는 사람 이름 + message.setFrom(from); + + return message; + } + + +} From fa4502ffb083f92ddec12a48e7944164969020e4 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 19:00:40 +0900 Subject: [PATCH 05/36] =?UTF-8?q?feat:=20MailResponseDto=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tavewebsite/global/mail/dto/MailResponseDto.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java diff --git a/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java b/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java new file mode 100644 index 00000000..175d2dff --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java @@ -0,0 +1,9 @@ +package com.tave.tavewebsite.global.mail.dto; + +public record MailResponseDto( + + String to, + String mailContent + +) { +} From 6087de1203fbdfadaf13ce9b6c31eaae0629606f Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 19:01:12 +0900 Subject: [PATCH 06/36] =?UTF-8?q?feat:=20=EB=A9=94=EC=9D=BC=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/mail/exception/ErrorMessage.java | 16 ++++++++++++++++ .../mail/exception/FailCreateMailException.java | 11 +++++++++++ .../mail/exception/FailMailSendException.java | 11 +++++++++++ 3 files changed, 38 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/global/mail/exception/ErrorMessage.java create mode 100644 src/main/java/com/tave/tavewebsite/global/mail/exception/FailCreateMailException.java create mode 100644 src/main/java/com/tave/tavewebsite/global/mail/exception/FailMailSendException.java diff --git a/src/main/java/com/tave/tavewebsite/global/mail/exception/ErrorMessage.java b/src/main/java/com/tave/tavewebsite/global/mail/exception/ErrorMessage.java new file mode 100644 index 00000000..cdce5525 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/global/mail/exception/ErrorMessage.java @@ -0,0 +1,16 @@ +package com.tave.tavewebsite.global.mail.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.apache.commons.codec.net.BCodec; + +@Getter +@AllArgsConstructor +public enum ErrorMessage { + + FAIL_SEND_MAIL(500, "메일 전송에 실패했습니다."), + FAIL_CREATE_MAIL(500, "메일 생성 중 오류가 발생했습니다."); + + private final int code; + private final String message; +} diff --git a/src/main/java/com/tave/tavewebsite/global/mail/exception/FailCreateMailException.java b/src/main/java/com/tave/tavewebsite/global/mail/exception/FailCreateMailException.java new file mode 100644 index 00000000..a77041a1 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/global/mail/exception/FailCreateMailException.java @@ -0,0 +1,11 @@ +package com.tave.tavewebsite.global.mail.exception; + +import com.tave.tavewebsite.global.exception.BaseErrorException; + +import static com.tave.tavewebsite.global.mail.exception.ErrorMessage.FAIL_CREATE_MAIL; + +public class FailCreateMailException extends BaseErrorException { + public FailCreateMailException() { + super(FAIL_CREATE_MAIL.getCode(), FAIL_CREATE_MAIL.getMessage()); + } +} diff --git a/src/main/java/com/tave/tavewebsite/global/mail/exception/FailMailSendException.java b/src/main/java/com/tave/tavewebsite/global/mail/exception/FailMailSendException.java new file mode 100644 index 00000000..a3eb0c78 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/global/mail/exception/FailMailSendException.java @@ -0,0 +1,11 @@ +package com.tave.tavewebsite.global.mail.exception; + +import com.tave.tavewebsite.global.exception.BaseErrorException; + +import static com.tave.tavewebsite.global.mail.exception.ErrorMessage.FAIL_SEND_MAIL; + +public class FailMailSendException extends BaseErrorException { + public FailMailSendException() { + super(FAIL_SEND_MAIL.getCode(), FAIL_SEND_MAIL.getMessage()); + } +} From 9ea0195d08ad0182e97ade0b6d55aef74a837066 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 19:02:24 +0900 Subject: [PATCH 07/36] =?UTF-8?q?feat:=20Email=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20+=20@Valid=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/GlobalExceptionHandler.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java b/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java index f66114fd..aaa5b57d 100644 --- a/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java @@ -2,11 +2,16 @@ import com.tave.tavewebsite.global.exception.Response.ExceptionResponse; +import com.tave.tavewebsite.global.mail.exception.FailMailSendException; +import jakarta.mail.MessagingException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.validation.FieldError; +import java.io.UnsupportedEncodingException; +import java.util.List; @Slf4j @RestControllerAdvice @@ -33,6 +38,22 @@ public ResponseEntity> handle(BaseErrorException e) { @ExceptionHandler({MethodArgumentNotValidException.class, IllegalArgumentException.class}) public ResponseEntity> handle(MethodArgumentNotValidException e) { + List errorMessages = e.getBindingResult().getFieldErrors().stream() + .map(FieldError::getDefaultMessage) + .toList(); + + logWarning(e, ERROR_CODE); + ExceptionResponse response = ExceptionResponse.fail(ERROR_CODE, e.getBindingResult().getAllErrors().get(0).getDefaultMessage()); + + return ResponseEntity + .status(ERROR_CODE) + .body(response); + } + + @ExceptionHandler({FailMailSendException.class, MessagingException.class, UnsupportedEncodingException.class}) + public ResponseEntity> handle(FailMailSendException e) { + + logWarning(e, ERROR_CODE); ExceptionResponse response = ExceptionResponse.fail(ERROR_CODE, e.getMessage()); From 74d56392060e09e762d855846ef09d612fb7f583 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 19:02:48 +0900 Subject: [PATCH 08/36] feat: Email application.yml --- src/main/resources/application.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 65a6243a..10403899 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -13,6 +13,16 @@ spring: # show_sql: true format_sql: true + mail: + host: smtp.naver.com + port: ${send_email_port} + username: ${send_email} + password: ${send_email_password} + properties: + mail.smtp.auth: true + mail.smtp.ssl.enable: true + mail.smtp.ssl.trust: smtp.naver.com + cloud: aws: credentials: @@ -26,3 +36,4 @@ cloud: logging.level: org.hibernate.SQL: debug # org.hibernate.type: trace + From 7d86a327540320313038e04d25078dedeb262049 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Mon, 4 Nov 2024 22:26:51 +0900 Subject: [PATCH 09/36] =?UTF-8?q?refactor:=20Mail=20=EC=9D=91=EB=8B=B5=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tavewebsite/global/mail/MailService.java | 22 ++++++++++++------- .../global/mail/dto/MailResponseDto.java | 1 - 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/tave/tavewebsite/global/mail/MailService.java b/src/main/java/com/tave/tavewebsite/global/mail/MailService.java index af52dc78..d41e19dc 100644 --- a/src/main/java/com/tave/tavewebsite/global/mail/MailService.java +++ b/src/main/java/com/tave/tavewebsite/global/mail/MailService.java @@ -21,6 +21,7 @@ public class MailService { private final JavaMailSender emailSender; + private final String SUCCESS_SIGN_UP = "[TAVE 관리자 홈페이지] 가입 신청 완료"; @Value("${spring.mail.username}") private String from; @@ -37,7 +38,7 @@ public MailResponseDto sendManagerRegisterMessage(String to){ throw new FailMailSendException(); // Mail을 발송할때 생긴 예외 } - return new MailResponseDto(to, "관리자 회원가입 신청 완료"); + return new MailResponseDto(to + " 관리자 회원가입 신청 완료"); } // 메일 내용 작성 @@ -46,7 +47,17 @@ private MimeMessage creatManagerRegisterMessage(String to) throws MessagingExcep MimeMessage message = emailSender.createMimeMessage(); message.addRecipients(Message.RecipientType.TO, to); // 이메일 제목 - message.setSubject("[TAVE 관리자 홈페이지] 가입 신청 완료"); + String msgg = ManagerSingUpHtml(message, SUCCESS_SIGN_UP); + + message.setText(msgg, "utf-8", "html"); + // 보내는 사람의 이메일 주소, 보내는 사람 이름 + message.setFrom(from); + + return message; + } + + private String ManagerSingUpHtml(MimeMessage message, String subject) throws MessagingException { + message.setSubject(subject); String msgg = ""; msgg += "

안녕하세요

"; @@ -57,12 +68,7 @@ private MimeMessage creatManagerRegisterMessage(String to) throws MessagingExcep msgg += "

관리자 회원가입 신청이 완료됐습니다.

"; msgg += "
"; msgg += "
"; - - message.setText(msgg, "utf-8", "html"); - // 보내는 사람의 이메일 주소, 보내는 사람 이름 - message.setFrom(from); - - return message; + return msgg; } diff --git a/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java b/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java index 175d2dff..d0b31966 100644 --- a/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java +++ b/src/main/java/com/tave/tavewebsite/global/mail/dto/MailResponseDto.java @@ -2,7 +2,6 @@ public record MailResponseDto( - String to, String mailContent ) { From 21252049c35aaf61f6310858b23c17a72cc5b83c Mon Sep 17 00:00:00 2001 From: koreaioi Date: Wed, 6 Nov 2024 22:34:14 +0900 Subject: [PATCH 10/36] fix: move MailConfig package --- .../tave/tavewebsite/global/{ => mail}/config/MailConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/com/tave/tavewebsite/global/{ => mail}/config/MailConfig.java (97%) diff --git a/src/main/java/com/tave/tavewebsite/global/config/MailConfig.java b/src/main/java/com/tave/tavewebsite/global/mail/config/MailConfig.java similarity index 97% rename from src/main/java/com/tave/tavewebsite/global/config/MailConfig.java rename to src/main/java/com/tave/tavewebsite/global/mail/config/MailConfig.java index 3f4ab49a..ac6b3182 100644 --- a/src/main/java/com/tave/tavewebsite/global/config/MailConfig.java +++ b/src/main/java/com/tave/tavewebsite/global/mail/config/MailConfig.java @@ -1,4 +1,4 @@ -package com.tave.tavewebsite.global.config; +package com.tave.tavewebsite.global.mail.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; From de56e8888d1fc5ec9a1a5b043dee9e01bb44042b Mon Sep 17 00:00:00 2001 From: koreaioi Date: Wed, 6 Nov 2024 22:38:00 +0900 Subject: [PATCH 11/36] fix: MailService move package --- .../tave/tavewebsite/global/mail/{ => service}/MailService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/com/tave/tavewebsite/global/mail/{ => service}/MailService.java (98%) diff --git a/src/main/java/com/tave/tavewebsite/global/mail/MailService.java b/src/main/java/com/tave/tavewebsite/global/mail/service/MailService.java similarity index 98% rename from src/main/java/com/tave/tavewebsite/global/mail/MailService.java rename to src/main/java/com/tave/tavewebsite/global/mail/service/MailService.java index d41e19dc..0214572c 100644 --- a/src/main/java/com/tave/tavewebsite/global/mail/MailService.java +++ b/src/main/java/com/tave/tavewebsite/global/mail/service/MailService.java @@ -1,4 +1,4 @@ -package com.tave.tavewebsite.global.mail; +package com.tave.tavewebsite.global.mail.service; import com.tave.tavewebsite.global.mail.dto.MailResponseDto; From d67e0359090c9eb7fe45ba3e351c0f03401df2d3 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:40:55 +0900 Subject: [PATCH 12/36] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=BB=A4=EC=8A=A4=ED=85=80=20=EC=98=88=EC=99=B8,?= =?UTF-8?q?=20ErrorMessage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/DuplicateEmailException.java | 11 +++++++++++ .../exception/DuplicateNicknameException.java | 11 +++++++++++ .../domain/member/exception/ErrorMessage.java | 16 ++++++++++++++++ .../member/exception/NotFoundUserException.java | 11 +++++++++++ 4 files changed, 49 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateEmailException.java create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateNicknameException.java create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateEmailException.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateEmailException.java new file mode 100644 index 00000000..be6beb18 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateEmailException.java @@ -0,0 +1,11 @@ +package com.tave.tavewebsite.domain.member.exception; + +import com.tave.tavewebsite.global.exception.BaseErrorException; + +import static com.tave.tavewebsite.domain.member.exception.ErrorMessage.DUPLICATE_EMAIL; + +public class DuplicateEmailException extends BaseErrorException { + public DuplicateEmailException() { + super(DUPLICATE_EMAIL.getCode(), DUPLICATE_EMAIL.getMessage()); + } +} diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateNicknameException.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateNicknameException.java new file mode 100644 index 00000000..cb9fc8d8 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/DuplicateNicknameException.java @@ -0,0 +1,11 @@ +package com.tave.tavewebsite.domain.member.exception; + +import com.tave.tavewebsite.global.exception.BaseErrorException; + +import static com.tave.tavewebsite.domain.member.exception.ErrorMessage.DUPLICATE_NICKNAME; + +public class DuplicateNicknameException extends BaseErrorException { + public DuplicateNicknameException() { + super(DUPLICATE_NICKNAME.getCode(), DUPLICATE_NICKNAME.getMessage()); + } +} diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java new file mode 100644 index 00000000..70997571 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java @@ -0,0 +1,16 @@ +package com.tave.tavewebsite.domain.member.exception; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum ErrorMessage { + + NOT_FOUNT_USER(400, "유저를 찾을 수 없습니다."), + DUPLICATE_EMAIL(400, "이메일이 중복됩니다."), + DUPLICATE_NICKNAME(400, "ID가 중복됩니다."); + + final int code; + final String message; +} diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java new file mode 100644 index 00000000..c0c2a23d --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java @@ -0,0 +1,11 @@ +package com.tave.tavewebsite.domain.member.exception; + +import com.tave.tavewebsite.global.exception.BaseErrorException; + +import static com.tave.tavewebsite.domain.member.exception.ErrorMessage.NOT_FOUNT_USER; + +public class NotFoundUserException extends BaseErrorException { + public NotFoundUserException() { + super(NOT_FOUNT_USER.getCode(), NOT_FOUNT_USER.getMessage()); + } +} From 4a37d4d22d7956f13191038b12d839d5ef3dc332 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:42:12 +0900 Subject: [PATCH 13/36] =?UTF-8?q?fix:=20=EC=98=88=EC=99=B8=EB=AA=85=20User?= =?UTF-8?q?=20->=20Member=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...otFoundUserException.java => NotFoundMemberException.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/com/tave/tavewebsite/domain/member/exception/{NotFoundUserException.java => NotFoundMemberException.java} (73%) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundMemberException.java similarity index 73% rename from src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java rename to src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundMemberException.java index c0c2a23d..b2dc5fec 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundUserException.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/NotFoundMemberException.java @@ -4,8 +4,8 @@ import static com.tave.tavewebsite.domain.member.exception.ErrorMessage.NOT_FOUNT_USER; -public class NotFoundUserException extends BaseErrorException { - public NotFoundUserException() { +public class NotFoundMemberException extends BaseErrorException { + public NotFoundMemberException() { super(NOT_FOUNT_USER.getCode(), NOT_FOUNT_USER.getMessage()); } } From e6d006cfaf1c62a7453f4d52d744356c5029d059 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:42:56 +0900 Subject: [PATCH 14/36] =?UTF-8?q?fix:=20RoleType,=20username=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/entity/Member.java | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/entity/Member.java b/src/main/java/com/tave/tavewebsite/domain/member/entity/Member.java index 806784ab..0b3d3984 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/entity/Member.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/entity/Member.java @@ -1,11 +1,14 @@ package com.tave.tavewebsite.domain.member.entity; +import com.tave.tavewebsite.domain.member.dto.request.RegisterManagerRequestDto; import com.tave.tavewebsite.global.common.BaseEntity; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Size; import lombok.*; +import static com.tave.tavewebsite.domain.member.entity.RoleType.UNAUTHORIZED_MANAGER; + @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -26,16 +29,19 @@ public class Member extends BaseEntity { @Column(length = 100, nullable = false) private String password; - @NotNull - @Size(min = 4, max = 10) - @Column(length = 10, nullable = false) - private String role; + @Enumerated(EnumType.STRING) + private RoleType role; @NotNull @Size(min = 2, max = 20) @Column(length = 20, nullable = false) private String nickname; + @NotNull + @Size(min = 2, max = 20) + @Column(length = 20, nullable = false) + private String username; + @Size(min = 1, max = 30) @Column(length = 30) private String agitId; @@ -50,15 +56,32 @@ public class Member extends BaseEntity { @Enumerated(EnumType.STRING) private JobType job; + @Builder - public Member(String email, String password, String role, String nickname, String agitId, String generation, DepartmentType department, JobType job) { + public Member(String email, String password, RoleType role, String nickname, String username, String agitId, String generation, DepartmentType department, JobType job) { this.email = email; this.password = password; this.role = role; this.nickname = nickname; + this.username = username; this.agitId = agitId; this.generation = generation; this.department = department; this.job = job; } + + // 패스워드 인코딩 필요 + public static Member toMember(RegisterManagerRequestDto registerManagerRequestDto) { + return Member.builder() + .email(registerManagerRequestDto.email()) + .password(registerManagerRequestDto.password()) + .agitId(registerManagerRequestDto.agitId()) + .nickname(registerManagerRequestDto.nickname()) + .username(registerManagerRequestDto.username()) + .generation(registerManagerRequestDto.generation()) + .role(UNAUTHORIZED_MANAGER) + .job(registerManagerRequestDto.job()) + .department(registerManagerRequestDto.department()) + .build(); + } } From 3759ad13620a58b1db0735f2769bf8e9ad430fe0 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:43:49 +0900 Subject: [PATCH 15/36] =?UTF-8?q?feat:=20ManagerController=20=ED=9A=8C?= =?UTF-8?q?=EC=9B=90=EA=B0=80=EC=9E=85=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/ManagerController.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java new file mode 100644 index 00000000..ab586c20 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java @@ -0,0 +1,26 @@ +package com.tave.tavewebsite.domain.member.controller; + +import com.tave.tavewebsite.domain.member.dto.request.RegisterManagerRequestDto; +import com.tave.tavewebsite.domain.member.dto.response.UnauthorizedManagerResponseDto; +import com.tave.tavewebsite.domain.member.service.MemberService; +import com.tave.tavewebsite.global.mail.dto.MailResponseDto; +import com.tave.tavewebsite.global.success.SuccessResponse; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/manager") +@RequiredArgsConstructor +public class ManagerController { + + private final MemberService memberService; + + @PostMapping + public SuccessResponse registerManager(@RequestBody @Valid RegisterManagerRequestDto requestDto) { + MailResponseDto response = memberService.saveMember(requestDto); + return new SuccessResponse<>(response); + } +} From faea2a479c697e1b675148bc76f5800c5a3c53df Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:44:12 +0900 Subject: [PATCH 16/36] =?UTF-8?q?feat:=20ManagerController=20=EB=8C=80?= =?UTF-8?q?=EA=B8=B0=20=EB=AA=85=EB=8B=A8=20=EC=A1=B0=ED=9A=8C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/ManagerController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java index ab586c20..ab058790 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java @@ -23,4 +23,10 @@ public SuccessResponse registerManager(@RequestBody @Valid Regi MailResponseDto response = memberService.saveMember(requestDto); return new SuccessResponse<>(response); } + + @GetMapping("/unauthorized") + public SuccessResponse> getUnauthorizedManager(){ + List response = memberService.getUnauthorizedManager(); + return new SuccessResponse<>(response); + } } From 2fdc5ee3e8f2b0cf308a54e3b3352d9ca4ee20fd Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:44:47 +0900 Subject: [PATCH 17/36] =?UTF-8?q?feat:=20MemberRepository=EC=99=80=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../memberRepository/MemberRepository.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/memberRepository/MemberRepository.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/memberRepository/MemberRepository.java b/src/main/java/com/tave/tavewebsite/domain/member/memberRepository/MemberRepository.java new file mode 100644 index 00000000..31c90b3c --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/memberRepository/MemberRepository.java @@ -0,0 +1,17 @@ +package com.tave.tavewebsite.domain.member.memberRepository; + +import com.tave.tavewebsite.domain.member.entity.Member; +import com.tave.tavewebsite.domain.member.entity.RoleType; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface MemberRepository extends JpaRepository { + + Optional findByEmail(String email); + + Optional findByNickname(String Nickname); + + List findByRole(RoleType role); +} From c9de16e33563c69203e4d7988aa4b4b2dacb011a Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:45:13 +0900 Subject: [PATCH 18/36] =?UTF-8?q?feat:=20RegisterManagerRequestDto=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../request/RegisterManagerRequestDto.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java b/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java new file mode 100644 index 00000000..f1d62fc4 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java @@ -0,0 +1,26 @@ +package com.tave.tavewebsite.domain.member.dto.request; + +import com.tave.tavewebsite.domain.member.entity.DepartmentType; +import com.tave.tavewebsite.domain.member.entity.JobType; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; + +public record RegisterManagerRequestDto( + + @Email(message = "이메일 형식에 맞게 작성해주세요.") + String email, + + @NotNull(message = "비밀번호를 입력하세요.") + @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\W).+$", + message = "비밀번호는 8자 이상이어야 하며, 대문자, 소문자, 특수문자를 포함해야 합니다.") + String password, + String nickname, + String username, + String agitId, + String generation, + DepartmentType department, + JobType job + +) { +} From eeab1c0428fa640dc98312c005808f306b560d6b Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:45:26 +0900 Subject: [PATCH 19/36] =?UTF-8?q?feat:=20UnauthorizedManagerResponseDto=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UnauthorizedManagerResponseDto.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/dto/response/UnauthorizedManagerResponseDto.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/dto/response/UnauthorizedManagerResponseDto.java b/src/main/java/com/tave/tavewebsite/domain/member/dto/response/UnauthorizedManagerResponseDto.java new file mode 100644 index 00000000..14217c4e --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/dto/response/UnauthorizedManagerResponseDto.java @@ -0,0 +1,25 @@ +package com.tave.tavewebsite.domain.member.dto.response; + +import com.tave.tavewebsite.domain.member.entity.DepartmentType; +import com.tave.tavewebsite.domain.member.entity.JobType; +import com.tave.tavewebsite.domain.member.entity.Member; + +public record UnauthorizedManagerResponseDto( + + String username, + DepartmentType department, + JobType job, + String generation, + String agitId + +) { + public static UnauthorizedManagerResponseDto fromEntity(Member member){ + return new UnauthorizedManagerResponseDto( + member.getUsername(), + member.getDepartment(), + member.getJob(), + member.getGeneration(), + member.getAgitId() + ); + } +} From 7cbc3473252ffef9413921bf754c2509f04caa1c Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:47:45 +0900 Subject: [PATCH 20/36] =?UTF-8?q?feat:=20RoleType=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tave/tavewebsite/domain/member/entity/RoleType.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java b/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java new file mode 100644 index 00000000..7b5f26a1 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java @@ -0,0 +1,8 @@ +package com.tave.tavewebsite.domain.member.entity; + +public enum RoleType { + USER, + MANAGER, + ADMIN, + UNAUTHORIZED_MANAGER +} From 108d60b5304b87858f577985dd21dd609074c9bc Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:48:18 +0900 Subject: [PATCH 21/36] =?UTF-8?q?fix:=20RoleType=20MEMBER=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tave/tavewebsite/domain/member/entity/RoleType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java b/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java index 7b5f26a1..f6ce7043 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/entity/RoleType.java @@ -1,7 +1,7 @@ package com.tave.tavewebsite.domain.member.entity; public enum RoleType { - USER, + MEMBER, MANAGER, ADMIN, UNAUTHORIZED_MANAGER From 8925345d29a8608ad5c5b8ee9d64d6958bf6ebf9 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:50:09 +0900 Subject: [PATCH 22/36] =?UTF-8?q?feat:=20MemberService=20saveMember=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/service/MemberService.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java new file mode 100644 index 00000000..ecfdbc64 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -0,0 +1,47 @@ +package com.tave.tavewebsite.domain.member.service; + +import com.tave.tavewebsite.domain.member.dto.request.RegisterManagerRequestDto; +import com.tave.tavewebsite.domain.member.dto.response.UnauthorizedManagerResponseDto; +import com.tave.tavewebsite.domain.member.entity.Member; +import com.tave.tavewebsite.domain.member.entity.RoleType; +import com.tave.tavewebsite.domain.member.exception.DuplicateEmailException; +import com.tave.tavewebsite.domain.member.exception.DuplicateNicknameException; +import com.tave.tavewebsite.domain.member.memberRepository.MemberRepository; +import com.tave.tavewebsite.global.mail.service.MailService; +import com.tave.tavewebsite.global.mail.dto.MailResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class MemberService { + + private final MemberRepository memberRepository; + private final MailService mailService; + + public MailResponseDto saveMember(RegisterManagerRequestDto requestDto){ + + validateNickname(requestDto.nickname()); + validateEmail(requestDto.email()); + + // PasswordEncoder 추가되면 + // toMember에서 encode(requestDto.getPassword()) 추가하기 + // 추가 후 위 주석은 삭제 + Member saveMember = memberRepository.save(Member.toMember(requestDto)); + return mailService.sendManagerRegisterMessage(saveMember.getEmail()); + } + + public void validateEmail(String email){ + memberRepository.findByEmail(email).ifPresent( + member -> {throw new DuplicateEmailException();} + ); + } + + public void validateNickname(String nickname){ + memberRepository.findByNickname(nickname).ifPresent( + member -> {throw new DuplicateNicknameException();} + ); + } +} From c61df7a8fa6f824d60c2629d4cece3678143e57e Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:50:51 +0900 Subject: [PATCH 23/36] =?UTF-8?q?feat:=20MemberService=20getUnauthorizedMa?= =?UTF-8?q?nager=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tavewebsite/domain/member/service/MemberService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java index ecfdbc64..bf2d8301 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -44,4 +44,10 @@ public void validateNickname(String nickname){ member -> {throw new DuplicateNicknameException();} ); } + + public List getUnauthorizedManager(){ + return memberRepository.findByRole(RoleType.UNAUTHORIZED_MANAGER).stream() + .map(UnauthorizedManagerResponseDto::fromEntity) + .toList(); + } } From 536e7fd40db1b30c520c4c63f46b0c7261c0bed3 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:53:33 +0900 Subject: [PATCH 24/36] =?UTF-8?q?fix:=20=EB=B9=84=EC=A7=80=EB=8B=88?= =?UTF-8?q?=EC=8A=A4=20=EB=82=B4=EB=B6=80=20=EB=A1=9C=EC=A7=81=20private?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tave/tavewebsite/domain/member/service/MemberService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java index bf2d8301..904a1d0d 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -33,13 +33,13 @@ public MailResponseDto saveMember(RegisterManagerRequestDto requestDto){ return mailService.sendManagerRegisterMessage(saveMember.getEmail()); } - public void validateEmail(String email){ + private void validateEmail(String email){ memberRepository.findByEmail(email).ifPresent( member -> {throw new DuplicateEmailException();} ); } - public void validateNickname(String nickname){ + private void validateNickname(String nickname){ memberRepository.findByNickname(nickname).ifPresent( member -> {throw new DuplicateNicknameException();} ); From 17daff7d4ec0630b447fd06ed308a626c3d4ba34 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 02:54:15 +0900 Subject: [PATCH 25/36] =?UTF-8?q?fix:=20GlobalExceptionHandler=20IllegalAr?= =?UTF-8?q?gumentException.class=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/exception/GlobalExceptionHandler.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java b/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java index aaa5b57d..c0b51888 100644 --- a/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/tave/tavewebsite/global/exception/GlobalExceptionHandler.java @@ -9,9 +9,7 @@ import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; -import org.springframework.validation.FieldError; import java.io.UnsupportedEncodingException; -import java.util.List; @Slf4j @RestControllerAdvice @@ -35,13 +33,9 @@ public ResponseEntity> handle(BaseErrorException e) { } // @Valid 예외 처리 (@NotNull, @Size, etc...) or IllegalArgumentException - @ExceptionHandler({MethodArgumentNotValidException.class, IllegalArgumentException.class}) + @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity> handle(MethodArgumentNotValidException e) { - List errorMessages = e.getBindingResult().getFieldErrors().stream() - .map(FieldError::getDefaultMessage) - .toList(); - logWarning(e, ERROR_CODE); ExceptionResponse response = ExceptionResponse.fail(ERROR_CODE, e.getBindingResult().getAllErrors().get(0).getDefaultMessage()); From 8d2eb8fa9f31ba1bbc6568c2dfee684c4671f57a Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 03:12:44 +0900 Subject: [PATCH 26/36] =?UTF-8?q?fix:=20h2=20=EC=9D=98=EC=A1=B4=EC=84=B1?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index e8384854..c7890ae1 100644 --- a/build.gradle +++ b/build.gradle @@ -51,6 +51,8 @@ dependencies { // db runtimeOnly 'org.postgresql:postgresql' + runtimeOnly 'com.h2database:h2' + // s3 implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE' From 9f20542b4cef62848af1501c1fb29fb76b476443 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 03:13:06 +0900 Subject: [PATCH 27/36] fix: import static UNAUTHORIZED_MANAGER --- .../tave/tavewebsite/domain/member/service/MemberService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java index 904a1d0d..1c4917ce 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -14,6 +14,8 @@ import java.util.List; +import static com.tave.tavewebsite.domain.member.entity.RoleType.UNAUTHORIZED_MANAGER; + @Service @RequiredArgsConstructor public class MemberService { @@ -46,7 +48,7 @@ private void validateNickname(String nickname){ } public List getUnauthorizedManager(){ - return memberRepository.findByRole(RoleType.UNAUTHORIZED_MANAGER).stream() + return memberRepository.findByRole(UNAUTHORIZED_MANAGER).stream() .map(UnauthorizedManagerResponseDto::fromEntity) .toList(); } From 8a14abaf2d7dec9d479a1d7e534929181cf3f9e4 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 03:37:17 +0900 Subject: [PATCH 28/36] =?UTF-8?q?feat:=20@Transactional(readOnly=20=3D=20t?= =?UTF-8?q?rue)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/service/MemberService.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java index 1c4917ce..658bc1f7 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -11,6 +11,7 @@ import com.tave.tavewebsite.global.mail.dto.MailResponseDto; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -23,6 +24,7 @@ public class MemberService { private final MemberRepository memberRepository; private final MailService mailService; + @Transactional public MailResponseDto saveMember(RegisterManagerRequestDto requestDto){ validateNickname(requestDto.nickname()); @@ -35,6 +37,13 @@ public MailResponseDto saveMember(RegisterManagerRequestDto requestDto){ return mailService.sendManagerRegisterMessage(saveMember.getEmail()); } + @Transactional(readOnly = true) + public List getUnauthorizedManager(){ + return memberRepository.findByRole(UNAUTHORIZED_MANAGER).stream() + .map(UnauthorizedManagerResponseDto::fromEntity) + .toList(); + } + private void validateEmail(String email){ memberRepository.findByEmail(email).ifPresent( member -> {throw new DuplicateEmailException();} @@ -47,9 +56,5 @@ private void validateNickname(String nickname){ ); } - public List getUnauthorizedManager(){ - return memberRepository.findByRole(UNAUTHORIZED_MANAGER).stream() - .map(UnauthorizedManagerResponseDto::fromEntity) - .toList(); - } + } From 04650494f3445519e3f494868fbe5d8bf7335095 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 04:03:06 +0900 Subject: [PATCH 29/36] =?UTF-8?q?feat:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=9E=85=EB=A0=A5=20=ED=95=84=EB=93=9C=EC=97=90=20?= =?UTF-8?q?@NotNull=20=EB=B0=8F=20=EC=98=88=EC=99=B8=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/dto/request/RegisterManagerRequestDto.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java b/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java index f1d62fc4..428bd33a 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/dto/request/RegisterManagerRequestDto.java @@ -10,16 +10,21 @@ public record RegisterManagerRequestDto( @Email(message = "이메일 형식에 맞게 작성해주세요.") String email, - @NotNull(message = "비밀번호를 입력하세요.") @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\W).+$", message = "비밀번호는 8자 이상이어야 하며, 대문자, 소문자, 특수문자를 포함해야 합니다.") String password, + @NotNull(message ="아이디를 입력해주세요") String nickname, + @NotNull(message ="이름을 입력해주세요") String username, + @NotNull(message ="아지트 아이디를 입력해주세요") String agitId, + @NotNull(message = "본인 기수를 입력해주세요") String generation, + @NotNull(message = "부서를 선택해주세요") DepartmentType department, + @NotNull(message = "직책을 선택해주세요") JobType job ) { From 6d126149bd2c1b577aacdc8a09794db52ae45b2f Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 04:14:33 +0900 Subject: [PATCH 30/36] =?UTF-8?q?fix:=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=A1=B0=ED=9A=8C=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20public=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tave/tavewebsite/domain/member/service/MemberService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java index 658bc1f7..0a06da94 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -50,7 +50,7 @@ private void validateEmail(String email){ ); } - private void validateNickname(String nickname){ + public void validateNickname(String nickname){ memberRepository.findByNickname(nickname).ifPresent( member -> {throw new DuplicateNicknameException();} ); From 6949d7aeb8739db8de9790fabf340c00a27ba1fc Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 04:15:10 +0900 Subject: [PATCH 31/36] =?UTF-8?q?feat:=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/ManagerController.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java index ab058790..8fceaf8c 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java @@ -1,6 +1,7 @@ package com.tave.tavewebsite.domain.member.controller; import com.tave.tavewebsite.domain.member.dto.request.RegisterManagerRequestDto; +import com.tave.tavewebsite.domain.member.dto.response.CheckNickNameResponseDto; import com.tave.tavewebsite.domain.member.dto.response.UnauthorizedManagerResponseDto; import com.tave.tavewebsite.domain.member.service.MemberService; import com.tave.tavewebsite.global.mail.dto.MailResponseDto; @@ -29,4 +30,11 @@ public SuccessResponse> getUnauthorizedMana List response = memberService.getUnauthorizedManager(); return new SuccessResponse<>(response); } + + @GetMapping("/{nickName}") + public SuccessResponse checkEmail(@PathVariable String nickName){ + memberService.validateNickname(nickName); + CheckNickNameResponseDto response = new CheckNickNameResponseDto(nickName); + return new SuccessResponse<>(response, nickName+" 사용가능합니다."); + } } From 10772a5c7f5be8c67e5ca76e133dddf06ce09e4b Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 04:15:36 +0900 Subject: [PATCH 32/36] =?UTF-8?q?fix=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=97=90=EB=9F=AC=20=EB=A9=94=EC=84=B8?= =?UTF-8?q?=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tave/tavewebsite/domain/member/exception/ErrorMessage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java index 70997571..2acdbc57 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java @@ -9,7 +9,7 @@ public enum ErrorMessage { NOT_FOUNT_USER(400, "유저를 찾을 수 없습니다."), DUPLICATE_EMAIL(400, "이메일이 중복됩니다."), - DUPLICATE_NICKNAME(400, "ID가 중복됩니다."); + DUPLICATE_NICKNAME(400, "이미 사용중인 아이디입니다. 다른 아이디로 가입해주세요."); final int code; final String message; From ec7a0a00def4f7e97e70eb37385585a3eab36c48 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Fri, 8 Nov 2024 04:16:01 +0900 Subject: [PATCH 33/36] =?UTF-8?q?feat:=20=EC=A4=91=EB=B3=B5=20=EC=97=86?= =?UTF-8?q?=EB=8A=94=20email=20=EB=B0=98=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/dto/response/CheckNickNameResponseDto.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/com/tave/tavewebsite/domain/member/dto/response/CheckNickNameResponseDto.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/dto/response/CheckNickNameResponseDto.java b/src/main/java/com/tave/tavewebsite/domain/member/dto/response/CheckNickNameResponseDto.java new file mode 100644 index 00000000..8e747ba9 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/member/dto/response/CheckNickNameResponseDto.java @@ -0,0 +1,6 @@ +package com.tave.tavewebsite.domain.member.dto.response; + +public record CheckNickNameResponseDto( + String email +) { +} From b40d53c47590743a34f5c451d382028b61f7f268 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Tue, 12 Nov 2024 02:51:28 +0900 Subject: [PATCH 34/36] =?UTF-8?q?fix:=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=A6=9D=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/ManagerController.java | 2 +- .../session/entity/repository/SessionRepository.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/tave/tavewebsite/domain/session/entity/repository/SessionRepository.java diff --git a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java index 8fceaf8c..9a98a740 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/controller/ManagerController.java @@ -32,7 +32,7 @@ public SuccessResponse> getUnauthorizedMana } @GetMapping("/{nickName}") - public SuccessResponse checkEmail(@PathVariable String nickName){ + public SuccessResponse checkNickName(@PathVariable String nickName){ memberService.validateNickname(nickName); CheckNickNameResponseDto response = new CheckNickNameResponseDto(nickName); return new SuccessResponse<>(response, nickName+" 사용가능합니다."); diff --git a/src/main/java/com/tave/tavewebsite/domain/session/entity/repository/SessionRepository.java b/src/main/java/com/tave/tavewebsite/domain/session/entity/repository/SessionRepository.java new file mode 100644 index 00000000..b0b23031 --- /dev/null +++ b/src/main/java/com/tave/tavewebsite/domain/session/entity/repository/SessionRepository.java @@ -0,0 +1,9 @@ +package com.tave.tavewebsite.domain.session.entity.repository; + + +import com.tave.tavewebsite.domain.session.entity.Session; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface SessionRepository extends JpaRepository { + +} From 2e1baaaefc6941ec9becccf3cd7704726e3de515 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Tue, 12 Nov 2024 02:52:10 +0900 Subject: [PATCH 35/36] =?UTF-8?q?fix:=20=EC=97=90=EB=9F=AC=20=EB=A9=94?= =?UTF-8?q?=EC=84=B8=EC=A7=80=20=EC=A7=81=EA=B4=80=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tave/tavewebsite/domain/member/exception/ErrorMessage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java b/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java index 2acdbc57..e36a84c0 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/exception/ErrorMessage.java @@ -8,7 +8,7 @@ public enum ErrorMessage { NOT_FOUNT_USER(400, "유저를 찾을 수 없습니다."), - DUPLICATE_EMAIL(400, "이메일이 중복됩니다."), + DUPLICATE_EMAIL(400, "중복되는 이메일입니다."), DUPLICATE_NICKNAME(400, "이미 사용중인 아이디입니다. 다른 아이디로 가입해주세요."); final int code; From f6341f99002751249e77706349a2223d9b5c1261 Mon Sep 17 00:00:00 2001 From: koreaioi Date: Tue, 12 Nov 2024 02:54:00 +0900 Subject: [PATCH 36/36] =?UTF-8?q?fix:=20=ED=8A=B8=EB=9E=9C=EC=9E=AD?= =?UTF-8?q?=EC=85=98=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=8B=A8=EC=97=90=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tave/tavewebsite/domain/member/service/MemberService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java index 0a06da94..b35bf86c 100644 --- a/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java +++ b/src/main/java/com/tave/tavewebsite/domain/member/service/MemberService.java @@ -18,13 +18,13 @@ import static com.tave.tavewebsite.domain.member.entity.RoleType.UNAUTHORIZED_MANAGER; @Service +@Transactional @RequiredArgsConstructor public class MemberService { private final MemberRepository memberRepository; private final MailService mailService; - @Transactional public MailResponseDto saveMember(RegisterManagerRequestDto requestDto){ validateNickname(requestDto.nickname());