mirror of https://github.com/usbharu/Hideout.git
feat: ReactionRepositoryを追加
This commit is contained in:
parent
72c9b8b7c5
commit
daf676503d
|
@ -2,6 +2,6 @@ package dev.usbharu.hideout.core.domain.model.reaction
|
||||||
|
|
||||||
interface ReactionRepository {
|
interface ReactionRepository {
|
||||||
suspend fun save(reaction: Reaction): Reaction
|
suspend fun save(reaction: Reaction): Reaction
|
||||||
suspend fun findById(reactionId: String): Reaction?
|
suspend fun findById(reactionId: ReactionId): Reaction?
|
||||||
suspend fun delete(reaction: Reaction)
|
suspend fun delete(reaction: Reaction)
|
||||||
}
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
package dev.usbharu.hideout.core.infrastructure.exposedrepository
|
||||||
|
|
||||||
|
import dev.usbharu.hideout.core.domain.model.actor.ActorId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.emoji.CustomEmojiId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.emoji.UnicodeEmoji
|
||||||
|
import dev.usbharu.hideout.core.domain.model.post.PostId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.reaction.Reaction
|
||||||
|
import dev.usbharu.hideout.core.domain.model.reaction.ReactionId
|
||||||
|
import dev.usbharu.hideout.core.domain.model.reaction.ReactionRepository
|
||||||
|
import dev.usbharu.hideout.core.domain.shared.domainevent.DomainEventPublisher
|
||||||
|
import dev.usbharu.hideout.core.domain.shared.repository.DomainEventPublishableRepository
|
||||||
|
import org.jetbrains.exposed.sql.*
|
||||||
|
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
|
||||||
|
import org.jetbrains.exposed.sql.javatime.timestamp
|
||||||
|
import org.slf4j.Logger
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Repository
|
||||||
|
|
||||||
|
@Repository
|
||||||
|
class ExposedReactionRepository(override val domainEventPublisher: DomainEventPublisher) : ReactionRepository,
|
||||||
|
AbstractRepository(), DomainEventPublishableRepository<Reaction> {
|
||||||
|
|
||||||
|
override val logger: Logger
|
||||||
|
get() = Companion.logger
|
||||||
|
|
||||||
|
|
||||||
|
override suspend fun save(reaction: Reaction): Reaction {
|
||||||
|
return query {
|
||||||
|
Reactions.upsert {
|
||||||
|
it[Reactions.id] = reaction.id.value
|
||||||
|
it[Reactions.postId] = reaction.postId.id
|
||||||
|
it[Reactions.actorId] = reaction.actorId.id
|
||||||
|
it[Reactions.customEmojiId] = reaction.customEmojiId?.emojiId
|
||||||
|
it[Reactions.unicodeEmoji] = reaction.unicodeEmoji.name
|
||||||
|
}
|
||||||
|
onComplete {
|
||||||
|
update(reaction)
|
||||||
|
}
|
||||||
|
reaction
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun findById(reactionId: ReactionId): Reaction? {
|
||||||
|
return query {
|
||||||
|
Reactions.selectAll().where {
|
||||||
|
Reactions.id eq reactionId.value
|
||||||
|
}.singleOrNull()?.toReaction()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override suspend fun delete(reaction: Reaction) {
|
||||||
|
return query {
|
||||||
|
Reactions.deleteWhere {
|
||||||
|
Reactions.id eq reaction.id.value
|
||||||
|
}
|
||||||
|
onComplete {
|
||||||
|
update(reaction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private val logger = LoggerFactory.getLogger(ExposedReactionRepository::class.java)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ResultRow.toReaction(): Reaction {
|
||||||
|
return Reaction(
|
||||||
|
ReactionId(this[Reactions.id]),
|
||||||
|
PostId(this[Reactions.postId]),
|
||||||
|
ActorId(this[Reactions.actorId]),
|
||||||
|
this[Reactions.customEmojiId]?.let { CustomEmojiId(it) },
|
||||||
|
UnicodeEmoji(this[Reactions.unicodeEmoji]),
|
||||||
|
this[Reactions.createdAt]
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
object Reactions : Table("Reactions") {
|
||||||
|
val id = long("id")
|
||||||
|
val postId = long("post_id").references(Posts.id)
|
||||||
|
val actorId = long("actor_id").references(Actors.id)
|
||||||
|
val customEmojiId = long("custom_emoji_id").references(CustomEmojis.id).nullable()
|
||||||
|
val unicodeEmoji = varchar("unicode_emoji", 100)
|
||||||
|
val createdAt = timestamp("created_at")
|
||||||
|
override val primaryKey: PrimaryKey = PrimaryKey(id)
|
||||||
|
}
|
Loading…
Reference in New Issue