diff --git a/src/main/java/com/yam/app/account/application/AccountFacade.java b/src/main/java/com/yam/app/account/application/AccountFacade.java index 9a077e4..0e85c1b 100644 --- a/src/main/java/com/yam/app/account/application/AccountFacade.java +++ b/src/main/java/com/yam/app/account/application/AccountFacade.java @@ -38,9 +38,8 @@ public class AccountFacade { @Transactional public void register(RegisterAccountCommand command) { - var entity = registerProcessor.process( + var entity = registerProcessor.register( command.getEmail(), - command.getNickname(), command.getPassword() ); publisher.publishEvent(new RegisterAccountEvent(entity)); diff --git a/src/main/java/com/yam/app/account/application/AccountTranslator.java b/src/main/java/com/yam/app/account/application/AccountTranslator.java index 3c7340d..f86630b 100644 --- a/src/main/java/com/yam/app/account/application/AccountTranslator.java +++ b/src/main/java/com/yam/app/account/application/AccountTranslator.java @@ -9,6 +9,7 @@ final class AccountTranslator { public AccountResponse toResponse(Account entity) { return new AccountResponse(entity.getId(), entity.getEmail(), - entity.getNickname()); + entity.isEmailVerified(), entity.getJoinedAt(), entity.getLastModifiedAt(), + entity.getWithdrawalAt(), entity.isWithdraw(), entity.getRole().name()); } } diff --git a/src/main/java/com/yam/app/account/domain/Account.java b/src/main/java/com/yam/app/account/domain/Account.java index 8af4af4..6b90b78 100644 --- a/src/main/java/com/yam/app/account/domain/Account.java +++ b/src/main/java/com/yam/app/account/domain/Account.java @@ -11,7 +11,6 @@ public final class Account { private Long id; private String email; - private String nickname; private String password; private String emailCheckToken; private LocalDateTime emailCheckTokenGeneratedAt; @@ -22,15 +21,14 @@ public final class Account { private boolean withdraw = false; private Role role; - private Account(String email, String nickname, String password) { + private Account(String email, String password) { this.email = email; - this.nickname = nickname; this.password = password; this.role = Role.DEFAULT; } - public static Account of(String email, String nickname, String password) { - Account account = new Account(email, nickname, password); + public static Account of(String email, String password) { + Account account = new Account(email, password); account.generateEmailCheckToken(); return account; } diff --git a/src/main/java/com/yam/app/account/domain/AccountReader.java b/src/main/java/com/yam/app/account/domain/AccountReader.java index 49a9b77..85428c4 100644 --- a/src/main/java/com/yam/app/account/domain/AccountReader.java +++ b/src/main/java/com/yam/app/account/domain/AccountReader.java @@ -6,7 +6,5 @@ public interface AccountReader { boolean existsByEmail(String email); - boolean existsByNickname(String nickname); - Optional findByEmail(String email); } diff --git a/src/main/java/com/yam/app/account/domain/RegisterAccountProcessor.java b/src/main/java/com/yam/app/account/domain/RegisterAccountProcessor.java index 9c3b894..d82a21a 100644 --- a/src/main/java/com/yam/app/account/domain/RegisterAccountProcessor.java +++ b/src/main/java/com/yam/app/account/domain/RegisterAccountProcessor.java @@ -15,17 +15,14 @@ public final class RegisterAccountProcessor { this.passwordEncrypter = passwordEncrypter; } - public Account process(String email, String nickname, String password) { + public Account register(String email, String password) { if (accountReader.existsByEmail(email)) { throw new DuplicateValueException(email); } - if (accountReader.existsByNickname(nickname)) { - throw new DuplicateValueException(nickname); - } String encodedPassword = passwordEncrypter.encode(password); - accountRepository.save(Account.of(email, nickname, encodedPassword)); + accountRepository.save(Account.of(email, encodedPassword)); return accountReader.findByEmail(email) .orElseThrow(() -> new AccountNotFoundException(email)); } diff --git a/src/main/java/com/yam/app/account/infrastructure/MailManager.java b/src/main/java/com/yam/app/account/infrastructure/MailManager.java index d17a504..7e3e165 100644 --- a/src/main/java/com/yam/app/account/infrastructure/MailManager.java +++ b/src/main/java/com/yam/app/account/infrastructure/MailManager.java @@ -28,7 +28,8 @@ final class MailManager { context.setVariable("link", "/api/accounts/authorize?token=" + newAccount.getEmailCheckToken() + "&email=" + newAccount.getEmail()); - context.setVariable("nickname", newAccount.getNickname()); + var username = newAccount.getEmail().split("@")[0]; + context.setVariable("username", username); context.setVariable("linkName", "이메일 인증하기"); context.setVariable("message", "YouAndMe 서비스를 사용하려면 링크를 클릭하세요."); context.setVariable("host", host); diff --git a/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java b/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java index 18bfe9d..3b8065c 100644 --- a/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java +++ b/src/main/java/com/yam/app/account/infrastructure/MybatisAccountRepository.java @@ -31,11 +31,6 @@ public final class MybatisAccountRepository implements AccountRepository, Accoun } } - @Override - public boolean existsByNickname(String nickname) { - return template.getMapper(AccountReader.class).existsByNickname(nickname); - } - @Override public void save(Account entity) { int result = template.insert(SAVE_FQCN, entity); diff --git a/src/main/java/com/yam/app/account/presentation/AccountResponse.java b/src/main/java/com/yam/app/account/presentation/AccountResponse.java index ccc98bc..d91ae86 100644 --- a/src/main/java/com/yam/app/account/presentation/AccountResponse.java +++ b/src/main/java/com/yam/app/account/presentation/AccountResponse.java @@ -1,5 +1,6 @@ package com.yam.app.account.presentation; +import java.time.LocalDateTime; import lombok.Getter; @Getter @@ -7,11 +8,23 @@ public final class AccountResponse { private final Long id; private final String email; - private final String nickname; + private final boolean emailVerified; + private final LocalDateTime joinedAt; + private final LocalDateTime lastModifiedAt; + private final LocalDateTime withdrawalAt; + private final boolean withdraw; + private final String role; - public AccountResponse(Long id, String email, String nickname) { + public AccountResponse(Long id, String email, boolean emailVerified, + LocalDateTime joinedAt, LocalDateTime lastModifiedAt, LocalDateTime withdrawalAt, + boolean withdraw, String role) { this.id = id; this.email = email; - this.nickname = nickname; + this.emailVerified = emailVerified; + this.joinedAt = joinedAt; + this.lastModifiedAt = lastModifiedAt; + this.withdrawalAt = withdrawalAt; + this.withdraw = withdraw; + this.role = role; } } diff --git a/src/main/java/com/yam/app/account/presentation/RegisterAccountCommand.java b/src/main/java/com/yam/app/account/presentation/RegisterAccountCommand.java index a4b1e0d..12271d1 100644 --- a/src/main/java/com/yam/app/account/presentation/RegisterAccountCommand.java +++ b/src/main/java/com/yam/app/account/presentation/RegisterAccountCommand.java @@ -12,9 +12,6 @@ public final class RegisterAccountCommand { @NotBlank private String email; - @NotBlank - private String nickname; - @NotBlank @Pattern(regexp = "^[A-Za-z1-9~!@#$%^&*()+|=]{8,12}$", message = "Please enter the password in English, numbers, " diff --git a/src/main/resources/mapper/xml/AccountCommandMapper.xml b/src/main/resources/mapper/xml/AccountCommandMapper.xml index 3ffc585..5df1aac 100644 --- a/src/main/resources/mapper/xml/AccountCommandMapper.xml +++ b/src/main/resources/mapper/xml/AccountCommandMapper.xml @@ -8,7 +8,6 @@ email_check_token = #{emailCheckToken}, email_check_token_generated_at = #{emailCheckTokenGeneratedAt}, email_verified = #{emailVerified}, - nickname = #{nickname}, password = #{password}, withdraw = #{withdraw}, joined_at = #{joinedAt}, @@ -20,9 +19,9 @@ INSERT INTO ACCOUNT(email, email_check_token, email_check_token_generated_at, email_verified, - nickname, password, withdraw, role) + password, withdraw, role) VALUES (#{email}, #{emailCheckToken}, #{emailCheckTokenGeneratedAt}, #{emailVerified}, - #{nickname}, #{password}, #{withdraw}, #{role}) + #{password}, #{withdraw}, #{role}) diff --git a/src/main/resources/sql/ddl.sql b/src/main/resources/sql/ddl.sql index f07d787..a0e4fb2 100644 --- a/src/main/resources/sql/ddl.sql +++ b/src/main/resources/sql/ddl.sql @@ -8,7 +8,6 @@ create table account joined_at timestamp, last_modified_at timestamp, role varchar(255) not null, - nickname varchar(255) not null, password varchar(255) not null, withdraw boolean not null, withdrawal_at timestamp, @@ -17,13 +16,11 @@ create table account alter table account add constraint UK_q0uja26qgu1atulenwup9rxyr unique (email); -alter table account - add constraint UK_s2a5omeaik0sruawqpvs18qfk unique (nickname); insert into account(email, email_check_token, email_check_token_generated_at, email_verified, - joined_at, last_modified_at, nickname, password, withdraw, role) -values ('jiwonDev@gmail.com', 'emailchecktoken', now(), false, now(), now(), 'jiwon', 'password!', + joined_at, last_modified_at, password, withdraw, role) +values ('jiwonDev@gmail.com', 'emailchecktoken', now(), false, now(), now(), 'password!', false, 'DEFAULT'), - ('loginCheck@gmail.com', 'emailchecktoken1', now(), true, now(), now(), 'loginCheck', + ('loginCheck@gmail.com', 'emailchecktoken1', now(), true, now(), now(), '$2a$10$EqbMbYB0vcZnuA5CClqa9uiLDnjA6pCjxn208ZchzA2q3ofqnkhcq', false, 'DEFAULT'); diff --git a/src/main/resources/templates/mail/check-token.html b/src/main/resources/templates/mail/check-token.html index 7920e03..bc8e4a6 100644 --- a/src/main/resources/templates/mail/check-token.html +++ b/src/main/resources/templates/mail/check-token.html @@ -6,7 +6,7 @@
-

안녕하세요.

+

안녕하세요.

메시지

diff --git a/src/test/java/com/yam/app/account/domain/ConfirmRegisterAccountProcessorTest.java b/src/test/java/com/yam/app/account/domain/ConfirmRegisterAccountProcessorTest.java index bc03846..693148b 100644 --- a/src/test/java/com/yam/app/account/domain/ConfirmRegisterAccountProcessorTest.java +++ b/src/test/java/com/yam/app/account/domain/ConfirmRegisterAccountProcessorTest.java @@ -22,7 +22,7 @@ final class ConfirmRegisterAccountProcessorTest { final var confirmRegisterAccountProcessor = new ConfirmRegisterAccountProcessor( accountReader, accountRepository, tokenVerifier); - accountRepository.save(Account.of("jiwonDev@gmail.com", "jiwon", "password!")); + accountRepository.save(Account.of("jiwonDev@gmail.com", "password!")); final var account = accountReader.findByEmail("jiwonDev@gmail.com").get(); return Arrays.asList( diff --git a/src/test/java/com/yam/app/account/domain/FakeAccountRepository.java b/src/test/java/com/yam/app/account/domain/FakeAccountRepository.java index 920af5d..160d280 100644 --- a/src/test/java/com/yam/app/account/domain/FakeAccountRepository.java +++ b/src/test/java/com/yam/app/account/domain/FakeAccountRepository.java @@ -28,12 +28,6 @@ public final class FakeAccountRepository implements AccountRepository, AccountRe data.putIfAbsent(entity.getId(), entity); } - @Override - public boolean existsByNickname(String nickname) { - return data.values().stream() - .anyMatch(account -> account.getNickname().equals(nickname)); - } - @Override public void save(Account entity) { entity.setId(idGenerator.incrementAndGet()); diff --git a/src/test/java/com/yam/app/account/domain/RegisterAccountProcessorTest.java b/src/test/java/com/yam/app/account/domain/RegisterAccountProcessorTest.java index fee95a5..03e46b6 100644 --- a/src/test/java/com/yam/app/account/domain/RegisterAccountProcessorTest.java +++ b/src/test/java/com/yam/app/account/domain/RegisterAccountProcessorTest.java @@ -24,7 +24,7 @@ final class RegisterAccountProcessorTest { return Arrays.asList( DynamicTest.dynamicTest("회원가입에 성공한다.", () -> { // Act - var account = processor.process("rebwon@gmail.com", "rebwon", "password!"); + var account = processor.register("rebwon@gmail.com", "password!"); // Assert assertThat(account.getId()).isEqualTo(1L); @@ -32,12 +32,7 @@ final class RegisterAccountProcessorTest { DynamicTest.dynamicTest("이메일 검증에 실패하여 예외를 리턴한다.", () -> { // Act & Assert assertThatExceptionOfType(DuplicateValueException.class) - .isThrownBy(() -> processor.process("rebwon@gmail.com", "rebwon", "password!")); - }), - DynamicTest.dynamicTest("닉네임 검증에 실패하여 예외를 리턴한다.", () -> { - // Act & Assert - assertThatExceptionOfType(DuplicateValueException.class) - .isThrownBy(() -> processor.process("kitty@gmail.com", "rebwon", "password!")); + .isThrownBy(() -> processor.register("rebwon@gmail.com", "password!")); }) ); } diff --git a/src/test/java/com/yam/app/account/domain/TokenVerifierTest.java b/src/test/java/com/yam/app/account/domain/TokenVerifierTest.java index e78f509..e4c7a1d 100644 --- a/src/test/java/com/yam/app/account/domain/TokenVerifierTest.java +++ b/src/test/java/com/yam/app/account/domain/TokenVerifierTest.java @@ -15,7 +15,7 @@ final class TokenVerifierTest { //Arrange var accountRepository = new FakeAccountRepository(); var tokenVerifier = new TokenVerifier(accountRepository); - accountRepository.save(Account.of("jiwon@gmail.com", "jiwon", "password!")); + accountRepository.save(Account.of("jiwon@gmail.com", "password!")); var account = accountRepository.findByEmail("jiwon@gmail.com").get(); //Act diff --git a/src/test/java/com/yam/app/account/infrastructure/SessionBasedLoginAccountProcessorTest.java b/src/test/java/com/yam/app/account/infrastructure/SessionBasedLoginAccountProcessorTest.java index 87bf6a6..7f8a52c 100644 --- a/src/test/java/com/yam/app/account/infrastructure/SessionBasedLoginAccountProcessorTest.java +++ b/src/test/java/com/yam/app/account/infrastructure/SessionBasedLoginAccountProcessorTest.java @@ -25,10 +25,8 @@ final class SessionBasedLoginAccountProcessorTest { var fakeObject = new FakeAccountRepository(); final var accountRepository = fakeObject; final var accountReader = fakeObject; - var accountNotYetConfirm = Account.of("hello1@naver.com", "hello1", - "password!"); - var accountCompleted = Account.of("hello@naver.com", "hello", - "password!"); + var accountNotYetConfirm = Account.of("hello1@naver.com", "password!"); + var accountCompleted = Account.of("hello@naver.com", "password!"); accountCompleted.completeRegister(); accountRepository.save(accountCompleted); accountRepository.save(accountNotYetConfirm); diff --git a/src/test/java/com/yam/app/account/integration/AccountIntegrationTests.java b/src/test/java/com/yam/app/account/integration/AccountIntegrationTests.java index 1471c41..0b951e4 100644 --- a/src/test/java/com/yam/app/account/integration/AccountIntegrationTests.java +++ b/src/test/java/com/yam/app/account/integration/AccountIntegrationTests.java @@ -57,7 +57,6 @@ final class AccountIntegrationTests { // Arrange var command = new RegisterAccountCommand(); command.setEmail("msolo021015@gmail.com"); - command.setNickname("rebwon"); command.setPassword("password!"); // Act @@ -100,6 +99,7 @@ final class AccountIntegrationTests { command.setEmail("loginCheck@gmail.com"); command.setPassword("password!"); + // Act & Assert mockMvc.perform(post(LOGIN) .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON) @@ -119,7 +119,9 @@ final class AccountIntegrationTests { .andExpect(jsonPath("$.message").doesNotExist()) .andExpect(jsonPath("$.data.id").isNumber()) .andExpect(jsonPath("$.data.email").isString()) - .andExpect(jsonPath("$.data.nickname").isString()); + .andExpect(jsonPath("$.data.emailVerified").value(true)) + .andExpect(jsonPath("$.data.withdraw").value(false)) + .andExpect(jsonPath("$.data.role").value("DEFAULT")); }); } diff --git a/src/test/java/com/yam/app/account/presentation/AccountCommandApiTests.java b/src/test/java/com/yam/app/account/presentation/AccountCommandApiTests.java index 41ae3f5..283bc4b 100644 --- a/src/test/java/com/yam/app/account/presentation/AccountCommandApiTests.java +++ b/src/test/java/com/yam/app/account/presentation/AccountCommandApiTests.java @@ -188,7 +188,6 @@ final class AccountCommandApiTests { // Arrange var command = new RegisterAccountCommand(); command.setEmail(arg); - command.setNickname(arg); command.setPassword(arg); // Act @@ -211,7 +210,6 @@ final class AccountCommandApiTests { // Arrange var command = new RegisterAccountCommand(); command.setEmail(arg); - command.setNickname(arg); command.setPassword(arg); // Act @@ -232,7 +230,6 @@ final class AccountCommandApiTests { // Arrange var command = new RegisterAccountCommand(); command.setEmail(arg); - command.setNickname("jiwon"); command.setPassword("password1!"); // Act @@ -253,7 +250,6 @@ final class AccountCommandApiTests { // Arrange var command = new RegisterAccountCommand(); command.setEmail("jiwon@naver.com"); - command.setNickname("jiwon"); command.setPassword(args); // Act