From a833ea9ac862d28900ac65ebba46bba4a22cdac4 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Wed, 9 Jul 2025 22:43:00 +0900 Subject: [PATCH 01/36] =?UTF-8?q?[refactor]=20Tag=EB=A5=BC=20Feed=EC=9D=98?= =?UTF-8?q?=20=EB=B0=B8=EB=A5=98=20=ED=83=80=EC=9E=85=20=EA=B0=9D=EC=B2=B4?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20(#52)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/feed/adapter/out/mapper/FeedMapper.java | 12 +++++++++++- .../thip/feed/adapter/out/mapper/TagMapper.java | 6 ------ src/main/java/konkuk/thip/feed/domain/Feed.java | 16 ++++++++++++++++ src/main/java/konkuk/thip/feed/domain/Tag.java | 12 +++--------- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java b/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java index 4566dc332..819685516 100644 --- a/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java +++ b/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java @@ -2,13 +2,20 @@ import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; import konkuk.thip.feed.adapter.out.jpa.FeedJpaEntity; +import konkuk.thip.feed.adapter.out.jpa.TagJpaEntity; import konkuk.thip.feed.domain.Feed; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.util.List; + @Component +@RequiredArgsConstructor public class FeedMapper { + private final TagMapper tagMapper; + public FeedJpaEntity toJpaEntity(Feed feed, UserJpaEntity userJpaEntity, BookJpaEntity bookJpaEntity) { return FeedJpaEntity.builder() .content(feed.getContent()) @@ -19,7 +26,7 @@ public FeedJpaEntity toJpaEntity(Feed feed, UserJpaEntity userJpaEntity, BookJpa .build(); } - public Feed toDomainEntity(FeedJpaEntity feedJpaEntity) { + public Feed toDomainEntity(FeedJpaEntity feedJpaEntity, List tagJpaEntityList) { return Feed.builder() .id(feedJpaEntity.getPostId()) .content(feedJpaEntity.getContent()) @@ -27,6 +34,9 @@ public Feed toDomainEntity(FeedJpaEntity feedJpaEntity) { .isPublic(feedJpaEntity.getIsPublic()) .reportCount(feedJpaEntity.getReportCount()) .targetBookId(feedJpaEntity.getBookJpaEntity().getBookId()) + .tagList(tagJpaEntityList.stream() + .map(tagMapper::toDomainEntity) + .toList()) .createdAt(feedJpaEntity.getCreatedAt()) .modifiedAt(feedJpaEntity.getModifiedAt()) .status(feedJpaEntity.getStatus()) diff --git a/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java b/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java index 20e96cb88..4d9806cad 100644 --- a/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java +++ b/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java @@ -19,13 +19,7 @@ public TagJpaEntity toJpaEntity(Tag tag, PostJpaEntity postJpaEntity, CategoryJp public Tag toDomainEntity(TagJpaEntity tagJpaEntity) { return Tag.builder() - .id(tagJpaEntity.getTagId()) .value(tagJpaEntity.getValue()) - .targetPostId(tagJpaEntity.getPostJpaEntity().getPostId()) - .categoryId(tagJpaEntity.getCategoryJpaEntity().getCategoryId()) - .createdAt(tagJpaEntity.getCreatedAt()) - .modifiedAt(tagJpaEntity.getModifiedAt()) - .status(tagJpaEntity.getStatus()) .build(); } } diff --git a/src/main/java/konkuk/thip/feed/domain/Feed.java b/src/main/java/konkuk/thip/feed/domain/Feed.java index 50ca5414a..8a25b238a 100644 --- a/src/main/java/konkuk/thip/feed/domain/Feed.java +++ b/src/main/java/konkuk/thip/feed/domain/Feed.java @@ -4,6 +4,8 @@ import lombok.Getter; import lombok.experimental.SuperBuilder; +import java.util.List; + @Getter @SuperBuilder public class Feed extends BaseDomainEntity { @@ -20,4 +22,18 @@ public class Feed extends BaseDomainEntity { private Long targetBookId; + private List tagList; + + public static Feed withoutId(String content, Long creatorId, Boolean isPublic, int reportCount, Long targetBookId, List tagList) { + return Feed.builder() + .id(null) + .content(content) + .creatorId(creatorId) + .isPublic(isPublic) + .reportCount(reportCount) + .targetBookId(targetBookId) + .tagList(tagList) + .build(); + } + } diff --git a/src/main/java/konkuk/thip/feed/domain/Tag.java b/src/main/java/konkuk/thip/feed/domain/Tag.java index 81bfe4ce0..152e70a43 100644 --- a/src/main/java/konkuk/thip/feed/domain/Tag.java +++ b/src/main/java/konkuk/thip/feed/domain/Tag.java @@ -1,18 +1,12 @@ package konkuk.thip.feed.domain; -import konkuk.thip.common.entity.BaseDomainEntity; +import lombok.Builder; import lombok.Getter; -import lombok.experimental.SuperBuilder; @Getter -@SuperBuilder -public class Tag extends BaseDomainEntity { - - private Long id; +@Builder +public class Tag { private String value; - private Long targetPostId; - - private Long categoryId; } From f08bfe8cbd0ce9eca58ab581390c740595070bc1 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Wed, 9 Jul 2025 22:43:31 +0900 Subject: [PATCH 02/36] =?UTF-8?q?[refactor]=20Feed=20Tag=EC=9D=98=20?= =?UTF-8?q?=EA=B4=80=EA=B3=84=ED=85=8C=EC=9D=B4=EB=B8=94=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/out/jpa/FeedTagJpaEntity.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedTagJpaEntity.java diff --git a/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedTagJpaEntity.java b/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedTagJpaEntity.java new file mode 100644 index 000000000..3f7f27d38 --- /dev/null +++ b/src/main/java/konkuk/thip/feed/adapter/out/jpa/FeedTagJpaEntity.java @@ -0,0 +1,26 @@ +package konkuk.thip.feed.adapter.out.jpa; + +import jakarta.persistence.*; +import konkuk.thip.common.entity.BaseJpaEntity; +import lombok.*; + +@Entity +@Table(name = "feed_tags") +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor +@Builder +public class FeedTagJpaEntity extends BaseJpaEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long feedTagId; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "post_id", nullable = false) + private FeedJpaEntity feedJpaEntity; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "tag_id", nullable = false) + private TagJpaEntity tagJpaEntity; +} From e59bc096eba0ed756ef628bedb74605b5bf5e5a3 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Wed, 9 Jul 2025 22:59:26 +0900 Subject: [PATCH 03/36] =?UTF-8?q?[refactor]=20Tag=EC=95=88=EC=97=90=20TagN?= =?UTF-8?q?ame=20=EC=84=A0=EC=96=B8=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/common/exception/code/ErrorCode.java | 8 +++- .../feed/adapter/out/mapper/TagMapper.java | 5 ++- .../java/konkuk/thip/feed/domain/Tag.java | 8 +++- .../java/konkuk/thip/feed/domain/TagName.java | 40 +++++++++++++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/main/java/konkuk/thip/feed/domain/TagName.java diff --git a/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java b/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java index 753f0a867..b1cfc2444 100644 --- a/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java +++ b/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java @@ -101,7 +101,13 @@ public enum ErrorCode implements ResponseCode { /** * 150000 : Category error */ - CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, 150000, "존재하지 않는 CATEGORY 입니다.") + CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND, 150000, "존재하지 않는 CATEGORY 입니다."), + + /** + * 160000 : Feed error + */ + FEED_NOT_FOUND(HttpStatus.NOT_FOUND, 160000, "존재하지 않는 FEED 입니다."), + TAG_NAME_NOT_MATCH(HttpStatus.BAD_REQUEST, 160001, "일치하는 태그 이름이 없습니다.") ; diff --git a/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java b/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java index 4d9806cad..b135ab82f 100644 --- a/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java +++ b/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java @@ -2,6 +2,7 @@ import konkuk.thip.feed.adapter.out.jpa.TagJpaEntity; import konkuk.thip.feed.domain.Tag; +import konkuk.thip.feed.domain.TagName; import konkuk.thip.post.adapter.out.jpa.PostJpaEntity; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; import org.springframework.stereotype.Component; @@ -11,7 +12,7 @@ public class TagMapper { public TagJpaEntity toJpaEntity(Tag tag, PostJpaEntity postJpaEntity, CategoryJpaEntity categoryJpaEntity) { return TagJpaEntity.builder() - .value(tag.getValue()) + .value(tag.getValue().getTag()) .postJpaEntity(postJpaEntity) .categoryJpaEntity(categoryJpaEntity) .build(); @@ -19,7 +20,7 @@ public TagJpaEntity toJpaEntity(Tag tag, PostJpaEntity postJpaEntity, CategoryJp public Tag toDomainEntity(TagJpaEntity tagJpaEntity) { return Tag.builder() - .value(tagJpaEntity.getValue()) + .value(TagName.from(tagJpaEntity.getValue())) .build(); } } diff --git a/src/main/java/konkuk/thip/feed/domain/Tag.java b/src/main/java/konkuk/thip/feed/domain/Tag.java index 152e70a43..487a0631f 100644 --- a/src/main/java/konkuk/thip/feed/domain/Tag.java +++ b/src/main/java/konkuk/thip/feed/domain/Tag.java @@ -7,6 +7,12 @@ @Builder public class Tag { - private String value; + private TagName value; + + public static Tag from(String tagName) { + return Tag.builder() + .value(TagName.from(tagName)) + .build(); + } } diff --git a/src/main/java/konkuk/thip/feed/domain/TagName.java b/src/main/java/konkuk/thip/feed/domain/TagName.java new file mode 100644 index 000000000..4fea0ec99 --- /dev/null +++ b/src/main/java/konkuk/thip/feed/domain/TagName.java @@ -0,0 +1,40 @@ +package konkuk.thip.feed.domain; + +import konkuk.thip.common.exception.InvalidStateException; +import lombok.Getter; + +import static konkuk.thip.common.exception.code.ErrorCode.TAG_NAME_NOT_MATCH; + +@Getter +public enum TagName { + BOOK_RECOMMEND("책추천"), + TODAYS_BOOK("오늘의책"), + READING_LOG("독서기록"), + BOOK_REVIEW("책리뷰"), + QUOTE("책속한줄"), + BOOK_REPORT("독후감"), + LIFE_BOOK("내인생책"), + RE_READ("다시읽고싶은책"), + BOOK_TALK("북토크"), + BOOKSTAGRAM("책스타그램"), + NOVEL("소설추천"), + SELF_IMPROVEMENT("자기계발서"), + PHILOSOPHY("인문학책"), + SCIENCE("과학책"), + ECONOMY("경제책"); + + private final String tag; + + TagName(String tag) { + this.tag = tag; + } + + public static TagName from(String tag) { + for (TagName tagName : TagName.values()) { + if (tagName.tag.equalsIgnoreCase(tag)) { + return tagName; + } + } + throw new InvalidStateException(TAG_NAME_NOT_MATCH); + } +} From 9a82076164e7ecb193c8e595fab3ca8bb68d0eb4 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Wed, 9 Jul 2025 23:19:17 +0900 Subject: [PATCH 04/36] =?UTF-8?q?[refactor]=20TagMapper=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../feed/adapter/out/mapper/FeedMapper.java | 6 ++--- .../feed/adapter/out/mapper/TagMapper.java | 26 ------------------- 2 files changed, 3 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java diff --git a/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java b/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java index 819685516..bbd4dbbe4 100644 --- a/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java +++ b/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java @@ -4,6 +4,7 @@ import konkuk.thip.feed.adapter.out.jpa.FeedJpaEntity; import konkuk.thip.feed.adapter.out.jpa.TagJpaEntity; import konkuk.thip.feed.domain.Feed; +import konkuk.thip.feed.domain.Tag; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; @@ -14,8 +15,6 @@ @RequiredArgsConstructor public class FeedMapper { - private final TagMapper tagMapper; - public FeedJpaEntity toJpaEntity(Feed feed, UserJpaEntity userJpaEntity, BookJpaEntity bookJpaEntity) { return FeedJpaEntity.builder() .content(feed.getContent()) @@ -35,7 +34,8 @@ public Feed toDomainEntity(FeedJpaEntity feedJpaEntity, List tagJp .reportCount(feedJpaEntity.getReportCount()) .targetBookId(feedJpaEntity.getBookJpaEntity().getBookId()) .tagList(tagJpaEntityList.stream() - .map(tagMapper::toDomainEntity) + .map(TagJpaEntity::getValue) + .map(Tag::from) .toList()) .createdAt(feedJpaEntity.getCreatedAt()) .modifiedAt(feedJpaEntity.getModifiedAt()) diff --git a/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java b/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java deleted file mode 100644 index b135ab82f..000000000 --- a/src/main/java/konkuk/thip/feed/adapter/out/mapper/TagMapper.java +++ /dev/null @@ -1,26 +0,0 @@ -package konkuk.thip.feed.adapter.out.mapper; - -import konkuk.thip.feed.adapter.out.jpa.TagJpaEntity; -import konkuk.thip.feed.domain.Tag; -import konkuk.thip.feed.domain.TagName; -import konkuk.thip.post.adapter.out.jpa.PostJpaEntity; -import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; -import org.springframework.stereotype.Component; - -@Component -public class TagMapper { - - public TagJpaEntity toJpaEntity(Tag tag, PostJpaEntity postJpaEntity, CategoryJpaEntity categoryJpaEntity) { - return TagJpaEntity.builder() - .value(tag.getValue().getTag()) - .postJpaEntity(postJpaEntity) - .categoryJpaEntity(categoryJpaEntity) - .build(); - } - - public Tag toDomainEntity(TagJpaEntity tagJpaEntity) { - return Tag.builder() - .value(TagName.from(tagJpaEntity.getValue())) - .build(); - } -} From 438a9f2506f96a2eb6d7793c6087ecba35b46513 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Wed, 9 Jul 2025 23:51:30 +0900 Subject: [PATCH 05/36] =?UTF-8?q?[refactor]=20Alias=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EB=B0=B8=EB=A5=98=20=ED=83=80=EC=9E=85=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/common/exception/code/ErrorCode.java | 3 +- .../in/web/request/UserSignupRequest.java | 11 +++---- .../user/adapter/out/mapper/AliasMapper.java | 29 ------------------- .../user/adapter/out/mapper/UserMapper.java | 5 +++- .../port/in/dto/UserSignupCommand.java | 2 +- .../service/UserSignupService.java | 2 +- .../java/konkuk/thip/user/domain/Alias.java | 19 +++++++----- .../konkuk/thip/user/domain/AliasName.java | 29 +++++++++++++++++++ .../java/konkuk/thip/user/domain/User.java | 8 ++--- 9 files changed, 59 insertions(+), 49 deletions(-) delete mode 100644 src/main/java/konkuk/thip/user/adapter/out/mapper/AliasMapper.java create mode 100644 src/main/java/konkuk/thip/user/domain/AliasName.java diff --git a/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java b/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java index b1cfc2444..302d07f56 100644 --- a/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java +++ b/src/main/java/konkuk/thip/common/exception/code/ErrorCode.java @@ -30,6 +30,7 @@ public enum ErrorCode implements ResponseCode { * 60000 : alias error */ ALIAS_NOT_FOUND(HttpStatus.NOT_FOUND, 60001, "존재하지 않는 ALIAS 입니다."), + ALIAS_NAME_NOT_MATCH(HttpStatus.BAD_REQUEST, 60002, "일치하는 칭호 이름이 없습니다."), /** @@ -107,7 +108,7 @@ public enum ErrorCode implements ResponseCode { * 160000 : Feed error */ FEED_NOT_FOUND(HttpStatus.NOT_FOUND, 160000, "존재하지 않는 FEED 입니다."), - TAG_NAME_NOT_MATCH(HttpStatus.BAD_REQUEST, 160001, "일치하는 태그 이름이 없습니다.") + TAG_NAME_NOT_MATCH(HttpStatus.BAD_REQUEST, 160001, "일치하는 태그 이름이 없습니다."), ; diff --git a/src/main/java/konkuk/thip/user/adapter/in/web/request/UserSignupRequest.java b/src/main/java/konkuk/thip/user/adapter/in/web/request/UserSignupRequest.java index fe13a0804..fbe40ac17 100644 --- a/src/main/java/konkuk/thip/user/adapter/in/web/request/UserSignupRequest.java +++ b/src/main/java/konkuk/thip/user/adapter/in/web/request/UserSignupRequest.java @@ -1,12 +1,13 @@ package konkuk.thip.user.adapter.in.web.request; -import jakarta.validation.constraints.*; -import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import konkuk.thip.user.application.port.in.dto.UserSignupCommand; public record UserSignupRequest( - @NotNull(message = "aliasId는 필수입니다.") - Long aliasId, + @NotBlank(message = "aliasName은 필수입니다.") + String aliasName, @Pattern(regexp = "[가-힣a-zA-Z0-9]+", message = "닉네임은 한글, 영어, 숫자로만 구성되어야 합니다.(공백불가)") @Size(max = 10, message = "닉네임은 최대 10자 입니다.") @@ -14,7 +15,7 @@ public record UserSignupRequest( ) { public UserSignupCommand toCommand(String oAuth2Id) { return UserSignupCommand.builder() - .aliasId(aliasId) + .aliasName(aliasName) .nickname(nickname) .oauth2Id(oAuth2Id) .build(); diff --git a/src/main/java/konkuk/thip/user/adapter/out/mapper/AliasMapper.java b/src/main/java/konkuk/thip/user/adapter/out/mapper/AliasMapper.java deleted file mode 100644 index eac3e0f45..000000000 --- a/src/main/java/konkuk/thip/user/adapter/out/mapper/AliasMapper.java +++ /dev/null @@ -1,29 +0,0 @@ -package konkuk.thip.user.adapter.out.mapper; - -import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; -import konkuk.thip.user.domain.Alias; -import org.springframework.stereotype.Component; - -@Component -public class AliasMapper { - - public AliasJpaEntity toJpaEntity(Alias alias) { - return AliasJpaEntity.builder() - .value(alias.getValue()) - .imageUrl(alias.getImageUrl()) - .color(alias.getColor()) - .build(); - } - - public Alias toDomainEntity(AliasJpaEntity aliasJpaEntity) { - return Alias.builder() - .id(aliasJpaEntity.getAliasId()) - .value(aliasJpaEntity.getValue()) - .imageUrl(aliasJpaEntity.getImageUrl()) - .color(aliasJpaEntity.getColor()) - .createdAt(aliasJpaEntity.getCreatedAt()) - .modifiedAt(aliasJpaEntity.getModifiedAt()) - .status(aliasJpaEntity.getStatus()) - .build(); - } -} diff --git a/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java b/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java index 40ce8d0c3..72f50321e 100644 --- a/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java +++ b/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java @@ -3,6 +3,7 @@ import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; import konkuk.thip.user.adapter.out.jpa.UserRole; +import konkuk.thip.user.domain.Alias; import konkuk.thip.user.domain.User; import org.springframework.stereotype.Component; @@ -25,8 +26,10 @@ public User toDomainEntity(UserJpaEntity userJpaEntity) { .nickname(userJpaEntity.getNickname()) .imageUrl(userJpaEntity.getImageUrl()) .userRole(userJpaEntity.getRole().getType()) - .aliasId(userJpaEntity.getAliasForUserJpaEntity().getAliasId()) .oauth2Id(userJpaEntity.getOauth2Id()) + .alias(Alias.from(userJpaEntity.getAliasForUserJpaEntity().getValue(), + userJpaEntity.getAliasForUserJpaEntity().getImageUrl(), + userJpaEntity.getAliasForUserJpaEntity().getColor())) .createdAt(userJpaEntity.getCreatedAt()) .modifiedAt(userJpaEntity.getModifiedAt()) .status(userJpaEntity.getStatus()) diff --git a/src/main/java/konkuk/thip/user/application/port/in/dto/UserSignupCommand.java b/src/main/java/konkuk/thip/user/application/port/in/dto/UserSignupCommand.java index 0b23769e8..450a5a2e0 100644 --- a/src/main/java/konkuk/thip/user/application/port/in/dto/UserSignupCommand.java +++ b/src/main/java/konkuk/thip/user/application/port/in/dto/UserSignupCommand.java @@ -4,7 +4,7 @@ @Builder public record UserSignupCommand( - Long aliasId, + String aliasName, String nickname, String oauth2Id ) {} diff --git a/src/main/java/konkuk/thip/user/application/service/UserSignupService.java b/src/main/java/konkuk/thip/user/application/service/UserSignupService.java index 478ed31e4..cdf383369 100644 --- a/src/main/java/konkuk/thip/user/application/service/UserSignupService.java +++ b/src/main/java/konkuk/thip/user/application/service/UserSignupService.java @@ -23,7 +23,7 @@ public class UserSignupService implements UserSignupUseCase { @Override @Transactional public Long signup(UserSignupCommand command) { - Alias alias = aliasCommandPort.findById(command.aliasId()); + Alias alias = Alias.from(command.aliasName()); User user = User.withoutId( command.nickname(), alias.getImageUrl(), USER.getType(), alias.getId(), command.oauth2Id() ); diff --git a/src/main/java/konkuk/thip/user/domain/Alias.java b/src/main/java/konkuk/thip/user/domain/Alias.java index 76e8c599d..9bdbddafa 100644 --- a/src/main/java/konkuk/thip/user/domain/Alias.java +++ b/src/main/java/konkuk/thip/user/domain/Alias.java @@ -1,18 +1,23 @@ package konkuk.thip.user.domain; -import konkuk.thip.common.entity.BaseDomainEntity; +import lombok.Builder; import lombok.Getter; -import lombok.experimental.SuperBuilder; @Getter -@SuperBuilder -public class Alias extends BaseDomainEntity { +@Builder +public class Alias { - private Long id; - - private String value; + private AliasName value; private String imageUrl; private String color; + + public static Alias from(String value, String imageUrl, String color) { + return Alias.builder() + .value(AliasName.from(value)) + .imageUrl(imageUrl) + .color(color) + .build(); + } } diff --git a/src/main/java/konkuk/thip/user/domain/AliasName.java b/src/main/java/konkuk/thip/user/domain/AliasName.java new file mode 100644 index 000000000..fff541b09 --- /dev/null +++ b/src/main/java/konkuk/thip/user/domain/AliasName.java @@ -0,0 +1,29 @@ +package konkuk.thip.user.domain; + +import konkuk.thip.common.exception.InvalidStateException; +import konkuk.thip.common.exception.code.ErrorCode; +import lombok.Getter; + +@Getter +public enum AliasName { + WRITER("문학가"), + SCIENTIST("과학자"), + SOCIOLOGIST("사회학자"), + ARTIEST("예술가"), + PHILOSOPHER("철학자"); + + private final String value; + + AliasName(String value) { + this.value = value; + } + + public static AliasName from(String aliasName) { + for (AliasName name : AliasName.values()) { + if (name.value.equals(aliasName)) { + return name; + } + } + throw new InvalidStateException(ErrorCode.ALIAS_NAME_NOT_MATCH); + } +} diff --git a/src/main/java/konkuk/thip/user/domain/User.java b/src/main/java/konkuk/thip/user/domain/User.java index b19513dd7..533fe42fd 100644 --- a/src/main/java/konkuk/thip/user/domain/User.java +++ b/src/main/java/konkuk/thip/user/domain/User.java @@ -16,18 +16,18 @@ public class User extends BaseDomainEntity { private String userRole; - private Long aliasId; - private String oauth2Id; - public static User withoutId(String nickname, String imageUrl, String userRole, Long aliasId, String oauth2Id) { + private AliasName alias; + + public static User withoutId(String nickname, String imageUrl, String userRole, String oauth2Id, Alias alias) { return User.builder() .id(null) .nickname(nickname) .imageUrl(imageUrl) .userRole(userRole) - .aliasId(aliasId) .oauth2Id(oauth2Id) + .alias(alias) .build(); } From 178c42f7bc158458d23df732c23be75449c6b5d7 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 11:56:42 +0900 Subject: [PATCH 06/36] =?UTF-8?q?[refactor]=20User,=20Alias=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=EA=B5=AC=EC=A1=B0=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/thip/user/domain/Alias.java | 34 +++++++++++-------- .../konkuk/thip/user/domain/AliasName.java | 29 ---------------- .../java/konkuk/thip/user/domain/User.java | 7 ++-- 3 files changed, 22 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/konkuk/thip/user/domain/AliasName.java diff --git a/src/main/java/konkuk/thip/user/domain/Alias.java b/src/main/java/konkuk/thip/user/domain/Alias.java index 9bdbddafa..ffb906cb2 100644 --- a/src/main/java/konkuk/thip/user/domain/Alias.java +++ b/src/main/java/konkuk/thip/user/domain/Alias.java @@ -1,23 +1,29 @@ package konkuk.thip.user.domain; -import lombok.Builder; +import konkuk.thip.common.exception.InvalidStateException; +import konkuk.thip.common.exception.code.ErrorCode; import lombok.Getter; +import lombok.RequiredArgsConstructor; @Getter -@Builder -public class Alias { +@RequiredArgsConstructor +public enum Alias { + WRITER("문학가", "문학_color", "문학_image"), + SCIENTIST("과학자", "과학_color", "과학_image"), + SOCIOLOGIST("사회학자", "사회과학_color", "사회과학_image"), + ARTIEST("예술가", "예술_color", "예술_image"), + PHILOSOPHER("철학자", "철학_color", "철학_image"); - private AliasName value; + private final String value; + private final String color; + private final String imageUrl; - private String imageUrl; - - private String color; - - public static Alias from(String value, String imageUrl, String color) { - return Alias.builder() - .value(AliasName.from(value)) - .imageUrl(imageUrl) - .color(color) - .build(); + public static Alias from(String value) { + for (Alias alias : Alias.values()) { + if (alias.value.equals(value)) { + return alias; + } + } + throw new InvalidStateException(ErrorCode.ALIAS_NAME_NOT_MATCH); } } diff --git a/src/main/java/konkuk/thip/user/domain/AliasName.java b/src/main/java/konkuk/thip/user/domain/AliasName.java deleted file mode 100644 index fff541b09..000000000 --- a/src/main/java/konkuk/thip/user/domain/AliasName.java +++ /dev/null @@ -1,29 +0,0 @@ -package konkuk.thip.user.domain; - -import konkuk.thip.common.exception.InvalidStateException; -import konkuk.thip.common.exception.code.ErrorCode; -import lombok.Getter; - -@Getter -public enum AliasName { - WRITER("문학가"), - SCIENTIST("과학자"), - SOCIOLOGIST("사회학자"), - ARTIEST("예술가"), - PHILOSOPHER("철학자"); - - private final String value; - - AliasName(String value) { - this.value = value; - } - - public static AliasName from(String aliasName) { - for (AliasName name : AliasName.values()) { - if (name.value.equals(aliasName)) { - return name; - } - } - throw new InvalidStateException(ErrorCode.ALIAS_NAME_NOT_MATCH); - } -} diff --git a/src/main/java/konkuk/thip/user/domain/User.java b/src/main/java/konkuk/thip/user/domain/User.java index 533fe42fd..3de8ab730 100644 --- a/src/main/java/konkuk/thip/user/domain/User.java +++ b/src/main/java/konkuk/thip/user/domain/User.java @@ -12,19 +12,16 @@ public class User extends BaseDomainEntity { private String nickname; - private String imageUrl; - private String userRole; private String oauth2Id; - private AliasName alias; + private Alias alias; - public static User withoutId(String nickname, String imageUrl, String userRole, String oauth2Id, Alias alias) { + public static User withoutId(String nickname, String userRole, String oauth2Id, Alias alias) { return User.builder() .id(null) .nickname(nickname) - .imageUrl(imageUrl) .userRole(userRole) .oauth2Id(oauth2Id) .alias(alias) From 91726bd3565b9ffbc6f1c2bd35025d2263e810e9 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 11:57:11 +0900 Subject: [PATCH 07/36] =?UTF-8?q?[refactor]=20Alias=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EC=98=81=EC=86=8D=EC=84=B1=20=EC=BD=94=EB=93=9C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AliasCommandPersistenceAdapter.java | 27 ------------------- .../out/persistence/AliasJpaRepository.java | 4 +++ .../AliasQueryPersistenceAdapter.java | 18 ------------- .../port/out/AliasCommandPort.java | 8 ------ .../application/port/out/AliasQueryPort.java | 8 ------ 5 files changed, 4 insertions(+), 61 deletions(-) delete mode 100644 src/main/java/konkuk/thip/user/adapter/out/persistence/AliasCommandPersistenceAdapter.java delete mode 100644 src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryPersistenceAdapter.java delete mode 100644 src/main/java/konkuk/thip/user/application/port/out/AliasCommandPort.java delete mode 100644 src/main/java/konkuk/thip/user/application/port/out/AliasQueryPort.java diff --git a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasCommandPersistenceAdapter.java b/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasCommandPersistenceAdapter.java deleted file mode 100644 index 154feaf72..000000000 --- a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasCommandPersistenceAdapter.java +++ /dev/null @@ -1,27 +0,0 @@ -package konkuk.thip.user.adapter.out.persistence; - -import konkuk.thip.common.exception.EntityNotFoundException; -import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; -import konkuk.thip.user.adapter.out.mapper.AliasMapper; -import konkuk.thip.user.application.port.out.AliasCommandPort; -import konkuk.thip.user.domain.Alias; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -import static konkuk.thip.common.exception.code.ErrorCode.ALIAS_NOT_FOUND; - -@Repository -@RequiredArgsConstructor -public class AliasCommandPersistenceAdapter implements AliasCommandPort { - - private final AliasMapper aliasMapper; - private final AliasJpaRepository aliasJpaRepository; - - @Override - public Alias findById(Long aliasId) { - AliasJpaEntity aliasJpaEntity = aliasJpaRepository.findById(aliasId).orElseThrow( - () -> new EntityNotFoundException(ALIAS_NOT_FOUND)); - - return aliasMapper.toDomainEntity(aliasJpaEntity); - } -} diff --git a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasJpaRepository.java b/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasJpaRepository.java index 130df4c2c..2ba8d51ec 100644 --- a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasJpaRepository.java +++ b/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasJpaRepository.java @@ -3,5 +3,9 @@ import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface AliasJpaRepository extends JpaRepository, AliasQueryRepository { + + Optional findByValue(String value); } \ No newline at end of file diff --git a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryPersistenceAdapter.java b/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryPersistenceAdapter.java deleted file mode 100644 index 0fe88291d..000000000 --- a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryPersistenceAdapter.java +++ /dev/null @@ -1,18 +0,0 @@ -package konkuk.thip.user.adapter.out.persistence; - -import konkuk.thip.user.application.port.in.dto.UserViewAliasChoiceResult; -import konkuk.thip.user.application.port.out.AliasQueryPort; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Repository; - -@Repository -@RequiredArgsConstructor -public class AliasQueryPersistenceAdapter implements AliasQueryPort { - - private final AliasJpaRepository aliasJpaRepository; - - @Override - public UserViewAliasChoiceResult getAllAliasesAndCategories() { - return aliasJpaRepository.getAllAliasesAndCategories(); - } -} diff --git a/src/main/java/konkuk/thip/user/application/port/out/AliasCommandPort.java b/src/main/java/konkuk/thip/user/application/port/out/AliasCommandPort.java deleted file mode 100644 index be3bbf093..000000000 --- a/src/main/java/konkuk/thip/user/application/port/out/AliasCommandPort.java +++ /dev/null @@ -1,8 +0,0 @@ -package konkuk.thip.user.application.port.out; - -import konkuk.thip.user.domain.Alias; - -public interface AliasCommandPort { - - Alias findById(Long aliasId); -} diff --git a/src/main/java/konkuk/thip/user/application/port/out/AliasQueryPort.java b/src/main/java/konkuk/thip/user/application/port/out/AliasQueryPort.java deleted file mode 100644 index 064428123..000000000 --- a/src/main/java/konkuk/thip/user/application/port/out/AliasQueryPort.java +++ /dev/null @@ -1,8 +0,0 @@ -package konkuk.thip.user.application.port.out; - -import konkuk.thip.user.application.port.in.dto.UserViewAliasChoiceResult; - -public interface AliasQueryPort { - - UserViewAliasChoiceResult getAllAliasesAndCategories(); -} From 2841e50bdb91e9e895652cbb78c1c25451f61901 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 11:57:36 +0900 Subject: [PATCH 08/36] =?UTF-8?q?[refactor]=20User=20=EA=B4=80=EB=A0=A8=20?= =?UTF-8?q?=EC=98=81=EC=86=8D=EC=84=B1=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../konkuk/thip/user/adapter/out/mapper/UserMapper.java | 7 ++----- .../out/persistence/UserCommandPersistenceAdapter.java | 2 +- .../out/persistence/UserQueryPersistenceAdapter.java | 7 +++++++ .../thip/user/application/port/out/UserQueryPort.java | 4 ++++ 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java b/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java index 72f50321e..4d7fd43a4 100644 --- a/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java +++ b/src/main/java/konkuk/thip/user/adapter/out/mapper/UserMapper.java @@ -13,7 +13,7 @@ public class UserMapper { public UserJpaEntity toJpaEntity(User user, AliasJpaEntity aliasJpaEntity) { return UserJpaEntity.builder() .nickname(user.getNickname()) - .imageUrl(user.getImageUrl()) + .imageUrl(user.getAlias().getImageUrl()) .role(UserRole.from(user.getUserRole())) .oauth2Id(user.getOauth2Id()) .aliasForUserJpaEntity(aliasJpaEntity) @@ -24,12 +24,9 @@ public User toDomainEntity(UserJpaEntity userJpaEntity) { return User.builder() .id(userJpaEntity.getUserId()) .nickname(userJpaEntity.getNickname()) - .imageUrl(userJpaEntity.getImageUrl()) .userRole(userJpaEntity.getRole().getType()) .oauth2Id(userJpaEntity.getOauth2Id()) - .alias(Alias.from(userJpaEntity.getAliasForUserJpaEntity().getValue(), - userJpaEntity.getAliasForUserJpaEntity().getImageUrl(), - userJpaEntity.getAliasForUserJpaEntity().getColor())) + .alias(Alias.from(userJpaEntity.getAliasForUserJpaEntity().getValue())) .createdAt(userJpaEntity.getCreatedAt()) .modifiedAt(userJpaEntity.getModifiedAt()) .status(userJpaEntity.getStatus()) diff --git a/src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java b/src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java index eda795f14..6909bf929 100644 --- a/src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java +++ b/src/main/java/konkuk/thip/user/adapter/out/persistence/UserCommandPersistenceAdapter.java @@ -23,7 +23,7 @@ public class UserCommandPersistenceAdapter implements UserCommandPort { @Override public Long save(User user) { - AliasJpaEntity aliasJpaEntity = aliasJpaRepository.findById(user.getAliasId()).orElseThrow( + AliasJpaEntity aliasJpaEntity = aliasJpaRepository.findByValue(user.getAlias().getValue()).orElseThrow( () -> new EntityNotFoundException(ALIAS_NOT_FOUND)); UserJpaEntity userJpaEntity = userMapper.toJpaEntity(user, aliasJpaEntity); diff --git a/src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java b/src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java index 586fc5942..b28f73e4a 100644 --- a/src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java +++ b/src/main/java/konkuk/thip/user/adapter/out/persistence/UserQueryPersistenceAdapter.java @@ -1,6 +1,7 @@ package konkuk.thip.user.adapter.out.persistence; import konkuk.thip.user.adapter.out.mapper.UserMapper; +import konkuk.thip.user.application.port.in.dto.UserViewAliasChoiceResult; import konkuk.thip.user.application.port.out.UserQueryPort; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -12,6 +13,7 @@ public class UserQueryPersistenceAdapter implements UserQueryPort { private final UserJpaRepository userJpaRepository; + private final AliasJpaRepository aliasJpaRepository; private final UserMapper userMapper; @Override @@ -23,4 +25,9 @@ public boolean existsByNickname(String nickname) { public Set findUserIdsParticipatedInRoomsByBookId(Long bookId) { return userJpaRepository.findUserIdsByBookId(bookId); } + + @Override + public UserViewAliasChoiceResult getAllAliasesAndCategories() { + return aliasJpaRepository.getAllAliasesAndCategories(); + } } \ No newline at end of file diff --git a/src/main/java/konkuk/thip/user/application/port/out/UserQueryPort.java b/src/main/java/konkuk/thip/user/application/port/out/UserQueryPort.java index 3a6a55d28..5b71774eb 100644 --- a/src/main/java/konkuk/thip/user/application/port/out/UserQueryPort.java +++ b/src/main/java/konkuk/thip/user/application/port/out/UserQueryPort.java @@ -1,8 +1,12 @@ package konkuk.thip.user.application.port.out; +import konkuk.thip.user.application.port.in.dto.UserViewAliasChoiceResult; + import java.util.Set; public interface UserQueryPort { boolean existsByNickname(String nickname); Set findUserIdsParticipatedInRoomsByBookId(Long bookId); + + UserViewAliasChoiceResult getAllAliasesAndCategories(); } From fa11a2d4871f6fb0e23393b5bb34d76705fd2422 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 11:58:02 +0900 Subject: [PATCH 09/36] =?UTF-8?q?[refactor]=20=ED=94=84=EB=A1=9C=EB=8D=95?= =?UTF-8?q?=EC=85=98=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/book/application/service/BookSearchService.java | 6 +++--- .../thip/record/adapter/in/web/response/RecordDto.java | 2 +- .../konkuk/thip/record/adapter/in/web/response/VoteDto.java | 2 +- .../in/web/response/UserViewAliasChoiceResponse.java | 2 -- .../application/port/in/dto/UserViewAliasChoiceResult.java | 1 - .../thip/user/application/service/UserSignupService.java | 4 +--- .../application/service/UserViewAliasChoiceService.java | 6 +++--- 7 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/main/java/konkuk/thip/book/application/service/BookSearchService.java b/src/main/java/konkuk/thip/book/application/service/BookSearchService.java index d1ec358f8..8fd48ad2d 100644 --- a/src/main/java/konkuk/thip/book/application/service/BookSearchService.java +++ b/src/main/java/konkuk/thip/book/application/service/BookSearchService.java @@ -1,6 +1,5 @@ package konkuk.thip.book.application.service; -import jakarta.transaction.Transactional; import konkuk.thip.book.adapter.out.api.dto.NaverBookParseResult; import konkuk.thip.book.adapter.out.api.dto.NaverDetailBookParseResult; import konkuk.thip.book.application.port.in.BookSearchUseCase; @@ -21,6 +20,7 @@ import konkuk.thip.user.domain.User; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.HashSet; @@ -44,9 +44,8 @@ public class BookSearchService implements BookSearchUseCase { private final UserCommandPort userCommandPort; private final BookRedisCommandPort bookRedisCommandPort; - @Override - @Transactional + @Transactional(readOnly = true) public NaverBookParseResult searchBooks(String keyword, int page, Long userId) { if (keyword == null || keyword.isBlank()) { @@ -79,6 +78,7 @@ public NaverBookParseResult searchBooks(String keyword, int page, Long userId) { } @Override + @Transactional(readOnly = true) public BookDetailSearchResult searchDetailBooks(String isbn,Long userId) { //유저정보찾기 diff --git a/src/main/java/konkuk/thip/record/adapter/in/web/response/RecordDto.java b/src/main/java/konkuk/thip/record/adapter/in/web/response/RecordDto.java index 0fda7c5fc..148fe5c05 100644 --- a/src/main/java/konkuk/thip/record/adapter/in/web/response/RecordDto.java +++ b/src/main/java/konkuk/thip/record/adapter/in/web/response/RecordDto.java @@ -29,7 +29,7 @@ public static RecordDto of(Record record, String postDate, User user, int likeCo .page(record.getPage()) .userId(record.getCreatorId()) .nickName(user.getNickname()) - .profileImageUrl(user.getImageUrl()) + .profileImageUrl(user.getAlias().getImageUrl()) .content(record.getContent()) .likeCount(likeCount) .commentCount(commentCount) diff --git a/src/main/java/konkuk/thip/record/adapter/in/web/response/VoteDto.java b/src/main/java/konkuk/thip/record/adapter/in/web/response/VoteDto.java index f52ebaab9..cec556857 100644 --- a/src/main/java/konkuk/thip/record/adapter/in/web/response/VoteDto.java +++ b/src/main/java/konkuk/thip/record/adapter/in/web/response/VoteDto.java @@ -36,7 +36,7 @@ public static VoteDto of( .page(vote.getPage()) .userId(vote.getCreatorId()) .nickName(user.getNickname()) - .profileImageUrl(user.getImageUrl()) + .profileImageUrl(user.getAlias().getImageUrl()) .content(vote.getContent()) .likeCount(likeCount) .commentCount(commentCount) diff --git a/src/main/java/konkuk/thip/user/adapter/in/web/response/UserViewAliasChoiceResponse.java b/src/main/java/konkuk/thip/user/adapter/in/web/response/UserViewAliasChoiceResponse.java index 8af48cfef..9d6e96881 100644 --- a/src/main/java/konkuk/thip/user/adapter/in/web/response/UserViewAliasChoiceResponse.java +++ b/src/main/java/konkuk/thip/user/adapter/in/web/response/UserViewAliasChoiceResponse.java @@ -9,7 +9,6 @@ public record UserViewAliasChoiceResponse(List aliasChoices) { public static UserViewAliasChoiceResponse of(UserViewAliasChoiceResult result) { List choices = result.aliasChoices().stream() .map(ac -> new AliasChoice( - ac.aliasId(), ac.aliasName(), ac.categoryName(), ac.imageUrl(), @@ -20,7 +19,6 @@ public static UserViewAliasChoiceResponse of(UserViewAliasChoiceResult result) { } public record AliasChoice( - Long aliasId, String aliasName, String categoryName, String imageUrl, diff --git a/src/main/java/konkuk/thip/user/application/port/in/dto/UserViewAliasChoiceResult.java b/src/main/java/konkuk/thip/user/application/port/in/dto/UserViewAliasChoiceResult.java index b60820376..60d70366f 100644 --- a/src/main/java/konkuk/thip/user/application/port/in/dto/UserViewAliasChoiceResult.java +++ b/src/main/java/konkuk/thip/user/application/port/in/dto/UserViewAliasChoiceResult.java @@ -5,7 +5,6 @@ public record UserViewAliasChoiceResult(List aliasChoices) { public record AliasChoice( - Long aliasId, String aliasName, String categoryName, String imageUrl, diff --git a/src/main/java/konkuk/thip/user/application/service/UserSignupService.java b/src/main/java/konkuk/thip/user/application/service/UserSignupService.java index cdf383369..105e49eb9 100644 --- a/src/main/java/konkuk/thip/user/application/service/UserSignupService.java +++ b/src/main/java/konkuk/thip/user/application/service/UserSignupService.java @@ -2,7 +2,6 @@ import konkuk.thip.user.application.port.in.UserSignupUseCase; import konkuk.thip.user.application.port.in.dto.UserSignupCommand; -import konkuk.thip.user.application.port.out.AliasCommandPort; import konkuk.thip.user.application.port.out.UserCommandPort; import konkuk.thip.user.domain.Alias; import konkuk.thip.user.domain.User; @@ -18,14 +17,13 @@ public class UserSignupService implements UserSignupUseCase { private final UserCommandPort userCommandPort; - private final AliasCommandPort aliasCommandPort; @Override @Transactional public Long signup(UserSignupCommand command) { Alias alias = Alias.from(command.aliasName()); User user = User.withoutId( - command.nickname(), alias.getImageUrl(), USER.getType(), alias.getId(), command.oauth2Id() + command.nickname(), USER.getType(), command.oauth2Id(), alias ); return userCommandPort.save(user); diff --git a/src/main/java/konkuk/thip/user/application/service/UserViewAliasChoiceService.java b/src/main/java/konkuk/thip/user/application/service/UserViewAliasChoiceService.java index b04dd2df6..50c64cd2f 100644 --- a/src/main/java/konkuk/thip/user/application/service/UserViewAliasChoiceService.java +++ b/src/main/java/konkuk/thip/user/application/service/UserViewAliasChoiceService.java @@ -2,7 +2,7 @@ import konkuk.thip.user.application.port.in.UserViewAliasChoiceUseCase; import konkuk.thip.user.application.port.in.dto.UserViewAliasChoiceResult; -import konkuk.thip.user.application.port.out.AliasQueryPort; +import konkuk.thip.user.application.port.out.UserQueryPort; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -10,10 +10,10 @@ @RequiredArgsConstructor public class UserViewAliasChoiceService implements UserViewAliasChoiceUseCase { - private final AliasQueryPort aliasQueryPort; + private final UserQueryPort userQueryPort; @Override public UserViewAliasChoiceResult getAllAliasesAndCategories() { - return aliasQueryPort.getAllAliasesAndCategories(); + return userQueryPort.getAllAliasesAndCategories(); } } From 2634c374c00b4d59cfcee2858d850f0163b759a7 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 11:58:10 +0900 Subject: [PATCH 10/36] =?UTF-8?q?[refactor]=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/BookDetailSearchControllerTest.java | 6 ++--- .../BookMostSearchedBooksControllerTest.java | 6 ++--- .../thip/common/util/TestEntityFactory.java | 6 ++--- .../in/web/RecordQueryControllerTest.java | 6 ++--- .../service/RecordSearchServiceTest.java | 13 +++++++--- .../adapter/in/web/RoomCreateAPITest.java | 10 +++---- .../in/web/UserSignupControllerTest.java | 26 +++++++++---------- 7 files changed, 40 insertions(+), 33 deletions(-) diff --git a/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java b/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java index b86063d35..83ec8c036 100644 --- a/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java +++ b/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java @@ -63,9 +63,9 @@ class BookDetailSearchControllerTest { @BeforeEach void setup() { AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("책벌레") - .color("blue") - .imageUrl("http://image.url") + .value("문학가") + .color("문학_color") + .imageUrl("문학_image") .build()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() diff --git a/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java b/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java index d90a218ad..40d4d702b 100644 --- a/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java +++ b/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java @@ -64,9 +64,9 @@ class BookMostSearchedBooksControllerTest { void setUp() { AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("책벌레") - .color("blue") - .imageUrl("http://image.url") + .value("문학가") + .color("문학_color") + .imageUrl("문학_image") .build()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() diff --git a/src/test/java/konkuk/thip/common/util/TestEntityFactory.java b/src/test/java/konkuk/thip/common/util/TestEntityFactory.java index d2991b84b..463dd4983 100644 --- a/src/test/java/konkuk/thip/common/util/TestEntityFactory.java +++ b/src/test/java/konkuk/thip/common/util/TestEntityFactory.java @@ -17,9 +17,9 @@ public class TestEntityFactory { public static AliasJpaEntity createAlias() { return AliasJpaEntity.builder() - .value("칭호") - .imageUrl("test-image-url") - .color("red") + .value("문학") + .imageUrl("문학_image") + .color("문학_color") .build(); } diff --git a/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java b/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java index bc5e03386..67141c2c2 100644 --- a/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java +++ b/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java @@ -73,9 +73,9 @@ void tearDown() { void record_with_vote_response_success() throws Exception { // given AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("별명") - .color("blue") - .imageUrl("http://alias.img") + .value("문학가") + .color("문학_color") + .imageUrl("문학_image") .build()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() diff --git a/src/test/java/konkuk/thip/record/application/service/RecordSearchServiceTest.java b/src/test/java/konkuk/thip/record/application/service/RecordSearchServiceTest.java index 18a81b3fa..a679ed1a7 100644 --- a/src/test/java/konkuk/thip/record/application/service/RecordSearchServiceTest.java +++ b/src/test/java/konkuk/thip/record/application/service/RecordSearchServiceTest.java @@ -10,6 +10,7 @@ import konkuk.thip.record.application.port.out.RecordQueryPort; import konkuk.thip.record.domain.Record; import konkuk.thip.user.application.port.out.UserCommandPort; +import konkuk.thip.user.domain.Alias; import konkuk.thip.user.domain.User; import konkuk.thip.vote.application.port.out.VoteCommandPort; import konkuk.thip.vote.application.port.out.VoteQueryPort; @@ -40,6 +41,7 @@ class RecordSearchServiceTest { private RecordSearchService recordSearchService; private final Long userId = 1L; + private User stubUser; @BeforeEach void setUp() { @@ -51,6 +53,11 @@ void setUp() { voteQueryPort = mock(VoteQueryPort.class); dateUtil = mock(DateUtil.class); + // stubUser 세팅: 항상 같은 Alias와 userId 반환 + stubUser = mock(User.class); + when(stubUser.getAlias()).thenReturn(Alias.WRITER); + when(stubUser.getId()).thenReturn(userId); + recordSearchService = new RecordSearchService( recordQueryPort, userCommandPort, @@ -84,7 +91,7 @@ void testSortByLatest() { when(recordQueryPort.findRecordsByRoom(any(), any(), any(), any(), any(), any())) .thenReturn(RecordSearchResult.of(List.of(record), List.of(vote))); - when(userCommandPort.findById(any())).thenReturn(mock(User.class)); + when(userCommandPort.findById(any())).thenReturn(stubUser); when(postLikeQueryPort.countByPostId(anyLong())).thenReturn(0); when(commentQueryPort.countByPostId(anyLong())).thenReturn(0); when(postLikeQueryPort.existsByPostIdAndUserId(anyLong(), anyLong())).thenReturn(false); @@ -125,7 +132,7 @@ void testSortByLike() { when(recordQueryPort.findRecordsByRoom(any(), any(), any(), any(), any(), any())) .thenReturn(RecordSearchResult.of(List.of(record), List.of(vote))); - when(userCommandPort.findById(any())).thenReturn(mock(User.class)); + when(userCommandPort.findById(any())).thenReturn(stubUser); when(postLikeQueryPort.countByPostId(record.getId())).thenReturn(5); when(postLikeQueryPort.countByPostId(vote.getId())).thenReturn(10); when(commentQueryPort.countByPostId(anyLong())).thenReturn(0); @@ -164,7 +171,7 @@ void testPagingLogic() { when(recordQueryPort.findRecordsByRoom(any(), any(), any(), any(), any(), any())) .thenReturn(RecordSearchResult.of(records, votes)); - when(userCommandPort.findById(any())).thenReturn(mock(User.class)); + when(userCommandPort.findById(any())).thenReturn(stubUser); when(postLikeQueryPort.countByPostId(anyLong())).thenReturn(0); when(commentQueryPort.countByPostId(anyLong())).thenReturn(0); when(postLikeQueryPort.existsByPostIdAndUserId(anyLong(), anyLong())).thenReturn(false); diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java index 6e9623cc7..362a97191 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java @@ -73,9 +73,9 @@ void tearDown() { private void saveUserAndCategory() { AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("책벌레") - .color("blue") - .imageUrl("http://image.url") + .value("문학가") + .color("문학_color") + .imageUrl("문학_image") .build()); userJpaRepository.save(UserJpaEntity.builder() @@ -124,8 +124,8 @@ private Map buildRoomCreateRequest() { request.put("category", "소설"); request.put("roomName", "방이름"); request.put("description", "방설명"); - request.put("progressStartDate", "2025.07.10"); - request.put("progressEndDate", "2025.08.10"); + request.put("progressStartDate", LocalDate.now().plusDays(1).format(DateTimeFormatter.ofPattern("yyyy.MM.dd"))); + request.put("progressEndDate", LocalDate.now().plusDays(10).format(DateTimeFormatter.ofPattern("yyyy.MM.dd"))); request.put("recruitCount", 3); request.put("password", null); request.put("isPublic", true); diff --git a/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java b/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java index 899d914ac..519157cd2 100644 --- a/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java +++ b/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java @@ -59,14 +59,14 @@ void tearDown() { void signup_success() throws Exception { //given : alias 생성, 회원가입 request 생성 AliasJpaEntity aliasJpaEntity = AliasJpaEntity.builder() - .value("칭호") - .color("blue") - .imageUrl("http://image.url") + .value("문학가") + .color("문학_color") + .imageUrl("문학_image") .build(); aliasJpaRepository.save(aliasJpaEntity); UserSignupRequest request = new UserSignupRequest( - aliasJpaEntity.getAliasId(), + aliasJpaEntity.getValue(), "테스트유저" ); @@ -87,7 +87,7 @@ void signup_success() throws Exception { UserJpaEntity userJpaEntity = userJpaRepository.findById(userId).orElse(null); - assertThat(userJpaEntity.getAliasForUserJpaEntity().getAliasId()).isEqualTo(request.aliasId()); + assertThat(userJpaEntity.getAliasForUserJpaEntity().getValue()).isEqualTo(request.aliasName()); assertThat(userJpaEntity.getNickname()).isEqualTo(request.nickname()); } @@ -116,7 +116,7 @@ void signup_alias_id_null() throws Exception { void signup_nickname_blank() throws Exception { //given: nickname blank UserSignupRequest request = new UserSignupRequest( - 1L, + "문학가", "" ); @@ -136,7 +136,7 @@ void signup_nickname_blank() throws Exception { void signup_nickname_invalid_pattern() throws Exception { //given: nickname with invalid characters UserSignupRequest request = new UserSignupRequest( - 1L, + "문학가", "닉네임!!" ); @@ -156,7 +156,7 @@ void signup_nickname_invalid_pattern() throws Exception { void signup_nickname_too_long() throws Exception { //given: 11글자 nickname UserSignupRequest request = new UserSignupRequest( - 1L, + "문학가", "11글자닉네임입니다아" ); @@ -176,15 +176,15 @@ void signup_nickname_too_long() throws Exception { void signup_whenValidSignupToken_thenExtractOauth2IdCorrectly() throws Exception { //given : alias 데이터 저장 AliasJpaEntity aliasJpaEntity = AliasJpaEntity.builder() - .value("테스트칭호") - .color("green") - .imageUrl("http://image.url") + .value("문학가") + .color("문학_color") + .imageUrl("문학_image") .build(); aliasJpaRepository.save(aliasJpaEntity); //회원가입 request 생성 UserSignupRequest request = new UserSignupRequest( - aliasJpaEntity.getAliasId(), + aliasJpaEntity.getValue(), "테스트유저" ); @@ -218,7 +218,7 @@ void signup_whenValidSignupToken_thenExtractOauth2IdCorrectly() throws Exception void signup_whenNoToken_thenUnauthorized() throws Exception { //given: aliasId null UserSignupRequest request = new UserSignupRequest( - 1L, + "문학가", "테스트유저" ); From bc984e5c46612793857611e14cc799631e182ec1 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 12:23:52 +0900 Subject: [PATCH 11/36] =?UTF-8?q?[fix]=20=EC=A1=B0=ED=9A=8C=EC=9A=A9=20api?= =?UTF-8?q?=EC=9D=98=20Service=EC=97=90=20@Transactional(readOnly=20=3D=20?= =?UTF-8?q?true)=20=EC=B6=94=EA=B0=80=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 변경된 domain 구조로 인해, jpa -> domain 매핑 시 연관된 jpa의 지연로딩 기능을 사용해야할 때가 있는데, 이때 트랜잭션이 걸려있지않으면 error가 발생 - 도메인 엔티티를 조회하는 service 메서드에 모두 @Transactional(readOnly = true) 추가 --- .../book/application/service/BookMostSearchRankService.java | 2 ++ .../thip/book/application/service/BookMostSearchService.java | 2 ++ .../thip/record/application/service/RecordSearchService.java | 2 ++ .../konkuk/thip/room/application/service/RoomSearchService.java | 2 ++ .../room/application/service/RoomVerifyPasswordService.java | 1 + 5 files changed, 9 insertions(+) diff --git a/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java b/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java index cc3c8b4eb..966116e2e 100644 --- a/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java +++ b/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java @@ -12,6 +12,7 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.ArrayList; @@ -31,6 +32,7 @@ public class BookMostSearchRankService { // 매일 0시 실행 @Async @Scheduled(cron = "0 0 0 * * *") + @Transactional public void updateDailySearchRank() { LocalDate yesterday = LocalDate.now().minusDays(1); diff --git a/src/main/java/konkuk/thip/book/application/service/BookMostSearchService.java b/src/main/java/konkuk/thip/book/application/service/BookMostSearchService.java index 8555506f2..96f85cd00 100644 --- a/src/main/java/konkuk/thip/book/application/service/BookMostSearchService.java +++ b/src/main/java/konkuk/thip/book/application/service/BookMostSearchService.java @@ -6,6 +6,7 @@ import konkuk.thip.user.application.port.out.UserCommandPort; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.List; @@ -18,6 +19,7 @@ public class BookMostSearchService implements BookMostSearchUseCase { private final UserCommandPort userCommandPort; @Override + @Transactional(readOnly = true) public BookMostSearchResult getMostSearchedBooks(Long userId) { userCommandPort.findById(userId); diff --git a/src/main/java/konkuk/thip/record/application/service/RecordSearchService.java b/src/main/java/konkuk/thip/record/application/service/RecordSearchService.java index 021403843..6403cd773 100644 --- a/src/main/java/konkuk/thip/record/application/service/RecordSearchService.java +++ b/src/main/java/konkuk/thip/record/application/service/RecordSearchService.java @@ -23,6 +23,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Comparator; @@ -46,6 +47,7 @@ public class RecordSearchService implements RecordSearchUseCase { private static final int PAGE_SIZE = 10; @Override + @Transactional(readOnly = true) public RecordSearchResponse search(RecordSearchQuery query) { validateQueryParams(query); diff --git a/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java b/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java index a3e3d6af9..0de616c9a 100644 --- a/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java +++ b/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java @@ -12,6 +12,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import static konkuk.thip.common.exception.code.ErrorCode.CATEGORY_NOT_FOUND; import static konkuk.thip.common.exception.code.ErrorCode.INVALID_ROOM_SEARCH_SORT; @@ -25,6 +26,7 @@ public class RoomSearchService implements RoomSearchUseCase { private final RoomQueryPort roomQueryPort; @Override + @Transactional(readOnly = true) public RoomSearchResponse searchRoom(String keyword, String category, String sort, int page) { // 1. validation String sortVal = validateSort(sort); diff --git a/src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java b/src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java index 88ead3713..ab183a6b3 100644 --- a/src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java +++ b/src/main/java/konkuk/thip/room/application/service/RoomVerifyPasswordService.java @@ -16,6 +16,7 @@ public class RoomVerifyPasswordService implements RoomVerifyPasswordUseCase { private final RoomCommandPort roomCommandPort; @Override + @Transactional(readOnly = true) public Void verifyRoomPassword(RoomVerifyPasswordQuery query) { //방 검증 From efd09346f5aaed28ae5ce6e8bb388a9ec67dc235 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 12:24:30 +0900 Subject: [PATCH 12/36] =?UTF-8?q?[fix]=20aliasId=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/adapter/out/persistence/AliasQueryRepositoryImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryRepositoryImpl.java b/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryRepositoryImpl.java index a3791cd11..0482b2074 100644 --- a/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryRepositoryImpl.java +++ b/src/main/java/konkuk/thip/user/adapter/out/persistence/AliasQueryRepositoryImpl.java @@ -24,7 +24,6 @@ public UserViewAliasChoiceResult getAllAliasesAndCategories() { List aliasChoices = jpaQueryFactory .select(Projections.constructor( UserViewAliasChoiceResult.AliasChoice.class, - alias.aliasId, alias.value, category.value, alias.imageUrl, From f32ec2241ae376257f803b420a4677ba23ae0dbc Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 12:24:48 +0900 Subject: [PATCH 13/36] =?UTF-8?q?[refactor]=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/UserSignupControllerTest.java | 5 +++-- .../in/web/UserViewAliasChoiceControllerTest.java | 12 ++++++------ .../thip/user/adapter/out/jpa/UserJpaEntityTest.java | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java b/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java index 519157cd2..d23f06b2d 100644 --- a/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java +++ b/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java @@ -86,8 +86,9 @@ void signup_success() throws Exception { Long userId = jsonNode.path("data").path("userId").asLong(); UserJpaEntity userJpaEntity = userJpaRepository.findById(userId).orElse(null); + AliasJpaEntity userAliasJpaEntity = aliasJpaRepository.findByValue(request.aliasName()).orElse(null); - assertThat(userJpaEntity.getAliasForUserJpaEntity().getValue()).isEqualTo(request.aliasName()); + assertThat(userAliasJpaEntity.getValue()).isEqualTo(request.aliasName()); assertThat(userJpaEntity.getNickname()).isEqualTo(request.nickname()); } @@ -108,7 +109,7 @@ void signup_alias_id_null() throws Exception { .content(objectMapper.writeValueAsString(request))) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.code").value(API_INVALID_PARAM.getCode())) - .andExpect(jsonPath("$.message", containsString("aliasId는 필수입니다."))); + .andExpect(jsonPath("$.message", containsString("aliasName은 필수입니다."))); } @Test diff --git a/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java b/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java index 15c999bf6..719959e2e 100644 --- a/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java +++ b/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java @@ -73,16 +73,16 @@ void show_alias_choice_view() throws Exception { assertThat(choices) .extracting("aliasName", "categoryName", "imageUrl", "color") .containsExactlyInAnyOrder( - tuple("문학가", "문학", "문학가_image", "red"), - tuple("과학자", "과학/IT", "과학자_image", "blue") + tuple("문학가", "문학", "문학_image", "문학_color"), + tuple("과학자", "과학/IT", "과학_image", "과학_color") ); } private void saveAliasesAndCategories() { AliasJpaEntity alias1 = AliasJpaEntity.builder() .value("문학가") - .imageUrl("문학가_image") - .color("red") + .imageUrl("문학_image") + .color("문학_color") .build(); aliasJpaRepository.save(alias1); @@ -94,8 +94,8 @@ private void saveAliasesAndCategories() { AliasJpaEntity alias2 = AliasJpaEntity.builder() .value("과학자") - .imageUrl("과학자_image") - .color("blue") + .imageUrl("과학_image") + .color("과학_color") .build(); aliasJpaRepository.save(alias2); diff --git a/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java b/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java index ffd06ca78..8d24d542f 100644 --- a/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java +++ b/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java @@ -44,7 +44,7 @@ void saveAndFindUser() { // then assertThat(foundUser.getNickname()).isEqualTo("테스터"); - assertThat(foundUser.getAliasForUserJpaEntity().getValue()).isEqualTo("칭호"); + assertThat(foundUser.getAliasForUserJpaEntity().getValue()).isEqualTo("문학"); assertThat(foundUser.getRole()).isEqualTo(UserRole.USER); } } \ No newline at end of file From 061addb9dbc04f349b65df6145b04141ac514ba5 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:09:51 +0900 Subject: [PATCH 14/36] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20Service=EC=97=90=EC=84=9C=20Category=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/room/application/service/RoomSearchService.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java b/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java index 0de616c9a..488dd9df1 100644 --- a/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java +++ b/src/main/java/konkuk/thip/room/application/service/RoomSearchService.java @@ -60,12 +60,8 @@ private String validateCategory(String category) { if (category == null || category.isEmpty()) { return ""; } - try { - Category cat = Category.from(category); - return cat.getValue(); - } catch (IllegalArgumentException ex) { - throw new BusinessException(CATEGORY_NOT_FOUND, ex); - } + + return Category.from(category).getValue(); } /** From 6d02a81dc161a0bc81df8c10e0956eb336affa71 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:10:25 +0900 Subject: [PATCH 15/36] =?UTF-8?q?[refactor]=20TestEntityFactory=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 문학, 과학/IT 와 관련된 칭호, 카테고리 생성하도록 수정 --- .../thip/common/util/TestEntityFactory.java | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/test/java/konkuk/thip/common/util/TestEntityFactory.java b/src/test/java/konkuk/thip/common/util/TestEntityFactory.java index af338951d..2df450014 100644 --- a/src/test/java/konkuk/thip/common/util/TestEntityFactory.java +++ b/src/test/java/konkuk/thip/common/util/TestEntityFactory.java @@ -15,14 +15,40 @@ public class TestEntityFactory { - public static AliasJpaEntity createAlias() { - return AliasJpaEntity.builder() - .value("문학") + /** + * 유효한 Jpa entity를 만들어주는 Factory + */ + + public static AliasJpaEntity createLiteratureAlias() { + return AliasJpaEntity.builder() // 실제 존재하는 값으로 + .value("문학가") .imageUrl("문학_image") .color("문학_color") .build(); } + public static CategoryJpaEntity createLiteratureCategory(AliasJpaEntity alias) { + return CategoryJpaEntity.builder() // 실제 존재하는 값으로 + .value("문학") + .aliasForCategoryJpaEntity(alias) + .build(); + } + + public static AliasJpaEntity createScienceAlias() { + return AliasJpaEntity.builder() // 실제 존재하는 값으로 + .value("과학자") + .imageUrl("과학_image") + .color("과학_color") + .build(); + } + + public static CategoryJpaEntity createScienceCategory(AliasJpaEntity alias) { + return CategoryJpaEntity.builder() // 실제 존재하는 값으로 + .value("과학/IT") + .aliasForCategoryJpaEntity(alias) + .build(); + } + public static UserJpaEntity createUser(AliasJpaEntity alias) { return UserJpaEntity.builder() .nickname("테스터") @@ -46,13 +72,6 @@ public static BookJpaEntity createBook() { .build(); } - public static CategoryJpaEntity createCategory(AliasJpaEntity alias) { - return CategoryJpaEntity.builder() - .value("과학/IT") // 실제 존재하는 값 - .aliasForCategoryJpaEntity(alias) - .build(); - } - public static RoomJpaEntity createRoom(BookJpaEntity book, CategoryJpaEntity category) { return RoomJpaEntity.builder() .title("방이름") From 7dddea853421e96fefd7e5bf4a25ad83c7d9e5c6 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:11:06 +0900 Subject: [PATCH 16/36] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/RoomSearchApiTest.java | 96 +++++++++++-------- 1 file changed, 57 insertions(+), 39 deletions(-) diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java index bba425dba..da46a3141 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomSearchApiTest.java @@ -1,8 +1,8 @@ package konkuk.thip.room.adapter.in.web; -import com.fasterxml.jackson.databind.ObjectMapper; import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; import konkuk.thip.room.adapter.out.jpa.RoomJpaEntity; import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; @@ -68,12 +68,8 @@ void tearDown() { aliasJpaRepository.deleteAll(); } - private RoomJpaEntity saveRoom(String categoryValue, String bookTitle, String isbn, String roomName, LocalDate startDate, int recruitCount) { - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("소설-칭호") - .color("blue") - .imageUrl("http://image.url") - .build()); + private RoomJpaEntity saveScienceRoom(String bookTitle, String isbn, String roomName, LocalDate startDate, int recruitCount) { + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createScienceAlias()); BookJpaEntity book = bookJpaRepository.save(BookJpaEntity.builder() .title(bookTitle) @@ -86,10 +82,36 @@ private RoomJpaEntity saveRoom(String categoryValue, String bookTitle, String is .description("한강의 소설") .build()); - CategoryJpaEntity category = categoryJpaRepository.save(CategoryJpaEntity.builder() - .value(categoryValue) - .aliasForCategoryJpaEntity(alias) + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createScienceCategory(alias)); + + return roomJpaRepository.save(RoomJpaEntity.builder() + .title(roomName) + .description("한강 작품 읽기 모임") + .isPublic(true) + .roomPercentage(0.0) + .startDate(startDate) + .endDate(LocalDate.now().plusDays(30)) + .recruitCount(recruitCount) + .bookJpaEntity(book) + .categoryJpaEntity(category) .build()); + } + + private RoomJpaEntity saveLiteratureRoom(String bookTitle, String isbn, String roomName, LocalDate startDate, int recruitCount) { + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); + + BookJpaEntity book = bookJpaRepository.save(BookJpaEntity.builder() + .title(bookTitle) + .isbn(isbn) + .authorName("한강") + .bestSeller(false) + .publisher("문학동네") + .imageUrl("https://image1.jpg") + .pageCount(300) + .description("한강의 소설") + .build()); + + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias)); return roomJpaRepository.save(RoomJpaEntity.builder() .title(roomName) @@ -105,11 +127,7 @@ private RoomJpaEntity saveRoom(String categoryValue, String bookTitle, String is } private void saveUsersToRoom(RoomJpaEntity roomJpaEntity, int count) { - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("소설-칭호") - .color("blue") - .imageUrl("http://image.url") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createScienceAlias()); // User 리스트 생성 및 저장 List users = IntStream.rangeClosed(1, count) @@ -140,22 +158,22 @@ private void saveUsersToRoom(RoomJpaEntity roomJpaEntity, int count) { @DisplayName("keyword = [과학], 카테고리 선택 X, 정렬 = [마감임박순] 일 경우, 방이름 or 책제목에 '과학'이 포함된 방 검색 결과가 마감임박순으로 반환된다.") void search_keyword_and_sort_deadline() throws Exception { //given - RoomJpaEntity science_room_1 = saveRoom("과학/IT", "과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_1, 4); - RoomJpaEntity science_room_2 = saveRoom("과학/IT", "과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_2, 5); - RoomJpaEntity science_room_3 = saveRoom("과학/IT", "과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity science_room_4 = saveRoom("과학/IT", "과학-책", "isbn4", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "isbn4", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_4, 1); - RoomJpaEntity room_3 = saveRoom("문학", "문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveRoom("과학/IT", "과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); saveUsersToRoom(recruit_expired_room_4, 6); //when @@ -189,22 +207,22 @@ void search_keyword_and_sort_deadline() throws Exception { @DisplayName("keyword = [과학], 카테고리 선택 X, 정렬 = [인기순] 일 경우, 방이름 or 책제목에 '과학'이 포함된 방 검색 결과가 인기순(= 현재까지 모집된 인원 많은 순)으로 반환된다.") void search_keyword_and_sort_member_count() throws Exception { //given - RoomJpaEntity science_room_1 = saveRoom("과학/IT", "과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_1, 4); - RoomJpaEntity science_room_2 = saveRoom("과학/IT", "과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_2 = saveScienceRoom("과학-책", "isbn2", "방이름입니다", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_2, 5); - RoomJpaEntity science_room_3 = saveRoom("과학/IT", "과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity science_room_4 = saveRoom("과학/IT", "과학-책", "isbn4", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_4 = saveScienceRoom("과학-책", "isbn4", "과학-방-5일뒤-활동시작", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_4, 1); - RoomJpaEntity room_3 = saveRoom("문학", "문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveRoom("과학/IT", "과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); saveUsersToRoom(recruit_expired_room_4, 6); //when @@ -247,16 +265,16 @@ void search_keyword_and_sort_member_count() throws Exception { @DisplayName("keyword 입력 x, 카테고리 = [과학/IT], 정렬 = [마감임박순] 일 경우, [과학/IT] 카테고리에 속하는 방 검색 결과가 반환된다.") void search_category_and_sort_deadline() throws Exception { //given - RoomJpaEntity science_room_1 = saveRoom("과학/IT", "과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_1, 4); - RoomJpaEntity science_room_3 = saveRoom("과학/IT", "과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity room_3 = saveRoom("문학", "문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveRoom("과학/IT", "과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); saveUsersToRoom(recruit_expired_room_4, 6); //when @@ -287,16 +305,16 @@ void search_category_and_sort_deadline() throws Exception { @DisplayName("keyword 입력 x, 카테고리 입력 x, 정렬 = [마감임박순] 일 경우, DB에 존재하는 전체 방 검색 결과가 반환된다.") void search_sort_deadline() throws Exception { //given - RoomJpaEntity science_room_1 = saveRoom("과학/IT", "과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_1, 4); - RoomJpaEntity science_room_3 = saveRoom("과학/IT", "과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity room_3 = saveRoom("문학", "문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "방제목에-과학-포함된-문학방", LocalDate.now().plusDays(10), 8); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveRoom("과학/IT", "과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); saveUsersToRoom(recruit_expired_room_4, 6); //when @@ -327,16 +345,16 @@ void search_sort_deadline() throws Exception { @DisplayName("keyword=[과학], category=[과학/IT], 정렬=[마감임박순] 일 경우, keyword, category 조건을 모두 만족하는 방만 반환된다.") void search_keyword_and_category() throws Exception { // given - RoomJpaEntity science_room_1 = saveRoom("과학/IT", "과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); + RoomJpaEntity science_room_1 = saveScienceRoom("과학-책", "isbn1", "과학-방-1일뒤-활동시작", LocalDate.now().plusDays(1), 10); saveUsersToRoom(science_room_1, 4); - RoomJpaEntity science_room_3 = saveRoom("과학/IT", "과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); + RoomJpaEntity science_room_3 = saveScienceRoom("과학-책", "isbn3", "무슨방일까요??", LocalDate.now().plusDays(5), 8); saveUsersToRoom(science_room_3, 2); - RoomJpaEntity room_3 = saveRoom("문학", "문학-책", "isbn5", "문학방입니다", LocalDate.now().plusDays(10), 8); + RoomJpaEntity room_3 = saveLiteratureRoom("문학-책", "isbn5", "문학방입니다", LocalDate.now().plusDays(10), 8); saveUsersToRoom(room_3, 6); - RoomJpaEntity recruit_expired_room_4 = saveRoom("과학/IT", "과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); + RoomJpaEntity recruit_expired_room_4 = saveScienceRoom("과학-책", "isbn6", "모집기한-지난-과학방", LocalDate.now().minusDays(1), 8); saveUsersToRoom(recruit_expired_room_4, 6); // when From c37eade83ca576bf855090a660a0986bac0c2f98 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:11:17 +0900 Subject: [PATCH 17/36] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EB=B9=84?= =?UTF-8?q?=EB=B0=80=EB=B2=88=ED=98=B8=20=EA=B2=80=EC=A6=9D=20api=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/RoomVerifyPasswordAPITest.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java index 3ba330a9e..31cfe0e7c 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomVerifyPasswordAPITest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.room.adapter.in.web.request.RoomVerifyPasswordRequest; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; @@ -70,11 +71,7 @@ class RoomVerifyPasswordAPITest { @BeforeEach void setUp() { - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("책벌레") - .color("blue") - .imageUrl("http://image.url") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_432708231") @@ -95,16 +92,13 @@ void setUp() { .build()); userId = user.getUserId(); - CategoryJpaEntity categoryJpaEntity = categoryJpaRepository.save(CategoryJpaEntity.builder() - .value("과학/IT") - .aliasForCategoryJpaEntity(alias) - .build()); + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias)); // 비공개 방 저장 (비밀번호: 1234) RoomJpaEntity privateRoom = roomJpaRepository.save( RoomJpaEntity.builder() .bookJpaEntity(book) - .categoryJpaEntity(categoryJpaEntity) + .categoryJpaEntity(category) .title("비공개방") .description("비공개방입니다") .isPublic(false) @@ -120,7 +114,7 @@ void setUp() { RoomJpaEntity publicRoom = roomJpaRepository.save( RoomJpaEntity.builder() .bookJpaEntity(book) - .categoryJpaEntity(categoryJpaEntity) + .categoryJpaEntity(category) .title("공개방") .description("공개방입니다") .isPublic(true) From 184b1031f0daf9ad19051c886e63efa1e29ae2e6 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:11:28 +0900 Subject: [PATCH 18/36] =?UTF-8?q?[refactor]=20=EB=B0=A9=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../room/adapter/in/web/RoomCreateAPITest.java | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java b/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java index 827e6f274..452fef6c5 100644 --- a/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java +++ b/src/test/java/konkuk/thip/room/adapter/in/web/RoomCreateAPITest.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; import konkuk.thip.room.adapter.out.jpa.RoomJpaEntity; import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; @@ -72,11 +73,7 @@ void tearDown() { } private void saveUserAndCategory() { - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("문학가") - .color("문학_color") - .imageUrl("문학_image") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_432708231") @@ -86,10 +83,7 @@ private void saveUserAndCategory() { .aliasForUserJpaEntity(alias) .build()); - categoryJpaRepository.save(CategoryJpaEntity.builder() - .value("과학/IT") // 실제 카테고리 값 - .aliasForCategoryJpaEntity(alias) - .build()); + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias)); } private void saveBookWithPageCount() { @@ -121,7 +115,7 @@ private void saveBookWithoutPageCount() { private Map buildRoomCreateRequest() { Map request = new HashMap<>(); request.put("isbn", "9788954682152"); - request.put("category", "과학/IT"); // 실제 카테고리 값 + request.put("category", "문학"); // 실제 카테고리 값 request.put("roomName", "방이름"); request.put("description", "방설명"); request.put("progressStartDate", LocalDate.now().plusDays(1).format(DateTimeFormatter.ofPattern("yyyy.MM.dd"))); From 0b803436711fe326ce3b22a7ca2ba8134095656f Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:11:43 +0900 Subject: [PATCH 19/36] =?UTF-8?q?[refactor]=20=EC=B1=85=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=B3=80=EA=B2=BD=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/adapter/in/web/BookChangeSavedControllerTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java b/src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java index 204ac4cde..942bb370b 100644 --- a/src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java +++ b/src/test/java/konkuk/thip/book/adapter/in/web/BookChangeSavedControllerTest.java @@ -6,6 +6,7 @@ import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; import konkuk.thip.common.exception.code.ErrorCode; import konkuk.thip.common.security.util.JwtUtil; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.saved.adapter.out.jpa.SavedBookJpaEntity; import konkuk.thip.saved.adapter.out.persistence.SavedBookJpaRepository; import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; @@ -66,11 +67,7 @@ class BookChangeSavedControllerTest { @BeforeEach void setUp() { - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("책벌레") - .color("blue") - .imageUrl("http://image.url") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_432708231") From e520515111f41d2bfbf4640a42194ca27b5def80 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:11:53 +0900 Subject: [PATCH 20/36] =?UTF-8?q?[refactor]=20=EC=B1=85=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=EC=A1=B0=ED=9A=8C=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/BookDetailSearchControllerTest.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java b/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java index 83ec8c036..6709b9e51 100644 --- a/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java +++ b/src/test/java/konkuk/thip/book/adapter/in/web/BookDetailSearchControllerTest.java @@ -4,6 +4,7 @@ import konkuk.thip.book.application.service.BookSearchService; import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; import konkuk.thip.common.security.util.JwtUtil; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; import konkuk.thip.user.adapter.out.jpa.*; @@ -62,11 +63,7 @@ class BookDetailSearchControllerTest { @BeforeEach void setup() { - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("문학가") - .color("문학_color") - .imageUrl("문학_image") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_432708231") @@ -87,11 +84,7 @@ void setup() { .description("한강의 소설") .build()); - - CategoryJpaEntity category = categoryJpaRepository.save(CategoryJpaEntity.builder() - .value("소설") - .aliasForCategoryJpaEntity(alias) - .build()); + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias)); RoomJpaEntity room = roomJpaRepository.save(RoomJpaEntity.builder() .title("한강 독서모임") From cf422bf9c1a3030acdbf7bc675a76d6338233104 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:12:14 +0900 Subject: [PATCH 21/36] =?UTF-8?q?[refactor]=20=EC=B1=85=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/book/adapter/in/web/BookQueryControllerTest.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/test/java/konkuk/thip/book/adapter/in/web/BookQueryControllerTest.java b/src/test/java/konkuk/thip/book/adapter/in/web/BookQueryControllerTest.java index 6aba36187..7e3eb636b 100644 --- a/src/test/java/konkuk/thip/book/adapter/in/web/BookQueryControllerTest.java +++ b/src/test/java/konkuk/thip/book/adapter/in/web/BookQueryControllerTest.java @@ -2,6 +2,7 @@ import konkuk.thip.common.exception.code.ErrorCode; import konkuk.thip.common.security.util.JwtUtil; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.recentSearch.adapter.out.jpa.RecentSearchJpaEntity; import konkuk.thip.recentSearch.adapter.out.jpa.SearchType; import konkuk.thip.recentSearch.adapter.out.persistence.RecentSearchJpaRepository; @@ -51,12 +52,7 @@ class BookQueryControllerTest { @BeforeEach void setUp() { - - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("책벌레") - .color("blue") - .imageUrl("http://image.url") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_432708231") From d83a08078bf84343ba93cbbafaf6bed5050e35bd Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:12:37 +0900 Subject: [PATCH 22/36] =?UTF-8?q?[refactor]=20=EC=B1=85=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EC=88=9C=EC=9C=84=20=EC=A1=B0=ED=9A=8C=20api=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../in/web/BookMostSearchedBooksControllerTest.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java b/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java index 40d4d702b..cbb4e82fe 100644 --- a/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java +++ b/src/test/java/konkuk/thip/book/adapter/in/web/BookMostSearchedBooksControllerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import konkuk.thip.book.application.port.in.dto.BookMostSearchResult; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; import konkuk.thip.user.adapter.out.jpa.UserRole; @@ -62,12 +63,7 @@ class BookMostSearchedBooksControllerTest { @BeforeEach void setUp() { - - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("문학가") - .color("문학_color") - .imageUrl("문학_image") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_432708231") @@ -76,7 +72,6 @@ void setUp() { .role(UserRole.USER) .aliasForUserJpaEntity(alias) .build()); - } @AfterEach From ded0ee9a0b33a78e2cf5235855df9e16f6863910 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:12:46 +0900 Subject: [PATCH 23/36] =?UTF-8?q?[refactor]=20=EA=B8=B0=EB=A1=9D=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/adapter/in/web/RecordCreateControllerTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java b/src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java index 04279b9ce..7538ea3fb 100644 --- a/src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java +++ b/src/test/java/konkuk/thip/record/adapter/in/web/RecordCreateControllerTest.java @@ -81,13 +81,13 @@ void tearDown() { } private void saveUserAndRoom() { - AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createAlias()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(TestEntityFactory.createUser(alias)); BookJpaEntity book = bookJpaRepository.save(TestEntityFactory.createBook()); - CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createCategory(alias)); + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias)); RoomJpaEntity room = roomJpaRepository.save(TestEntityFactory.createRoom(book, category)); From 0ea62e097158dbbd3d94a730a6c01ca589fe9c12 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:13:00 +0900 Subject: [PATCH 24/36] =?UTF-8?q?[refactor]=20=EA=B8=B0=EB=A1=9D=EC=9E=A5?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20api=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/RecordQueryControllerTest.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java b/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java index 67141c2c2..5b065844b 100644 --- a/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java +++ b/src/test/java/konkuk/thip/record/adapter/in/web/RecordQueryControllerTest.java @@ -5,6 +5,7 @@ import konkuk.thip.book.adapter.out.jpa.BookJpaEntity; import konkuk.thip.book.adapter.out.persistence.BookJpaRepository; import konkuk.thip.common.util.DateUtil; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.record.adapter.out.jpa.RecordJpaEntity; import konkuk.thip.record.adapter.out.persistence.RecordJpaRepository; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; @@ -72,11 +73,7 @@ void tearDown() { @DisplayName("기록장 조회 시 record와 vote 모두 조회") void record_with_vote_response_success() throws Exception { // given - AliasJpaEntity alias = aliasJpaRepository.save(AliasJpaEntity.builder() - .value("문학가") - .color("문학_color") - .imageUrl("문학_image") - .build()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userJpaRepository.save(UserJpaEntity.builder() .oauth2Id("kakao_123") @@ -97,10 +94,7 @@ void record_with_vote_response_success() throws Exception { .bestSeller(false) .build()); - CategoryJpaEntity category = categoryJpaRepository.save(CategoryJpaEntity.builder() - .value("소설") - .aliasForCategoryJpaEntity(alias) - .build()); + CategoryJpaEntity category = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias)); RoomJpaEntity room = roomJpaRepository.save(RoomJpaEntity.builder() .title("방 제목") From a90002369277ae396ecf1046985b5787d3843117 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:13:11 +0900 Subject: [PATCH 25/36] =?UTF-8?q?[refactor]=20=EA=B8=B0=EB=A1=9D=EC=9E=A5?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=EC=98=81=EC=86=8D=EC=84=B1=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/persistence/RecordQueryRepositoryImplTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java b/src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java index da584fd0b..898a19fb5 100644 --- a/src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java +++ b/src/test/java/konkuk/thip/record/adapter/out/persistence/RecordQueryRepositoryImplTest.java @@ -38,7 +38,7 @@ class RecordQueryRepositoryImplTest { @DisplayName("mine 타입일 경우 유저 ID에 해당하는 기록만 조회된다") void testFindRecordsByRoom_mine() { // given - AliasJpaEntity alias = TestEntityFactory.createAlias(); + AliasJpaEntity alias = TestEntityFactory.createLiteratureAlias(); em.persist(alias); UserJpaEntity user1 = TestEntityFactory.createUser(alias); @@ -49,7 +49,7 @@ void testFindRecordsByRoom_mine() { BookJpaEntity book = TestEntityFactory.createBook(); em.persist(book); - CategoryJpaEntity category = TestEntityFactory.createCategory(alias); + CategoryJpaEntity category = TestEntityFactory.createLiteratureCategory(alias); em.persist(category); RoomJpaEntity room = TestEntityFactory.createRoom(book, category); @@ -95,7 +95,7 @@ void testFindRecordsByRoom_mine() { @DisplayName("pageStart, pageEnd가 null이면 isOverview가 true인 레코드만 조회된다") void testFindRecordsByRoom_overview() { // given - AliasJpaEntity alias = TestEntityFactory.createAlias(); + AliasJpaEntity alias = TestEntityFactory.createLiteratureAlias(); em.persist(alias); UserJpaEntity user = TestEntityFactory.createUser(alias); @@ -104,7 +104,7 @@ void testFindRecordsByRoom_overview() { BookJpaEntity book = TestEntityFactory.createBook(); em.persist(book); - CategoryJpaEntity category = TestEntityFactory.createCategory(alias); + CategoryJpaEntity category = TestEntityFactory.createLiteratureCategory(alias); em.persist(category); RoomJpaEntity room = TestEntityFactory.createRoom(book, category); From 3c2dffebdf2b9d24988d73067eb69c1f3d94e806 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:13:31 +0900 Subject: [PATCH 26/36] =?UTF-8?q?[refactor]=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=ED=9A=8C=EC=9B=90=EA=B0=80=EC=9E=85=20api=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/UserSignupControllerTest.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java b/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java index d23f06b2d..2d788ed70 100644 --- a/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java +++ b/src/test/java/konkuk/thip/user/adapter/in/web/UserSignupControllerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import konkuk.thip.common.security.util.JwtUtil; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.user.adapter.in.web.request.UserSignupRequest; import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; @@ -58,12 +59,7 @@ void tearDown() { @DisplayName("[칭호id, 닉네임] 정보를 바탕으로 회원가입을 진행한다.") void signup_success() throws Exception { //given : alias 생성, 회원가입 request 생성 - AliasJpaEntity aliasJpaEntity = AliasJpaEntity.builder() - .value("문학가") - .color("문학_color") - .imageUrl("문학_image") - .build(); - aliasJpaRepository.save(aliasJpaEntity); + AliasJpaEntity aliasJpaEntity = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserSignupRequest request = new UserSignupRequest( aliasJpaEntity.getValue(), @@ -176,12 +172,7 @@ void signup_nickname_too_long() throws Exception { @DisplayName("임시 토큰을 통해 @Oauth2Id로 oauth2Id를 정확히 추출하여 회원가입에 성공한다.") void signup_whenValidSignupToken_thenExtractOauth2IdCorrectly() throws Exception { //given : alias 데이터 저장 - AliasJpaEntity aliasJpaEntity = AliasJpaEntity.builder() - .value("문학가") - .color("문학_color") - .imageUrl("문학_image") - .build(); - aliasJpaRepository.save(aliasJpaEntity); + AliasJpaEntity aliasJpaEntity = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); //회원가입 request 생성 UserSignupRequest request = new UserSignupRequest( From bf4f4338c9ea1f54d715c115d2f2516fe146f043 Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:13:38 +0900 Subject: [PATCH 27/36] =?UTF-8?q?[refactor]=20=EC=9C=A0=EC=A0=80=20?= =?UTF-8?q?=EB=8B=89=EB=84=A4=EC=9E=84=20=EA=B2=80=EC=A6=9D=20api=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/UserVerifyNicknameControllerTest.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/test/java/konkuk/thip/user/adapter/in/web/UserVerifyNicknameControllerTest.java b/src/test/java/konkuk/thip/user/adapter/in/web/UserVerifyNicknameControllerTest.java index 8afcd9bf8..69b2a9c84 100644 --- a/src/test/java/konkuk/thip/user/adapter/in/web/UserVerifyNicknameControllerTest.java +++ b/src/test/java/konkuk/thip/user/adapter/in/web/UserVerifyNicknameControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.user.adapter.in.web.request.UserVerifyNicknameRequest; import konkuk.thip.user.adapter.out.jpa.AliasJpaEntity; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; @@ -76,12 +77,7 @@ void verify_nickname_true() throws Exception { @DisplayName("[닉네임]값이 이미 DB에 존재하는 경우, false를 반환한다.") void verify_nickname_false() throws Exception { //given: DB에 "테스트유저" 생성 - AliasJpaEntity aliasJpaEntity = AliasJpaEntity.builder() - .value("칭호") - .color("blue") - .imageUrl("http://image.url") - .build(); - aliasJpaRepository.save(aliasJpaEntity); + AliasJpaEntity aliasJpaEntity = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity userJpaEntity = UserJpaEntity.builder() .nickname("테스트유저") From 736d887075fb4d086063d8679b81c7da5b14e93d Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:13:54 +0900 Subject: [PATCH 28/36] =?UTF-8?q?[refactor]=20=EC=B9=AD=ED=98=B8=20?= =?UTF-8?q?=EC=84=A0=ED=83=9D=20=ED=99=94=EB=A9=B4=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?api=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserViewAliasChoiceControllerTest.java | 31 ++++--------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java b/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java index 719959e2e..3f73a4610 100644 --- a/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java +++ b/src/test/java/konkuk/thip/user/adapter/in/web/UserViewAliasChoiceControllerTest.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import konkuk.thip.common.util.TestEntityFactory; import konkuk.thip.room.adapter.out.jpa.CategoryJpaEntity; import konkuk.thip.room.adapter.out.persistence.CategoryJpaRepository; import konkuk.thip.user.adapter.in.web.response.UserViewAliasChoiceResponse; @@ -79,30 +80,10 @@ void show_alias_choice_view() throws Exception { } private void saveAliasesAndCategories() { - AliasJpaEntity alias1 = AliasJpaEntity.builder() - .value("문학가") - .imageUrl("문학_image") - .color("문학_color") - .build(); - aliasJpaRepository.save(alias1); - - CategoryJpaEntity category1 = CategoryJpaEntity.builder() - .value("문학") - .aliasForCategoryJpaEntity(alias1) - .build(); - categoryJpaRepository.save(category1); - - AliasJpaEntity alias2 = AliasJpaEntity.builder() - .value("과학자") - .imageUrl("과학_image") - .color("과학_color") - .build(); - aliasJpaRepository.save(alias2); - - CategoryJpaEntity category2 = CategoryJpaEntity.builder() - .value("과학/IT") - .aliasForCategoryJpaEntity(alias2) - .build(); - categoryJpaRepository.save(category2); + AliasJpaEntity alias1 = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); + CategoryJpaEntity category1 = categoryJpaRepository.save(TestEntityFactory.createLiteratureCategory(alias1)); + + AliasJpaEntity alias2 = aliasJpaRepository.save(TestEntityFactory.createScienceAlias()); + CategoryJpaEntity category2 = categoryJpaRepository.save(TestEntityFactory.createScienceCategory(alias2)); } } From f6287dc50e8a347ec6b5edca96599e6391e7ca5e Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 13:14:02 +0900 Subject: [PATCH 29/36] =?UTF-8?q?[refactor]=20jpa=20entity=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java | 2 +- .../konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java | 4 ++-- .../konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java | 4 ++-- .../konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java | 4 ++-- .../konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java b/src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java index 03d6484a1..cd4c013df 100644 --- a/src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java +++ b/src/test/java/konkuk/thip/feed/adapter/out/jpa/FeedJpaEntityTest.java @@ -43,7 +43,7 @@ class FeedJpaEntityTest { @DisplayName("FeedJpaEntity 저장 및 조회 테스트") void saveAndFindFeed() { // given - AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createAlias()); + AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userRepository.save(TestEntityFactory.createUser(alias)); BookJpaEntity book = bookRepository.save(TestEntityFactory.createBook()); diff --git a/src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java b/src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java index 0d60b0088..d75ae8316 100644 --- a/src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java +++ b/src/test/java/konkuk/thip/room/adapter/out/jpa/RecordJpaEntityTest.java @@ -52,10 +52,10 @@ class RecordJpaEntityTest { @DisplayName("RecordJpaEntity 저장 및 조회 테스트") void saveAndFindRecord() { // given - AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createAlias()); + AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userRepository.save(TestEntityFactory.createUser(alias)); BookJpaEntity book = bookRepository.save(TestEntityFactory.createBook()); - CategoryJpaEntity category = categoryRepository.save(TestEntityFactory.createCategory(alias)); + CategoryJpaEntity category = categoryRepository.save(TestEntityFactory.createLiteratureCategory(alias)); RoomJpaEntity room = roomRepository.save(TestEntityFactory.createRoom(book, category)); RecordJpaEntity record = recordRepository.save(TestEntityFactory.createRecord(user, room)); diff --git a/src/test/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java b/src/test/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java index 3d18de653..2e10d9e74 100644 --- a/src/test/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java +++ b/src/test/java/konkuk/thip/room/adapter/out/jpa/RoomJpaEntityTest.java @@ -44,8 +44,8 @@ class RoomJpaEntityTest { void saveAndFindRoom() { // given BookJpaEntity book = bookRepository.save(TestEntityFactory.createBook()); - AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createAlias()); - CategoryJpaEntity category = categoryRepository.save(TestEntityFactory.createCategory(alias)); + AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createLiteratureAlias()); + CategoryJpaEntity category = categoryRepository.save(TestEntityFactory.createLiteratureCategory(alias)); RoomJpaEntity room = roomRepository.save(TestEntityFactory.createRoom(book, category)); // when diff --git a/src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java b/src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java index 79f3aea6a..e5cf1d357 100644 --- a/src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java +++ b/src/test/java/konkuk/thip/room/adapter/out/jpa/VoteJpaEntityTest.java @@ -52,10 +52,10 @@ class VoteJpaEntityTest { @DisplayName("VoteJpaEntity 저장 및 조회 테스트") void saveAndFindVote() { // given - AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createAlias()); + AliasJpaEntity alias = aliasRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userRepository.save(TestEntityFactory.createUser(alias)); BookJpaEntity book = bookRepository.save(TestEntityFactory.createBook()); - CategoryJpaEntity category = categoryRepository.save(TestEntityFactory.createCategory(alias)); + CategoryJpaEntity category = categoryRepository.save(TestEntityFactory.createLiteratureCategory(alias)); RoomJpaEntity room = roomRepository.save(TestEntityFactory.createRoom(book, category)); VoteJpaEntity vote = voteRepository.save(VoteJpaEntity.builder() diff --git a/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java b/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java index 8d24d542f..c316f8de8 100644 --- a/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java +++ b/src/test/java/konkuk/thip/user/adapter/out/jpa/UserJpaEntityTest.java @@ -33,7 +33,7 @@ class UserJpaEntityTest { @DisplayName("UserJpaEntity 저장 및 조회 테스트") void saveAndFindUser() { // given - AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createAlias()); + AliasJpaEntity alias = aliasJpaRepository.save(TestEntityFactory.createLiteratureAlias()); UserJpaEntity user = userRepository.save(TestEntityFactory.createUser(alias)); // when @@ -44,7 +44,7 @@ void saveAndFindUser() { // then assertThat(foundUser.getNickname()).isEqualTo("테스터"); - assertThat(foundUser.getAliasForUserJpaEntity().getValue()).isEqualTo("문학"); + assertThat(foundUser.getAliasForUserJpaEntity().getValue()).isEqualTo("문학가"); assertThat(foundUser.getRole()).isEqualTo(UserRole.USER); } } \ No newline at end of file From e0ea655dd17f3449557248490b9a357b95c2a338 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Thu, 10 Jul 2025 13:21:26 +0900 Subject: [PATCH 30/36] =?UTF-8?q?[refactor]=20category=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/konkuk/thip/room/domain/Category.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/room/domain/Category.java b/src/main/java/konkuk/thip/room/domain/Category.java index 80c6fbd18..1ff96bba6 100644 --- a/src/main/java/konkuk/thip/room/domain/Category.java +++ b/src/main/java/konkuk/thip/room/domain/Category.java @@ -17,7 +17,7 @@ public enum Category { * TODO : DB에서 value를 통해 카테고리를 조회하는것보다 id로 조회하는게 성능상 좋으니, id 값도 같이 보관 ?? */ SCIENCE_IT("과학/IT"), - Literature("문학"), + LITERATURE("문학"), ART("예술"), SOCIAL_SCIENCE("사회과학"), HUMANITY("인문학"); From bd05a1476c3131c4af94673b31f95780ce781245 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Thu, 10 Jul 2025 13:30:50 +0900 Subject: [PATCH 31/36] =?UTF-8?q?[refactor]=20alias=20=EC=98=A4=ED=83=80?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/konkuk/thip/user/domain/Alias.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/konkuk/thip/user/domain/Alias.java b/src/main/java/konkuk/thip/user/domain/Alias.java index ffb906cb2..992b7994e 100644 --- a/src/main/java/konkuk/thip/user/domain/Alias.java +++ b/src/main/java/konkuk/thip/user/domain/Alias.java @@ -11,7 +11,7 @@ public enum Alias { WRITER("문학가", "문학_color", "문학_image"), SCIENTIST("과학자", "과학_color", "과학_image"), SOCIOLOGIST("사회학자", "사회과학_color", "사회과학_image"), - ARTIEST("예술가", "예술_color", "예술_image"), + ARTIST("예술가", "예술_color", "예술_image"), PHILOSOPHER("철학자", "철학_color", "철학_image"); private final String value; From da02c34941ee793a9b346a459b167db259fcf6db Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Thu, 10 Jul 2025 13:31:02 +0900 Subject: [PATCH 32/36] =?UTF-8?q?[refactor]=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=A0=9C=EA=B1=B0=20?= =?UTF-8?q?(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java b/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java index bbd4dbbe4..d680f3ff4 100644 --- a/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java +++ b/src/main/java/konkuk/thip/feed/adapter/out/mapper/FeedMapper.java @@ -6,13 +6,11 @@ import konkuk.thip.feed.domain.Feed; import konkuk.thip.feed.domain.Tag; import konkuk.thip.user.adapter.out.jpa.UserJpaEntity; -import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; import java.util.List; @Component -@RequiredArgsConstructor public class FeedMapper { public FeedJpaEntity toJpaEntity(Feed feed, UserJpaEntity userJpaEntity, BookJpaEntity bookJpaEntity) { From 43305b49f75e6d1fa8314313a9be658dd0abcee9 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Thu, 10 Jul 2025 13:31:36 +0900 Subject: [PATCH 33/36] =?UTF-8?q?[refactor]=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20trasactional=20=EC=A0=9C=EA=B1=B0=20(#53)=20-=20Red?= =?UTF-8?q?is=EC=97=90=EC=84=9C=EB=8A=94=20Trasactional=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20x=20-=20Async=EC=97=90=EC=84=9C=EB=8A=94=20Trasacti?= =?UTF-8?q?onal=20=EC=A0=95=EC=83=81=20=EB=8F=99=EC=9E=91=EC=95=88=20?= =?UTF-8?q?=EB=90=A0=20=EC=88=98=20=EC=9E=88=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/application/service/BookMostSearchRankService.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java b/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java index 966116e2e..cc3c8b4eb 100644 --- a/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java +++ b/src/main/java/konkuk/thip/book/application/service/BookMostSearchRankService.java @@ -12,7 +12,6 @@ import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.time.LocalDate; import java.util.ArrayList; @@ -32,7 +31,6 @@ public class BookMostSearchRankService { // 매일 0시 실행 @Async @Scheduled(cron = "0 0 0 * * *") - @Transactional public void updateDailySearchRank() { LocalDate yesterday = LocalDate.now().minusDays(1); From c02de47622b176b9232b364107b8ec2b4859b482 Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Thu, 10 Jul 2025 13:31:54 +0900 Subject: [PATCH 34/36] =?UTF-8?q?[refactor]=20TagName=EA=B3=BC=20Tag?= =?UTF-8?q?=EB=A5=BC=20=EB=B3=91=ED=95=A9=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/thip/feed/domain/Tag.java | 38 ++++++++++++++---- .../java/konkuk/thip/feed/domain/TagName.java | 40 ------------------- 2 files changed, 30 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/konkuk/thip/feed/domain/TagName.java diff --git a/src/main/java/konkuk/thip/feed/domain/Tag.java b/src/main/java/konkuk/thip/feed/domain/Tag.java index 487a0631f..e4267da50 100644 --- a/src/main/java/konkuk/thip/feed/domain/Tag.java +++ b/src/main/java/konkuk/thip/feed/domain/Tag.java @@ -1,18 +1,40 @@ package konkuk.thip.feed.domain; -import lombok.Builder; +import konkuk.thip.common.exception.InvalidStateException; import lombok.Getter; +import static konkuk.thip.common.exception.code.ErrorCode.TAG_NAME_NOT_MATCH; + @Getter -@Builder -public class Tag { +public enum Tag { + BOOK_RECOMMEND("책추천"), + TODAYS_BOOK("오늘의책"), + READING_LOG("독서기록"), + BOOK_REVIEW("책리뷰"), + QUOTE("책속한줄"), + BOOK_REPORT("독후감"), + LIFE_BOOK("내인생책"), + RE_READ("다시읽고싶은책"), + BOOK_TALK("북토크"), + BOOKSTAGRAM("책스타그램"), + NOVEL("소설추천"), + SELF_IMPROVEMENT("자기계발서"), + PHILOSOPHY("인문학책"), + SCIENCE("과학책"), + ECONOMY("경제책"); - private TagName value; + private final String tag; - public static Tag from(String tagName) { - return Tag.builder() - .value(TagName.from(tagName)) - .build(); + Tag(String tag) { + this.tag = tag; } + public static Tag from(String tag) { + for (Tag tagName : Tag.values()) { + if (tagName.tag.equalsIgnoreCase(tag)) { + return tagName; + } + } + throw new InvalidStateException(TAG_NAME_NOT_MATCH); + } } diff --git a/src/main/java/konkuk/thip/feed/domain/TagName.java b/src/main/java/konkuk/thip/feed/domain/TagName.java deleted file mode 100644 index 4fea0ec99..000000000 --- a/src/main/java/konkuk/thip/feed/domain/TagName.java +++ /dev/null @@ -1,40 +0,0 @@ -package konkuk.thip.feed.domain; - -import konkuk.thip.common.exception.InvalidStateException; -import lombok.Getter; - -import static konkuk.thip.common.exception.code.ErrorCode.TAG_NAME_NOT_MATCH; - -@Getter -public enum TagName { - BOOK_RECOMMEND("책추천"), - TODAYS_BOOK("오늘의책"), - READING_LOG("독서기록"), - BOOK_REVIEW("책리뷰"), - QUOTE("책속한줄"), - BOOK_REPORT("독후감"), - LIFE_BOOK("내인생책"), - RE_READ("다시읽고싶은책"), - BOOK_TALK("북토크"), - BOOKSTAGRAM("책스타그램"), - NOVEL("소설추천"), - SELF_IMPROVEMENT("자기계발서"), - PHILOSOPHY("인문학책"), - SCIENCE("과학책"), - ECONOMY("경제책"); - - private final String tag; - - TagName(String tag) { - this.tag = tag; - } - - public static TagName from(String tag) { - for (TagName tagName : TagName.values()) { - if (tagName.tag.equalsIgnoreCase(tag)) { - return tagName; - } - } - throw new InvalidStateException(TAG_NAME_NOT_MATCH); - } -} From 45181e24daf416eebce2d77032b9aa48467e1a4d Mon Sep 17 00:00:00 2001 From: janghyunjun Date: Thu, 10 Jul 2025 14:12:08 +0900 Subject: [PATCH 35/36] =?UTF-8?q?[refactor]=20Tag=EC=97=90=EC=84=9C=20Cate?= =?UTF-8?q?gory=EB=A5=BC=20Enumd=E3=85=A1=EB=A1=9C=20=EB=A7=A4=ED=95=91=20?= =?UTF-8?q?(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/thip/feed/domain/Tag.java | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/konkuk/thip/feed/domain/Tag.java b/src/main/java/konkuk/thip/feed/domain/Tag.java index e4267da50..bde2b4d83 100644 --- a/src/main/java/konkuk/thip/feed/domain/Tag.java +++ b/src/main/java/konkuk/thip/feed/domain/Tag.java @@ -1,37 +1,40 @@ package konkuk.thip.feed.domain; import konkuk.thip.common.exception.InvalidStateException; +import konkuk.thip.room.domain.Category; import lombok.Getter; import static konkuk.thip.common.exception.code.ErrorCode.TAG_NAME_NOT_MATCH; @Getter public enum Tag { - BOOK_RECOMMEND("책추천"), - TODAYS_BOOK("오늘의책"), - READING_LOG("독서기록"), - BOOK_REVIEW("책리뷰"), - QUOTE("책속한줄"), - BOOK_REPORT("독후감"), - LIFE_BOOK("내인생책"), - RE_READ("다시읽고싶은책"), - BOOK_TALK("북토크"), - BOOKSTAGRAM("책스타그램"), - NOVEL("소설추천"), - SELF_IMPROVEMENT("자기계발서"), - PHILOSOPHY("인문학책"), - SCIENCE("과학책"), - ECONOMY("경제책"); + BOOK_RECOMMEND("책추천", Category.LITERATURE), + TODAYS_BOOK("오늘의책", Category.LITERATURE), + READING_LOG("독서기록", Category.LITERATURE), + BOOK_REVIEW("책리뷰", Category.LITERATURE), + QUOTE("책속한줄", Category.LITERATURE), + BOOK_REPORT("독후감", Category.LITERATURE), + LIFE_BOOK("내인생책", Category.LITERATURE), + RE_READ("다시읽고싶은책", Category.LITERATURE), + BOOK_TALK("북토크", Category.LITERATURE), + BOOKSTAGRAM("책스타그램", Category.LITERATURE), + NOVEL("소설추천", Category.LITERATURE), + SELF_IMPROVEMENT("자기계발서", Category.HUMANITY), + PHILOSOPHY("인문학책", Category.HUMANITY), + SCIENCE("과학책", Category.SCIENCE_IT), + ECONOMY("경제책", Category.SOCIAL_SCIENCE); - private final String tag; + private final String value; + private final Category category; - Tag(String tag) { - this.tag = tag; + Tag(String value, Category category) { + this.value = value; + this.category = category; } - public static Tag from(String tag) { + public static Tag from(String value) { for (Tag tagName : Tag.values()) { - if (tagName.tag.equalsIgnoreCase(tag)) { + if (tagName.value.equalsIgnoreCase(value)) { return tagName; } } From 168716ee3cf47ccfb8c8aa55352488016d70953a Mon Sep 17 00:00:00 2001 From: seongjunnoh Date: Thu, 10 Jul 2025 15:22:20 +0900 Subject: [PATCH 36/36] =?UTF-8?q?[refactor]=20tag=EC=97=90=EC=84=9C=20cate?= =?UTF-8?q?gory=20=EC=A0=95=EB=B3=B4=20=EC=A0=9C=EA=B1=B0=20(#53)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/konkuk/thip/feed/domain/Tag.java | 38 +++++++++---------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/src/main/java/konkuk/thip/feed/domain/Tag.java b/src/main/java/konkuk/thip/feed/domain/Tag.java index bde2b4d83..f84214409 100644 --- a/src/main/java/konkuk/thip/feed/domain/Tag.java +++ b/src/main/java/konkuk/thip/feed/domain/Tag.java @@ -3,34 +3,30 @@ import konkuk.thip.common.exception.InvalidStateException; import konkuk.thip.room.domain.Category; import lombok.Getter; +import lombok.RequiredArgsConstructor; import static konkuk.thip.common.exception.code.ErrorCode.TAG_NAME_NOT_MATCH; @Getter +@RequiredArgsConstructor public enum Tag { - BOOK_RECOMMEND("책추천", Category.LITERATURE), - TODAYS_BOOK("오늘의책", Category.LITERATURE), - READING_LOG("독서기록", Category.LITERATURE), - BOOK_REVIEW("책리뷰", Category.LITERATURE), - QUOTE("책속한줄", Category.LITERATURE), - BOOK_REPORT("독후감", Category.LITERATURE), - LIFE_BOOK("내인생책", Category.LITERATURE), - RE_READ("다시읽고싶은책", Category.LITERATURE), - BOOK_TALK("북토크", Category.LITERATURE), - BOOKSTAGRAM("책스타그램", Category.LITERATURE), - NOVEL("소설추천", Category.LITERATURE), - SELF_IMPROVEMENT("자기계발서", Category.HUMANITY), - PHILOSOPHY("인문학책", Category.HUMANITY), - SCIENCE("과학책", Category.SCIENCE_IT), - ECONOMY("경제책", Category.SOCIAL_SCIENCE); + BOOK_RECOMMEND("책추천"), + TODAYS_BOOK("오늘의책"), + READING_LOG("독서기록"), + BOOK_REVIEW("책리뷰"), + QUOTE("책속한줄"), + BOOK_REPORT("독후감"), + LIFE_BOOK("내인생책"), + RE_READ("다시읽고싶은책"), + BOOK_TALK("북토크"), + BOOKSTAGRAM("책스타그램"), + NOVEL("소설추천"), + SELF_IMPROVEMENT("자기계발서"), + PHILOSOPHY("인문학책"), + SCIENCE("과학책"), + ECONOMY("경제책"); private final String value; - private final Category category; - - Tag(String value, Category category) { - this.value = value; - this.category = category; - } public static Tag from(String value) { for (Tag tagName : Tag.values()) {