From 727a360d84798c339e381764d8c06dc417c3bf6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=8F=84=EB=AA=A8?= Date: Tue, 17 Oct 2023 20:00:32 +0900 Subject: [PATCH] =?UTF-8?q?[#125]=20feat:=20=ED=83=9C=EA=B7=B8=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EC=B5=9C=EB=8C=80=EA=B8=B8=EC=9D=B4=20Validation?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20(#126)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/todaysfail/domains/tag/domain/Tag.java | 9 +++++++++ .../domains/tag/exception/TagErrorCode.java | 6 +++++- .../tag/exception/TagNameLengthExceedException.java | 11 +++++++++++ .../domains/tag/service/TagDomainService.java | 12 ++++++++++++ .../web/failure/usecase/FailureRegisterUseCase.java | 8 +++++--- 5 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagNameLengthExceedException.java diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/domain/Tag.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/domain/Tag.java index 7505522..e11c1b0 100644 --- a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/domain/Tag.java +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/domain/Tag.java @@ -1,6 +1,7 @@ package com.todaysfail.domains.tag.domain; import com.todaysfail.common.BaseTimeEntity; +import com.todaysfail.domains.tag.exception.TagNameLengthExceedException; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; @@ -18,6 +19,8 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor(access = AccessLevel.PRIVATE) public class Tag extends BaseTimeEntity { + private static final int MAX_TAG_NAME_LENGTH = 23; + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "tag_id") @@ -34,4 +37,10 @@ public static Tag register(String tagName) { public void increaseUsedCount() { this.usedCount++; } + + public void validateTagNameLength() { + if (this.tagName.length() > MAX_TAG_NAME_LENGTH) { + throw TagNameLengthExceedException.EXCEPTION; + } + } } diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagErrorCode.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagErrorCode.java index 96939ef..7ebb542 100644 --- a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagErrorCode.java +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagErrorCode.java @@ -16,7 +16,11 @@ public enum TagErrorCode implements BaseErrorCode { TAG_COUNT_EXCEED(TodaysFailConst.BAD_REQUEST, "TAG_400_1", "허용된 최대 태그 개수를 초과했습니다."), @ExplainError("태그를 찾을 수 없습니다.") - TAG_NOT_FOUND(TodaysFailConst.BAD_REQUEST, "TAG_400_2", "태그를 찾을 수 없습니다."); + TAG_NOT_FOUND(TodaysFailConst.BAD_REQUEST, "TAG_400_2", "태그를 찾을 수 없습니다."), + + @ExplainError("태그 이름의 길이 제한을 초과했습니다.") + TAG_NAME_LENGTH_EXCEED(TodaysFailConst.BAD_REQUEST, "TAG_400_3", "태그 이름의 길이 제한을 초과했습니다."), + ; private Integer status; private String code; diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagNameLengthExceedException.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagNameLengthExceedException.java new file mode 100644 index 0000000..22e0658 --- /dev/null +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/exception/TagNameLengthExceedException.java @@ -0,0 +1,11 @@ +package com.todaysfail.domains.tag.exception; + +import com.todaysfail.common.exception.TodaysFailCodeException; + +public class TagNameLengthExceedException extends TodaysFailCodeException { + public static final TodaysFailCodeException EXCEPTION = new TagNameLengthExceedException(); + + public TagNameLengthExceedException() { + super(TagErrorCode.TAG_NAME_LENGTH_EXCEED); + } +} diff --git a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/service/TagDomainService.java b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/service/TagDomainService.java index 11c3475..9e95d4a 100644 --- a/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/service/TagDomainService.java +++ b/TodaysFail-Domain/src/main/java/com/todaysfail/domains/tag/service/TagDomainService.java @@ -2,16 +2,28 @@ import com.todaysfail.aop.lock.RedissonLock; import com.todaysfail.domains.tag.domain.Tag; +import com.todaysfail.domains.tag.port.TagCommandPort; +import java.util.List; +import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor public class TagDomainService { + private final TagCommandPort tagCommandPort; @RedissonLock(lockName = "태그사용수증가", identifier = "tag") public Tag increaseUsedCount(Tag tag) { tag.increaseUsedCount(); return tag; } + + @Transactional + public List saveAndRetrieveAllTags(Set tagNameSet) { + List tags = tagCommandPort.saveAndRetrieveAllTags(tagNameSet); + tags.stream().forEach(tag -> tag.validateTagNameLength()); + return tags; + } } diff --git a/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/failure/usecase/FailureRegisterUseCase.java b/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/failure/usecase/FailureRegisterUseCase.java index c784f91..a9ec498 100644 --- a/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/failure/usecase/FailureRegisterUseCase.java +++ b/TodaysFail-Interface/src/main/java/com/todaysfail/api/web/failure/usecase/FailureRegisterUseCase.java @@ -10,22 +10,24 @@ import com.todaysfail.domains.failure.domain.Failure; import com.todaysfail.domains.failure.service.FailureDomainService; import com.todaysfail.domains.tag.domain.Tag; -import com.todaysfail.domains.tag.port.TagCommandPort; +import com.todaysfail.domains.tag.service.TagDomainService; import java.util.List; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; @UseCase @RequiredArgsConstructor public class FailureRegisterUseCase { private final FailureMapper failureMapper; - private final TagCommandPort tagCommandPort; private final CategoryQueryPort categoryQueryPort; private final FailureDomainService failureDomainService; + private final TagDomainService tagDomainService; + @Transactional public FailureResponse execute(FailureRegisterRequest request) { Long currentUserId = SecurityUtils.getCurrentUserId(); - List tags = tagCommandPort.saveAndRetrieveAllTags(request.tagNameSet()); + List tags = tagDomainService.saveAndRetrieveAllTags(request.tagNameSet()); Category category = categoryQueryPort.queryCategory(request.categoryId()); Failure failure = Failure.builder()