diff --git a/src/main/java/com/yam/app/member/domain/MemberReader.java b/src/main/java/com/yam/app/member/domain/MemberReader.java index 87eb3bf..ba0565a 100644 --- a/src/main/java/com/yam/app/member/domain/MemberReader.java +++ b/src/main/java/com/yam/app/member/domain/MemberReader.java @@ -4,7 +4,7 @@ import java.util.Optional; public interface MemberReader { - Optional findByNickname(String nickname); + boolean existsByNickname(String nickname); Optional findById(Long memberId); } diff --git a/src/main/java/com/yam/app/member/domain/MemberRepository.java b/src/main/java/com/yam/app/member/domain/MemberRepository.java index 6291955..12bbb2e 100644 --- a/src/main/java/com/yam/app/member/domain/MemberRepository.java +++ b/src/main/java/com/yam/app/member/domain/MemberRepository.java @@ -2,7 +2,7 @@ package com.yam.app.member.domain; public interface MemberRepository { - void save(Member entity); + Long save(Member entity); void update(Member entity); } diff --git a/src/main/java/com/yam/app/member/infrastructure/MemberEventListener.java b/src/main/java/com/yam/app/member/infrastructure/MemberEventListener.java index cf800cb..a7b8bd4 100644 --- a/src/main/java/com/yam/app/member/infrastructure/MemberEventListener.java +++ b/src/main/java/com/yam/app/member/infrastructure/MemberEventListener.java @@ -6,6 +6,7 @@ import com.yam.app.member.domain.MemberReader; import com.yam.app.member.domain.MemberRepository; import com.yam.app.member.domain.RegisterAccountConfirmEvent; import com.yam.app.member.domain.UpdateAccountEvent; +import java.util.UUID; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; @@ -28,10 +29,14 @@ public class MemberEventListener { @EventListener public void handle(RegisterAccountConfirmEvent event) { var nickname = event.getEmail().split("@")[0]; - memberRepository.save(new Member(nickname, "temp.png")); - var member = memberReader.findByNickname(nickname) - .orElseThrow(IllegalArgumentException::new); - publisher.publishEvent(new GenerateMemberEvent(member.getId(), event.getEmail())); + Long savedEntityId; + if (memberReader.existsByNickname(nickname)) { + savedEntityId = memberRepository.save( + new Member(UUID.randomUUID().toString(), "temp.png")); + } else { + savedEntityId = memberRepository.save(new Member(nickname, "temp.png")); + } + publisher.publishEvent(new GenerateMemberEvent(savedEntityId, event.getEmail())); } @EventListener diff --git a/src/main/java/com/yam/app/member/infrastructure/MybatisMemberRepository.java b/src/main/java/com/yam/app/member/infrastructure/MybatisMemberRepository.java index a2e5a7d..2d540b3 100644 --- a/src/main/java/com/yam/app/member/infrastructure/MybatisMemberRepository.java +++ b/src/main/java/com/yam/app/member/infrastructure/MybatisMemberRepository.java @@ -18,8 +18,8 @@ public final class MybatisMemberRepository implements MemberRepository, MemberRe } @Override - public Optional findByNickname(String nickname) { - return template.getMapper(MemberReader.class).findByNickname(nickname); + public boolean existsByNickname(String nickname) { + return template.getMapper(MemberReader.class).existsByNickname(nickname); } @Override @@ -28,12 +28,13 @@ public final class MybatisMemberRepository implements MemberRepository, MemberRe } @Override - public void save(Member entity) { + public Long save(Member entity) { int result = template.insert(SAVE_FQCN, entity); if (result != 1) { throw new IllegalStateException(String.format( "Unintentionally, more records were saved than expected. : %s", entity)); } + return entity.getId(); } @Override diff --git a/src/main/java/com/yam/app/member/presentation/empty.txt b/src/main/java/com/yam/app/member/presentation/empty.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml deleted file mode 100644 index 8b0b604..0000000 --- a/src/main/resources/log4j2.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex - - - - - - - - - - - ${LOG_PATTERN} - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/mapper/xml/MemberCommandMapper.xml b/src/main/resources/mapper/xml/MemberCommandMapper.xml index 6d6b8b6..c15bdeb 100644 --- a/src/main/resources/mapper/xml/MemberCommandMapper.xml +++ b/src/main/resources/mapper/xml/MemberCommandMapper.xml @@ -7,6 +7,9 @@ INSERT INTO member (nickname, image, status) VALUES (#{nickname}, #{image}, #{status}) + + SELECT LAST_INSERT_ID() + diff --git a/src/main/resources/mapper/xml/MemberQueryMapper.xml b/src/main/resources/mapper/xml/MemberQueryMapper.xml index aff099f..06a3b3c 100644 --- a/src/main/resources/mapper/xml/MemberQueryMapper.xml +++ b/src/main/resources/mapper/xml/MemberQueryMapper.xml @@ -13,4 +13,8 @@ SELECT * FROM member WHERE id = #{memberId} + + diff --git a/src/main/resources/schema-mysql.sql b/src/main/resources/schema-mysql.sql index 8f90f2a..92ea5bb 100644 --- a/src/main/resources/schema-mysql.sql +++ b/src/main/resources/schema-mysql.sql @@ -3,7 +3,7 @@ create table member id bigint not null auto_increment, nickname varchar(255) not null, image varchar(255) not null, - status varchar(255) not null, + status varchar(8) not null, primary key (id) ) engine=InnoDB; @@ -12,18 +12,17 @@ create table account id bigint not null auto_increment, email varchar(255) not null, email_check_token varchar(255), - email_check_token_generated_at timestamp, + email_check_token_generated_at datetime(6), email_verified boolean not null, - joined_at timestamp, - last_modified_at timestamp, - role varchar(255) not null, + joined_at datetime(6), + last_modified_at datetime(6), + role varchar(10) not null, password varchar(255) not null, withdraw boolean not null, - withdrawal_at timestamp, + withdrawal_at datetime(6), member_id bigint, - status varchar(255) not null, - primary key (id), - foreign key (member_id) references member (id) + status varchar(8) not null, + primary key (id) ) engine=InnoDB; create table tag @@ -37,14 +36,13 @@ create table article ( id bigint not null auto_increment, content varchar(255) not null, - created_at timestamp, + created_at datetime(6), image varchar(255) not null, - modified_at timestamp, - status varchar(255) not null, + modified_at datetime(6), + status varchar(8) not null, title varchar(255) not null, member_id bigint, - primary key (id), - foreign key (member_id) references member (id) + primary key (id) ) engine=InnoDB; create table article_likes @@ -52,9 +50,7 @@ create table article_likes id bigint not null auto_increment, article_id bigint, member_id bigint, - primary key (id), - foreign key (member_id) references member (id), - foreign key (article_id) references article (id) + primary key (id) ) engine=InnoDB; create table article_tag @@ -62,23 +58,19 @@ create table article_tag id bigint not null auto_increment, article_id bigint not null, tag_id bigint not null, - primary key (id), - foreign key (article_id) references article (id), - foreign key (tag_id) references tag (id) + primary key (id) ) engine=InnoDB; create table comment ( id bigint not null auto_increment, content varchar(255) not null, - created_at timestamp, - modified_at timestamp, - status varchar(255), + created_at datetime(6), + modified_at datetime(6), + status varchar(8), article_id bigint, member_id bigint, - primary key (id), - foreign key (member_id) references member (id), - foreign key (article_id) references article (id) + primary key (id) ) engine=InnoDB; create table comment_likes @@ -86,14 +78,13 @@ create table comment_likes id bigint not null auto_increment, comment_id bigint, member_id bigint, - primary key (id), - foreign key (member_id) references member (id), - foreign key (comment_id) references comment (id) + primary key (id) ) engine=InnoDB; +create index title_idx on article (title); alter table account add constraint UK_q0uja26qgu1atulenwup9rxyr unique (email); alter table tag add constraint UK_1wdpsed5kna2y38hnbgrnhi5b unique (name); -alter table article - add constraint UK_571gx7oqo5xpmgocegaidlcu9 unique (title); +alter table member + add constraint UK_gc3jmn7c2abyo3wf6syln5t2i unique (nickname); diff --git a/src/test/java/com/yam/app/integration/AccountIntegrationTests.java b/src/test/java/com/yam/app/integration/AccountIntegrationTests.java index 413fc44..07ec985 100644 --- a/src/test/java/com/yam/app/integration/AccountIntegrationTests.java +++ b/src/test/java/com/yam/app/integration/AccountIntegrationTests.java @@ -66,6 +66,25 @@ final class AccountIntegrationTests extends AbstractIntegrationTests { .andExpect(redirectedUrl(EMAIL_CONFIRM_SUCCESS_REDIRECT_URI)); } + @Test + @DisplayName("이메일 검증 후 회워 정보 기입에서, 닉네임이 동일한 경우" + + "랜덤한 값을 이어붙여서 저장하도록하는 시나리오 테스트") + void duplicate_email_and_token_verify_request_in_correctly() throws Exception { + // Act + final var actions = mockMvc.perform(get(EMAIL_CONFIRM) + .accept(MediaType.APPLICATION_JSON) + .contentType(MediaType.APPLICATION_JSON) + .param("token", "emailchecktoken") + .param("email", "jiwonDev@naver.com") + ); + + // Assert + actions + .andDo(print()) + .andExpect(status().isSeeOther()) + .andExpect(redirectedUrl(EMAIL_CONFIRM_SUCCESS_REDIRECT_URI)); + } + @Test @DisplayName("로그인에 적절한 파라미터를 입력하여, 성공하고 " + "이후 자신의 정보를 조회하는 시나리오 테스트.") diff --git a/src/test/resources/sql/ddl.sql b/src/test/resources/sql/ddl.sql index a5eca54..92ea5bb 100644 --- a/src/test/resources/sql/ddl.sql +++ b/src/test/resources/sql/ddl.sql @@ -1,82 +1,90 @@ -create table account ( - id bigint generated by default as identity, +create table member +( + id bigint not null auto_increment, + nickname varchar(255) not null, + image varchar(255) not null, + status varchar(8) not null, + primary key (id) +) engine=InnoDB; + +create table account +( + id bigint not null auto_increment, email varchar(255) not null, email_check_token varchar(255), - email_check_token_generated_at timestamp, + email_check_token_generated_at datetime(6), email_verified boolean not null, - joined_at timestamp, - last_modified_at timestamp, - role varchar(255) not null, + joined_at datetime(6), + last_modified_at datetime(6), + role varchar(10) not null, password varchar(255) not null, withdraw boolean not null, - withdrawal_at timestamp, + withdrawal_at datetime(6), member_id bigint, - status varchar(255) not null, + status varchar(8) not null, primary key (id) -); +) engine=InnoDB; -create table member ( - id bigint generated by default as identity, - nickname varchar(255) not null, - image varchar(255) not null, - status varchar(255) not null, - primary key (id) -); - -create table article ( - id bigint generated by default as identity, - content varchar(255) not null, - created_at timestamp, - image varchar(255) not null, - modified_at timestamp, - status varchar(255) not null, - title varchar(255) not null, - member_id bigint, -primary key (id)); - -create table article_likes ( - id bigint generated by default as identity, - article_id bigint, - member_id bigint, -primary key (id)); - -create table article_tag ( - id bigint generated by default as identity, - article_id bigint not null, - tag_id bigint not null, -primary key (id)); - -create table comment ( - id bigint generated by default as identity, - content varchar(255) not null, - created_at timestamp, - modified_at timestamp, - status varchar(255), - article_id bigint, - member_id bigint, -primary key (id)); - -create table comment_likes ( - id bigint generated by default as identity, - comment_id bigint, - member_id bigint, -primary key (id)); - -create table tag ( - id bigint generated by default as identity, +create table tag +( + id bigint not null auto_increment, name varchar(255) not null, -primary key (id)); + primary key (id) +) engine=InnoDB; -alter table account add constraint UK_q0uja26qgu1atulenwup9rxyr unique (email); -alter table account add constraint FKr5j0huynd7nsv1s7e9vb8qvwo foreign key (member_id) references member; -alter table tag add constraint UK_1wdpsed5kna2y38hnbgrnhi5b unique (name); -alter table article add constraint UK_571gx7oqo5xpmgocegaidlcu9 unique (title); -alter table article add constraint FK6l9vkfd5ixw8o8kph5rj1k7gu foreign key (member_id) references member; -alter table article_likes add constraint FK1wt0ww82gfxkuxw3ghxmp55xy foreign key (article_id) references article; -alter table article_likes add constraint FKkipxs7p8nrjd4537f3k8rexh5 foreign key (member_id) references member; -alter table article_tag add constraint FKenqeees0y8hkm7x1p1ittuuye foreign key (article_id) references article; -alter table article_tag add constraint FKesqp7s9jj2wumlnhssbme5ule foreign key (tag_id) references tag; -alter table comment add constraint FK5yx0uphgjc6ik6hb82kkw501y foreign key (article_id) references article; -alter table comment add constraint FKmrrrpi513ssu63i2783jyiv9m foreign key (member_id) references member; -alter table comment_likes add constraint FKd0epu3dcjc57pwe7lt5jgfqsi foreign key (comment_id) references comment; -alter table comment_likes add constraint FK7mxs5jtimpj71miv2r0fp6r8p foreign key (member_id) references member; +create table article +( + id bigint not null auto_increment, + content varchar(255) not null, + created_at datetime(6), + image varchar(255) not null, + modified_at datetime(6), + status varchar(8) not null, + title varchar(255) not null, + member_id bigint, + primary key (id) +) engine=InnoDB; + +create table article_likes +( + id bigint not null auto_increment, + article_id bigint, + member_id bigint, + primary key (id) +) engine=InnoDB; + +create table article_tag +( + id bigint not null auto_increment, + article_id bigint not null, + tag_id bigint not null, + primary key (id) +) engine=InnoDB; + +create table comment +( + id bigint not null auto_increment, + content varchar(255) not null, + created_at datetime(6), + modified_at datetime(6), + status varchar(8), + article_id bigint, + member_id bigint, + primary key (id) +) engine=InnoDB; + +create table comment_likes +( + id bigint not null auto_increment, + comment_id bigint, + member_id bigint, + primary key (id) +) engine=InnoDB; + +create index title_idx on article (title); +alter table account + add constraint UK_q0uja26qgu1atulenwup9rxyr unique (email); +alter table tag + add constraint UK_1wdpsed5kna2y38hnbgrnhi5b unique (name); +alter table member + add constraint UK_gc3jmn7c2abyo3wf6syln5t2i unique (nickname); diff --git a/src/test/resources/sql/dml.sql b/src/test/resources/sql/dml.sql index 0ca0319..3e6616c 100644 --- a/src/test/resources/sql/dml.sql +++ b/src/test/resources/sql/dml.sql @@ -8,6 +8,11 @@ insert into account(email, email_check_token, email_check_token_generated_at, em values ('jiwonDev@gmail.com', 'emailchecktoken', now(), false, now(), now(), 'password!', false, 'DEFAULT', 'ALIVE'); +insert into account(email, email_check_token, email_check_token_generated_at, email_verified, + joined_at, last_modified_at, password, withdraw, role, status) +values ('jiwonDev@naver.com', 'emailchecktoken', now(), false, now(), now(), 'password!', + false, 'DEFAULT', 'ALIVE'); + insert into account(email, email_check_token, email_check_token_generated_at, email_verified, joined_at, last_modified_at, password, withdraw, role, member_id, status) values ('rebwon@gmail.com', 'emailchecktoken1', now(), true, now(), now(),