diff --git a/domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecordDomainService.kt b/domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecordDomainService.kt index cafb5faf..ad510b61 100644 --- a/domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecordDomainService.kt +++ b/domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecordDomainService.kt @@ -102,8 +102,36 @@ class ReadingRecordDomainService( sort: ReadingRecordSortType?, pageable: Pageable ): Page { - return readingRecordRepository.findReadingRecordsByDynamicCondition(userBookId, sort, pageable) - .map { buildReadingRecordInfoVO(it) } + val readingRecordPage = readingRecordRepository.findReadingRecordsByDynamicCondition(userBookId, sort, pageable) + if (readingRecordPage.isEmpty) { + return Page.empty(pageable) + } + + val readingRecords = readingRecordPage.content + val readingRecordIds = readingRecords.map { it.id.value } + + val readingRecordTags = readingRecordTagRepository.findByReadingRecordIdIn(readingRecordIds) + val tagIds = readingRecordTags.map { it.tagId.value } + val tagsById = tagRepository.findByIds(tagIds).associateBy { it.id.value } + + val tagsByReadingRecordId = readingRecordTags + .groupBy { it.readingRecordId.value } + .mapValues { (_, tags) -> + tags.mapNotNull { tagsById[it.tagId.value] } + } + + val userBook = userBookRepository.findById(userBookId) + + return readingRecordPage.map { readingRecord -> + ReadingRecordInfoVO.newInstance( + readingRecord = readingRecord, + emotionTags = tagsByReadingRecordId[readingRecord.id.value]?.map { it.name } ?: emptyList(), + bookTitle = userBook?.title, + bookPublisher = userBook?.publisher, + bookCoverImageUrl = userBook?.coverImageUrl, + author = userBook?.author + ) + } } fun modifyReadingRecord( diff --git a/domain/src/main/kotlin/org/yapp/domain/readingrecordtag/ReadingRecordTagRepository.kt b/domain/src/main/kotlin/org/yapp/domain/readingrecordtag/ReadingRecordTagRepository.kt index 9c481b5a..5982f6e8 100644 --- a/domain/src/main/kotlin/org/yapp/domain/readingrecordtag/ReadingRecordTagRepository.kt +++ b/domain/src/main/kotlin/org/yapp/domain/readingrecordtag/ReadingRecordTagRepository.kt @@ -5,6 +5,7 @@ import java.util.UUID interface ReadingRecordTagRepository { fun saveAll(readingRecordTags: List): List fun findByReadingRecordId(readingRecordId: UUID): List + fun findByReadingRecordIdIn(readingRecordIds: List): List fun deleteAllByReadingRecordId(readingRecordId: UUID) fun countTagsByUserIdAndUserBookIdAndCategories(userId: UUID, userBookId: UUID, categories: List): Map } diff --git a/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/JpaReadingRecordTagRepository.kt b/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/JpaReadingRecordTagRepository.kt index ed217a66..8ba5afbc 100644 --- a/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/JpaReadingRecordTagRepository.kt +++ b/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/JpaReadingRecordTagRepository.kt @@ -6,5 +6,6 @@ import java.util.* interface JpaReadingRecordTagRepository : JpaRepository, JpaReadingRecordTagQuerydslRepository { fun findByReadingRecordId(readingRecordId: UUID): List + fun findByReadingRecordIdIn(readingRecordIds: List): List fun deleteAllByReadingRecordId(readingRecordId: UUID) } diff --git a/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/impl/ReadingRecordTagRepositoryImpl.kt b/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/impl/ReadingRecordTagRepositoryImpl.kt index 5893f196..aca8ca19 100644 --- a/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/impl/ReadingRecordTagRepositoryImpl.kt +++ b/infra/src/main/kotlin/org/yapp/infra/readingrecordtag/repository/impl/ReadingRecordTagRepositoryImpl.kt @@ -20,7 +20,18 @@ class ReadingRecordTagRepositoryImpl( return jpaReadingRecordTagRepository.findByReadingRecordId(readingRecordId).map { it.toDomain() } } - override fun countTagsByUserIdAndUserBookIdAndCategories(userId: UUID, userBookId: UUID, categories: List): Map { + override fun findByReadingRecordIdIn(readingRecordIds: List): List { + if (readingRecordIds.isEmpty()) return emptyList() + return jpaReadingRecordTagRepository + .findByReadingRecordIdIn(readingRecordIds) + .map { it.toDomain() } + } + + override fun countTagsByUserIdAndUserBookIdAndCategories( + userId: UUID, + userBookId: UUID, + categories: List + ): Map { return jpaReadingRecordTagRepository.countTagsByUserIdAndUserBookIdAndCategories(userId, userBookId, categories) }