diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt index 5d4a8f7d..2b0100f8 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/application/service/ExperienceGetService.kt @@ -50,7 +50,7 @@ class ExperienceGetService( } fun getExperienceByYearAndParentTag(year: Int, parentTagId: UUID): GetExperience.Response { - val experiences = experienceReader.readByYearAndTagId(year, parentTagId).map { + val experiences = experienceReader.readByYearAndParentTagId(year, parentTagId).map { createExperienceDetailResponse(it) } @@ -58,7 +58,7 @@ class ExperienceGetService( } fun getExperienceByYearAndChildTag(year: Int, childTagId: UUID): GetExperience.Response { - val experiences = experienceReader.readByYearAndTagId(year, childTagId).map { + val experiences = experienceReader.readByYearAndParentTagId(year, childTagId).map { createExperienceDetailResponse(it) } diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt index e412fb6c..b6638f9d 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/experience/presentation/ExperienceController.kt @@ -1,6 +1,9 @@ package com.bamyanggang.apimodule.domain.experience.presentation -import com.bamyanggang.apimodule.domain.experience.application.dto.* +import com.bamyanggang.apimodule.domain.experience.application.dto.CreateExperience +import com.bamyanggang.apimodule.domain.experience.application.dto.EditExperience +import com.bamyanggang.apimodule.domain.experience.application.dto.ExperienceYear +import com.bamyanggang.apimodule.domain.experience.application.dto.GetExperience import com.bamyanggang.apimodule.domain.experience.application.service.ExperienceCreateService import com.bamyanggang.apimodule.domain.experience.application.service.ExperienceDeleteService import com.bamyanggang.apimodule.domain.experience.application.service.ExperienceEditService @@ -20,8 +23,8 @@ class ExperienceController( @RequestParam("parent-tag") parentTagId: UUID, @RequestParam("child-tag", required = false) childTagId: UUID? ) : GetExperience.Response = - when (childTagId){ - null -> experienceGetService.getExperienceByYearAndParentTag(year, parentTagId) + when { + childTagId == null -> experienceGetService.getExperienceByYearAndParentTag(year, parentTagId) else -> experienceGetService.getExperienceByYearAndChildTag(year, childTagId) } diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagCreateService.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagCreateService.kt index 1a112aac..9913c2e0 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagCreateService.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagCreateService.kt @@ -19,7 +19,7 @@ class TagCreateService( fun createChildTag(request: CreateTag.Request, parentTagId: UUID): CreateTag.Response { return getAuthenticationPrincipal() .also { - val userChildTags = tagReader.readAllChildTagsByUserId(it, parentTagId) + val userChildTags = tagReader.readAllChildTagsByUserIdAndParentTagId(it, parentTagId) validateTagCountLimit(userChildTags.size) validateDuplicatedName(userChildTags, request.name) }.let { diff --git a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagGetService.kt b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagGetService.kt index 73fe8425..41520879 100644 --- a/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagGetService.kt +++ b/Api-Module/src/main/kotlin/com/bamyanggang/apimodule/domain/tag/application/service/TagGetService.kt @@ -28,7 +28,7 @@ class TagGetService( @Transactional(readOnly = true) fun getAllChildTagsByParentTagId(parentTagId: UUID): GetChildTag.Response { val tagDetails = getAuthenticationPrincipal().let { - tagReader.readAllChildTagsByUserId(it, parentTagId).map { tag -> + tagReader.readAllChildTagsByUserIdAndParentTagId(it, parentTagId).map { tag -> GetParentTag.TagDetail(tag.id, tag.name) } } @@ -84,23 +84,22 @@ class TagGetService( @Transactional(readOnly = true) fun getAllChildTagsByYearAndParentTagId(year: Int, parentTagId: UUID): GetChildTag.TotalTagInfo { - val currentUserId = getAuthenticationPrincipal() - val experiences = experienceReader.readByUserIDAndYearDesc(year, currentUserId) - val experienceGroup = experiences.groupBy { it.childTagId } - - val tagSummaries = experienceGroup.map { - val childTag = tagReader.readById(it.key) + val childTags = getAllChildTagsByParentTagId(parentTagId).tags.map { tagReader.readById(it.id) } + var totalExperienceCount = 0 + val childTagDetails = childTags.map { + val experiences = experienceReader.readByChildTagIdAndYear(it.id, year) + totalExperienceCount += experiences.size GetChildTag.ChildTagSummary( - childTag.id, - childTag.name, - it.value.size + it.id, + it.name, + experiences.size ) } return GetChildTag.TotalTagInfo( - experiences.size, - tagSummaries + totalExperienceCount, + childTagDetails ) } diff --git a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/repository/ExperienceRepository.kt b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/repository/ExperienceRepository.kt index 81b01398..172e843a 100644 --- a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/repository/ExperienceRepository.kt +++ b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/repository/ExperienceRepository.kt @@ -12,4 +12,5 @@ interface ExperienceRepository { fun findByYearAndParentTagId(year: Int, parentTagId: UUID): List fun findByYearAndChildTagId(year: Int, childTagId: UUID): List fun findByUserIdAndParentTagId(userId: UUID, parentTagId: UUID): List + fun findByUserIdAndParentTagIdAndYearDesc(year: Int, parentTagId: UUID, userId: UUID): List } diff --git a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/service/ExperienceReader.kt b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/service/ExperienceReader.kt index 130407e1..276f0334 100644 --- a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/service/ExperienceReader.kt +++ b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/experience/service/ExperienceReader.kt @@ -30,11 +30,19 @@ class ExperienceReader( return experienceRepository.findByUserIdAndYearDesc(year, userId) } - fun readByYearAndTagId(year: Int, parentTagId: UUID) : List { + fun readByYearAndParentTagId(year: Int, parentTagId: UUID) : List { return experienceRepository.findByYearAndParentTagId(year, parentTagId) } fun readByUserIdAndParentTagId(userId: UUID, parentTagId: UUID): List { return experienceRepository.findByUserIdAndParentTagId(userId, parentTagId) } + + fun readByUserIdAndParentTagIdAndYearDesc(year: Int, parentTagId: UUID, userId: UUID): List { + return experienceRepository.findByUserIdAndParentTagIdAndYearDesc(year, parentTagId, userId) + } + + fun readByChildTagIdAndYear(childTagId: UUID, year: Int): List { + return experienceRepository.findByYearAndChildTagId(year, childTagId) + } } diff --git a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/repository/TagRepository.kt b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/repository/TagRepository.kt index 98db685d..d78d4ad4 100644 --- a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/repository/TagRepository.kt +++ b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/repository/TagRepository.kt @@ -7,7 +7,7 @@ interface TagRepository { fun save(newTag : Tag) fun findById(id : UUID) : Tag fun findAllParentTagsByUserId(userId: UUID): List - fun findAllChildTagsByUserId(userId: UUID, parentId: UUID): List + fun findAllChildTagsByUserIdAndParentTagId(userId: UUID, parentId: UUID): List fun deleteByTagId(tagId: UUID) fun isExistById(tagId: UUID): Boolean fun findByParentTagIds(tagParentTagIds: List): List diff --git a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/service/TagReader.kt b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/service/TagReader.kt index 5fbfe60c..d8195fae 100644 --- a/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/service/TagReader.kt +++ b/Domain-Module/src/main/kotlin/com/bamyanggang/domainmodule/domain/tag/service/TagReader.kt @@ -13,8 +13,8 @@ class TagReader( return tagRepository.findAllParentTagsByUserId(userId) } - fun readAllChildTagsByUserId(userId: UUID, parentId: UUID): List { - return tagRepository.findAllChildTagsByUserId(userId, parentId) + fun readAllChildTagsByUserIdAndParentTagId(userId: UUID, parentId: UUID): List { + return tagRepository.findAllChildTagsByUserIdAndParentTagId(userId, parentId) } fun readById(tagId: UUID): Tag { diff --git a/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/ExperienceRepositoryImpl.java b/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/ExperienceRepositoryImpl.java index c81b57bb..da77d3f3 100644 --- a/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/ExperienceRepositoryImpl.java +++ b/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/ExperienceRepositoryImpl.java @@ -83,4 +83,15 @@ public List findByUserIdAndParentTagId(UUID userId, UUID parentTagId return experienceJpaEntities.stream().map(experienceMapper::toExperienceDomainEntity).toList(); } + + @Override + public List findByUserIdAndParentTagIdAndYearDesc(int year, UUID parentTagId, UUID userId) { + LocalDateTime startYear = LocalDateTime.of(year, 1, 1, 0, 0); + LocalDateTime endYear = LocalDateTime.of(year, 12, 31, 23, 59); + + List experienceJpaEntities = experienceJpaRepository + .findByUserIdAndParentTagIdAndCreatedAtBetweenOrderByCreatedAtDesc( + userId, parentTagId, startYear, endYear); + return experienceJpaEntities.stream().map(experienceMapper::toExperienceDomainEntity).toList(); + } } diff --git a/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/jpa/repository/ExperienceJpaRepository.java b/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/jpa/repository/ExperienceJpaRepository.java index 6029fec0..32e26396 100644 --- a/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/jpa/repository/ExperienceJpaRepository.java +++ b/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/experience/jpa/repository/ExperienceJpaRepository.java @@ -12,4 +12,6 @@ public interface ExperienceJpaRepository extends JpaRepository findByParentTagIdAndCreatedAtBetweenOrderByCreatedAtDesc(UUID parentTagId, LocalDateTime startYear, LocalDateTime endYear); List findByChildTagIdAndCreatedAtBetweenOrderByCreatedAtDesc(UUID childTagId, LocalDateTime startYear, LocalDateTime endYear); List findByUserIdAndParentTagId(UUID userId, UUID parentTagId); + List findByUserIdAndParentTagIdAndCreatedAtBetweenOrderByCreatedAtDesc( + UUID userId, UUID parentTagId, LocalDateTime startYear, LocalDateTime endYear); } diff --git a/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/tag/TagRepositoryImpl.java b/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/tag/TagRepositoryImpl.java index 1c967db8..d867cca1 100644 --- a/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/tag/TagRepositoryImpl.java +++ b/Infrastructure-Module/persistence/src/main/java/com/bamyanggang/persistence/tag/TagRepositoryImpl.java @@ -3,7 +3,6 @@ import com.bamyanggang.domainmodule.domain.tag.aggregate.Tag; import com.bamyanggang.domainmodule.domain.tag.exception.TagException.NotFoundTag; import com.bamyanggang.domainmodule.domain.tag.repository.TagRepository; -import com.bamyanggang.persistence.common.exception.PersistenceException.NotFound; import com.bamyanggang.persistence.tag.jpa.entity.TagJpaEntity; import com.bamyanggang.persistence.tag.jpa.repository.TagJpaRepository; import com.bamyanggang.persistence.tag.mapper.TagMapper; @@ -31,7 +30,7 @@ public List findAllParentTagsByUserId(UUID userId) { } @Override - public List findAllChildTagsByUserId(UUID userId, UUID parentTagId) { + public List findAllChildTagsByUserIdAndParentTagId(UUID userId, UUID parentTagId) { List childTagJpaEntities = tagJpaRepository.findAllByUserIdAndParentTagId(userId, parentTagId); return childTagJpaEntities.stream().map(tagMapper::toDomainEntity).toList(); }