mirror of https://github.com/usbharu/Hideout.git
refactor: ReactionのQueryServiceを追加
This commit is contained in:
parent
1d4e916f3a
commit
ca541278df
|
@ -0,0 +1,14 @@
|
||||||
|
package dev.usbharu.hideout.query
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.entity.Reaction
|
||||||
|
|
||||||
|
interface ReactionQueryService {
|
||||||
|
suspend fun findByPostId(postId: Long): List<Reaction>
|
||||||
|
|
||||||
|
@Suppress("FunctionMaxLength")
|
||||||
|
suspend fun findByPostIdAndUserIdAndEmojiId(postId: Long, userId: Long, emojiId: Long): Reaction
|
||||||
|
|
||||||
|
suspend fun reactionAlreadyExist(postId: Long, userId: Long, emojiId: Long): Boolean
|
||||||
|
|
||||||
|
suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long)
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package dev.usbharu.hideout.query
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.domain.model.hideout.entity.Reaction
|
||||||
|
import dev.usbharu.hideout.repository.Reactions
|
||||||
|
import dev.usbharu.hideout.repository.toReaction
|
||||||
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
|
||||||
|
import org.jetbrains.exposed.sql.and
|
||||||
|
import org.jetbrains.exposed.sql.deleteWhere
|
||||||
|
import org.jetbrains.exposed.sql.select
|
||||||
|
import org.koin.core.annotation.Single
|
||||||
|
|
||||||
|
@Single
|
||||||
|
class ReactionQueryServiceImpl : ReactionQueryService {
|
||||||
|
override suspend fun findByPostId(postId: Long): List<Reaction> {
|
||||||
|
return Reactions.select {
|
||||||
|
Reactions.postId.eq(postId)
|
||||||
|
}.map { it.toReaction() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun findByPostIdAndUserIdAndEmojiId(postId: Long, userId: Long, emojiId: Long): Reaction {
|
||||||
|
return Reactions
|
||||||
|
.select {
|
||||||
|
Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)).and(
|
||||||
|
Reactions.emojiId.eq(emojiId)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
.single()
|
||||||
|
.toReaction()
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun reactionAlreadyExist(postId: Long, userId: Long, emojiId: Long): Boolean {
|
||||||
|
return Reactions.select {
|
||||||
|
Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)).and(
|
||||||
|
Reactions.emojiId.eq(emojiId)
|
||||||
|
)
|
||||||
|
}.empty().not()
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long) {
|
||||||
|
Reactions.deleteWhere { Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)) }
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,11 +5,5 @@ import dev.usbharu.hideout.domain.model.hideout.entity.Reaction
|
||||||
interface ReactionRepository {
|
interface ReactionRepository {
|
||||||
suspend fun generateId(): Long
|
suspend fun generateId(): Long
|
||||||
suspend fun save(reaction: Reaction): Reaction
|
suspend fun save(reaction: Reaction): Reaction
|
||||||
suspend fun reactionAlreadyExist(postId: Long, userId: Long, emojiId: Long): Boolean
|
|
||||||
suspend fun findByPostId(postId: Long): List<Reaction>
|
|
||||||
suspend fun delete(reaction: Reaction): Reaction
|
suspend fun delete(reaction: Reaction): Reaction
|
||||||
suspend fun deleteById(id: Long)
|
|
||||||
suspend fun deleteByPostId(postId: Long)
|
|
||||||
suspend fun deleteByUserId(userId: Long)
|
|
||||||
suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,24 +79,6 @@ class ReactionRepositoryImpl(
|
||||||
return reaction
|
return reaction
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun deleteById(id: Long) {
|
|
||||||
query {
|
|
||||||
Reactions.deleteWhere { Reactions.id.eq(id) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun deleteByPostId(postId: Long) {
|
|
||||||
query {
|
|
||||||
Reactions.deleteWhere { Reactions.postId.eq(postId) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun deleteByUserId(userId: Long) {
|
|
||||||
query {
|
|
||||||
Reactions.deleteWhere { Reactions.userId.eq(userId) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long) {
|
override suspend fun deleteByPostIdAndUserId(postId: Long, userId: Long) {
|
||||||
query {
|
query {
|
||||||
Reactions.deleteWhere { Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)) }
|
Reactions.deleteWhere { Reactions.postId.eq(postId).and(Reactions.userId.eq(userId)) }
|
||||||
|
|
|
@ -3,6 +3,7 @@ package dev.usbharu.hideout.service.reaction
|
||||||
import dev.usbharu.hideout.domain.model.hideout.dto.Account
|
import dev.usbharu.hideout.domain.model.hideout.dto.Account
|
||||||
import dev.usbharu.hideout.domain.model.hideout.dto.ReactionResponse
|
import dev.usbharu.hideout.domain.model.hideout.dto.ReactionResponse
|
||||||
import dev.usbharu.hideout.domain.model.hideout.entity.Reaction
|
import dev.usbharu.hideout.domain.model.hideout.entity.Reaction
|
||||||
|
import dev.usbharu.hideout.query.ReactionQueryService
|
||||||
import dev.usbharu.hideout.repository.ReactionRepository
|
import dev.usbharu.hideout.repository.ReactionRepository
|
||||||
import dev.usbharu.hideout.repository.Reactions
|
import dev.usbharu.hideout.repository.Reactions
|
||||||
import dev.usbharu.hideout.repository.Users
|
import dev.usbharu.hideout.repository.Users
|
||||||
|
@ -16,10 +17,11 @@ import org.koin.core.annotation.Single
|
||||||
@Single
|
@Single
|
||||||
class ReactionServiceImpl(
|
class ReactionServiceImpl(
|
||||||
private val reactionRepository: ReactionRepository,
|
private val reactionRepository: ReactionRepository,
|
||||||
private val activityPubReactionService: ActivityPubReactionService
|
private val activityPubReactionService: ActivityPubReactionService,
|
||||||
|
private val reactionQueryService: ReactionQueryService
|
||||||
) : IReactionService {
|
) : IReactionService {
|
||||||
override suspend fun receiveReaction(name: String, domain: String, userId: Long, postId: Long) {
|
override suspend fun receiveReaction(name: String, domain: String, userId: Long, postId: Long) {
|
||||||
if (reactionRepository.reactionAlreadyExist(postId, userId, 0).not()) {
|
if (reactionQueryService.reactionAlreadyExist(postId, userId, 0).not()) {
|
||||||
reactionRepository.save(
|
reactionRepository.save(
|
||||||
Reaction(reactionRepository.generateId(), 0, postId, userId)
|
Reaction(reactionRepository.generateId(), 0, postId, userId)
|
||||||
)
|
)
|
||||||
|
@ -27,9 +29,9 @@ class ReactionServiceImpl(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun sendReaction(name: String, userId: Long, postId: Long) {
|
override suspend fun sendReaction(name: String, userId: Long, postId: Long) {
|
||||||
if (reactionRepository.reactionAlreadyExist(postId, userId, 0)) {
|
if (reactionQueryService.reactionAlreadyExist(postId, userId, 0)) {
|
||||||
// delete
|
// delete
|
||||||
reactionRepository.deleteByPostIdAndUserId(postId, userId)
|
reactionQueryService.deleteByPostIdAndUserId(postId, userId)
|
||||||
} else {
|
} else {
|
||||||
val reaction = Reaction(reactionRepository.generateId(), 0, postId, userId)
|
val reaction = Reaction(reactionRepository.generateId(), 0, postId, userId)
|
||||||
reactionRepository.save(reaction)
|
reactionRepository.save(reaction)
|
||||||
|
@ -38,7 +40,7 @@ class ReactionServiceImpl(
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun removeReaction(userId: Long, postId: Long) {
|
override suspend fun removeReaction(userId: Long, postId: Long) {
|
||||||
reactionRepository.deleteByPostIdAndUserId(postId, userId)
|
reactionQueryService.deleteByPostIdAndUserId(postId, userId)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun findByPostIdForUser(postId: Long, userId: Long): List<ReactionResponse> {
|
override suspend fun findByPostIdForUser(postId: Long, userId: Long): List<ReactionResponse> {
|
||||||
|
|
Loading…
Reference in New Issue