From ed42a88927199136fc86641336382f59705c8d78 Mon Sep 17 00:00:00 2001 From: Taeuk Um <42173347+umtuk@users.noreply.github.com> Date: Mon, 8 May 2023 20:22:23 +0900 Subject: [PATCH] #1 - Feat: Add Basic User's Register services and Email Validation System --- .../service/BasicUserAdminCommandService.java | 19 ++++ .../service/BasicUserAdminQueryService.java | 13 +++ .../service/BasicUserCommandService.java | 16 +++ .../basic/service/BasicUserQueryService.java | 15 +++ .../impl/DefaultBasicUserCommandService.java | 98 +++++++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminCommandService.java create mode 100644 src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminQueryService.java create mode 100644 src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserCommandService.java create mode 100644 src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserQueryService.java create mode 100644 src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/impl/DefaultBasicUserCommandService.java diff --git a/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminCommandService.java b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminCommandService.java new file mode 100644 index 0000000..470a6a5 --- /dev/null +++ b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminCommandService.java @@ -0,0 +1,19 @@ +package org.routemaster.api.auth.domain.user.domain.basic.service; + +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUser; +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUserReady; + +import java.util.List; + +public interface BasicUserAdminCommandService { + + BasicUser lockBasicUser(Long id); + BasicUser lockBasicUser(String username); + List lockAllBasicUser(Iterable ids); + BasicUser unlockBasicUser(Long id); + BasicUser unlockBasicUser(String username); + List unlockAllBasicUser(Iterable ids); + void deleteBasicUserReady(Long id); + void deleteBasicUserReady(String username); + void deleteAllBasicUserReady(Iterable ids); +} diff --git a/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminQueryService.java b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminQueryService.java new file mode 100644 index 0000000..736fb3d --- /dev/null +++ b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserAdminQueryService.java @@ -0,0 +1,13 @@ +package org.routemaster.api.auth.domain.user.domain.basic.service; + +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUser; +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUserReady; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.search.BasicUserReadySearchVO; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.search.BasicUserSearchVO; +import org.springframework.data.domain.Page; + +public interface BasicUserAdminQueryService { + + Page basicUserPage(BasicUserSearchVO searchVO); + Page basicUserReadyPage(BasicUserReadySearchVO searchVO); +} diff --git a/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserCommandService.java b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserCommandService.java new file mode 100644 index 0000000..d301dac --- /dev/null +++ b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserCommandService.java @@ -0,0 +1,16 @@ +package org.routemaster.api.auth.domain.user.domain.basic.service; + +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUser; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.create.BasicUserCreateVO; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.details.BasicUserDetailsSecuredResponseVO; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.response.BasicUserReadySecuredResponseVO; + +public interface BasicUserCommandService { + + BasicUserReadySecuredResponseVO registerBasicUser(BasicUserCreateVO createVO); + BasicUserDetailsSecuredResponseVO validateRegisterBasicUser(Long id, String validationCode); + BasicUser updatePassword(Long id, String password); + BasicUser updatePassword(String username, String password); + BasicUser deleteBasicUser(Long id); + BasicUser deleteBasicUser(String username); +} diff --git a/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserQueryService.java b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserQueryService.java new file mode 100644 index 0000000..374ccf9 --- /dev/null +++ b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/BasicUserQueryService.java @@ -0,0 +1,15 @@ +package org.routemaster.api.auth.domain.user.domain.basic.service; + +import org.routemaster.api.auth.domain.user.data.BaseUser; +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUser; +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUserReady; + +import java.util.List; + +public interface BasicUserQueryService { + + BasicUser basicUserDetails(Long id); + BasicUser basicUserDetails(String username); + BasicUserReady basicUserReadyDetails(Long id); + BasicUserReady basicUserReadyDetails(String username); +} diff --git a/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/impl/DefaultBasicUserCommandService.java b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/impl/DefaultBasicUserCommandService.java new file mode 100644 index 0000000..0f94daa --- /dev/null +++ b/src/main/java/org/routemaster/api/auth/domain/user/domain/basic/service/impl/DefaultBasicUserCommandService.java @@ -0,0 +1,98 @@ +package org.routemaster.api.auth.domain.user.domain.basic.service.impl; + +import jakarta.mail.MessagingException; +import jakarta.mail.internet.MimeMessage; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUser; +import org.routemaster.api.auth.domain.user.domain.basic.data.BasicUserReady; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.create.BasicUserCreateVO; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.details.BasicUserDetailsSecuredResponseVO; +import org.routemaster.api.auth.domain.user.domain.basic.data.vo.response.BasicUserReadySecuredResponseVO; +import org.routemaster.api.auth.domain.user.domain.basic.persistence.BasicUserReadyRepository; +import org.routemaster.api.auth.domain.user.domain.basic.persistence.BasicUserRepository; +import org.routemaster.api.auth.domain.user.domain.basic.service.BasicUserCommandService; +import org.routemaster.api.auth.domain.user.domain.basic.util.email.BasicUserValidationMailUtils; +import org.routemaster.api.auth.domain.user.domain.basic.util.mapper.BasicUserReadyMapper; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +@Service +@RequiredArgsConstructor +public class DefaultBasicUserCommandService implements BasicUserCommandService { + + private final BasicUserRepository basicUserRepository; + private final BasicUserReadyRepository basicUserReadyRepository; + private final BasicUserReadyMapper basicUserReadyMapper; + private final BasicUserValidationMailUtils basicUserValidationMailUtils; + private final JavaMailSender javaMailSender; + + @Override + @Transactional + public BasicUserReadySecuredResponseVO registerBasicUser(BasicUserCreateVO createVO) { + BasicUserReady forCreate = basicUserReadyMapper.fromCreateVO(createVO); + BasicUserReady saved = basicUserReadyRepository.save(forCreate); + sendValidationCode(saved); + Map meta = createRegisterBasicUserMetadata(saved); + return basicUserReadyMapper.toBasicUserReadySecuredResponseVO(saved, meta); + } + + @Async + void sendValidationCode(BasicUserReady basicUserReady) { + String email = basicUserReady.getUsername(); + MimeMessage message = javaMailSender.createMimeMessage(); + try { + MimeMessageHelper messageHelper = new MimeMessageHelper(message, true, "UTF-8"); + + messageHelper.setTo(email); + messageHelper.setSubject(basicUserValidationMailUtils.createSubject(basicUserReady)); + messageHelper.setText(basicUserValidationMailUtils.createText(basicUserReady), true); + } catch (MessagingException e) { + throw new RuntimeException(e); + } + + javaMailSender.send(message); + } + + private Map createRegisterBasicUserMetadata(BasicUserReady basicUserReady) { + Map meta = new HashMap<>(); + return meta; + } + + @Override + @Transactional + public BasicUserDetailsSecuredResponseVO validateRegisterBasicUser(Long id, String validationCode) { + return null; + } + + @Override + @Transactional + public BasicUser updatePassword(Long id, String password) { + return null; + } + + @Override + @Transactional + public BasicUser updatePassword(String username, String password) { + return null; + } + + @Override + @Transactional + public BasicUser deleteBasicUser(Long id) { + return null; + } + + @Override + @Transactional + public BasicUser deleteBasicUser(String username) { + return null; + } +}