diff --git a/article-api/src/main/kotlin/com/sns/article/component/article/application/ArticleCommandService.kt b/article-api/src/main/kotlin/com/sns/article/component/article/application/ArticleCommandService.kt index defbc60..0b88229 100644 --- a/article-api/src/main/kotlin/com/sns/article/component/article/application/ArticleCommandService.kt +++ b/article-api/src/main/kotlin/com/sns/article/component/article/application/ArticleCommandService.kt @@ -6,11 +6,14 @@ import com.sns.article.component.article.domains.ArticleScope import com.sns.article.component.article.repositories.ArticleRepository import com.sns.article.component.comment.domains.Comment import com.sns.article.component.comment.repositories.CommentRepository -import com.sns.article.component.reaction.domains.ReactionRepository +import com.sns.article.component.reaction.domains.ReactionTarget +import com.sns.article.component.reaction.domains.ReactionTargetType +import com.sns.article.component.reaction.repositories.ReactionRepository import com.sns.commons.exceptions.NoAuthorityException import com.sns.commons.exceptions.NotFoundException import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional +import kotlin.streams.toList /** * @author Hyounglin Jun @@ -55,7 +58,13 @@ class ArticleCommandService( articleRepository.delete(article) commentRepository.findAllByRootIdInAndRootType(listOf(articleId.id.toString()), Comment.Root.Type.ARTICLE) - .let { commentRepository.deleteAll(it) } - // FIXME reaction 을 삭제하는 방법 확인 (DB 정의가 없음) + .let { + commentRepository.deleteAll(it) + reactionRepository.findAllByTargetIn(it.stream() + .map { a -> ReactionTarget(ReactionTargetType.COMMENT, a.id!!) } + .toList()) + .let { reactions -> reactionRepository.deleteAll(reactions) } + } + reactionRepository.findAllByTargetIn(listOf(ReactionTarget(ReactionTargetType.ARTICLE, articleId.id.toLong()))) } } diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCommandService.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCommandService.kt index fc731cc..7762180 100644 --- a/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCommandService.kt +++ b/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCommandService.kt @@ -1,10 +1,10 @@ package com.sns.article.component.reaction.application import com.sns.article.component.reaction.domains.Reaction -import com.sns.article.component.reaction.domains.ReactionRepository import com.sns.article.component.reaction.domains.ReactionTarget import com.sns.article.component.reaction.domains.ReactionValidator import com.sns.article.component.reaction.dtos.ReactionDto +import com.sns.article.component.reaction.repositories.ReactionRepository import com.sns.article.endpoints.reaction.requests.ReactionCreateRequest import com.sns.commons.exceptions.NotFoundException import org.springframework.context.ApplicationEventPublisher diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCreatedEventHandler.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCreatedEventHandler.kt index 3728717..56a8955 100644 --- a/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCreatedEventHandler.kt +++ b/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionCreatedEventHandler.kt @@ -2,7 +2,7 @@ package com.sns.article.component.reaction.application import com.sns.article.component.reaction.domains.ReactionCreatedEvent import com.sns.article.component.reaction.domains.ReactionNotFoundException -import com.sns.article.component.reaction.domains.ReactionRepository +import com.sns.article.component.reaction.repositories.ReactionRepository import org.springframework.context.event.EventListener import org.springframework.stereotype.Component import org.springframework.transaction.annotation.Transactional diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionQueryService.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionQueryService.kt index 517df7a..4751cab 100644 --- a/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionQueryService.kt +++ b/article-api/src/main/kotlin/com/sns/article/component/reaction/application/ReactionQueryService.kt @@ -1,8 +1,8 @@ package com.sns.article.component.reaction.application import com.sns.article.component.reaction.domains.ReactionNotFoundException -import com.sns.article.component.reaction.domains.ReactionRepository import com.sns.article.component.reaction.dtos.ReactionDto +import com.sns.article.component.reaction.repositories.ReactionRepository import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/domains/ReactionRepository.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/domains/ReactionRepository.kt deleted file mode 100644 index 687478d..0000000 --- a/article-api/src/main/kotlin/com/sns/article/component/reaction/domains/ReactionRepository.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.sns.article.component.reaction.domains - -import java.util.* - -interface ReactionRepository { - fun save(reaction: Reaction): Reaction - fun findById(id: Long): Optional - fun deleteById(id: Long) -} diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/DefaultReactionRepository.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/DefaultReactionRepository.kt new file mode 100644 index 0000000..b5d4ff8 --- /dev/null +++ b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/DefaultReactionRepository.kt @@ -0,0 +1,8 @@ +package com.sns.article.component.reaction.repositories + +import org.springframework.stereotype.Repository + + +@Repository +class DefaultReactionRepository(reactionCrudRepository: ReactionCrudRepository) : ReactionRepository, + ReactionCrudRepository by reactionCrudRepository diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/ReactionCrudRepository.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/ReactionCrudRepository.kt new file mode 100644 index 0000000..4cf4b89 --- /dev/null +++ b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/ReactionCrudRepository.kt @@ -0,0 +1,14 @@ +package com.sns.article.component.reaction.repositories + +import com.sns.article.component.reaction.domains.Reaction +import com.sns.article.component.reaction.domains.ReactionTarget +import org.springframework.data.repository.CrudRepository +import org.springframework.stereotype.Repository + +/** + * Created by JunSeok Youn on 2022/03/06 + */ +@Repository +interface ReactionCrudRepository : CrudRepository { + fun findAllByTargetIn(targets: List): List +} diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/ReactionRepository.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/ReactionRepository.kt new file mode 100644 index 0000000..3ff2145 --- /dev/null +++ b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/ReactionRepository.kt @@ -0,0 +1,14 @@ +package com.sns.article.component.reaction.repositories + +import com.sns.article.component.reaction.domains.Reaction +import com.sns.article.component.reaction.domains.ReactionTarget +import org.springframework.data.repository.CrudRepository +import org.springframework.stereotype.Repository + +/** + * Created by JunSeok Youn on 2022/03/06 + */ +@Repository +interface ReactionRepository : CrudRepository { + fun findAllByTargetIn(targets: List): List +} diff --git a/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/SpringDataJdbcReactionRepository.kt b/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/SpringDataJdbcReactionRepository.kt deleted file mode 100644 index c711e60..0000000 --- a/article-api/src/main/kotlin/com/sns/article/component/reaction/repositories/SpringDataJdbcReactionRepository.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.sns.article.component.reaction.repositories - -import com.sns.article.component.reaction.domains.Reaction -import com.sns.article.component.reaction.domains.ReactionRepository -import org.springframework.data.repository.CrudRepository -import org.springframework.stereotype.Repository - -@Repository -interface SpringDataJdbcReactionRepository : ReactionRepository, CrudRepository