feat: insertとupdateを使用していた部分をupsertに置き換え

This commit is contained in:
usbharu 2024-09-06 17:53:58 +09:00
parent 92b6418202
commit 96af8fa144
Signed by: usbharu
GPG Key ID: 6556747BF94EEBC8
6 changed files with 48 additions and 101 deletions

View File

@ -37,27 +37,14 @@ class CustomEmojiRepositoryImpl : CustomEmojiRepository,
get() = Companion.logger get() = Companion.logger
override suspend fun save(customEmoji: CustomEmoji): CustomEmoji = query { override suspend fun save(customEmoji: CustomEmoji): CustomEmoji = query {
val singleOrNull = CustomEmojis.upsert {
CustomEmojis.selectAll().where { CustomEmojis.id eq customEmoji.id.emojiId }.forUpdate().singleOrNull() it[id] = customEmoji.id.emojiId
if (singleOrNull == null) { it[name] = customEmoji.name
CustomEmojis.insert { it[domain] = customEmoji.domain.domain
it[id] = customEmoji.id.emojiId it[instanceId] = customEmoji.instanceId.instanceId
it[name] = customEmoji.name it[url] = customEmoji.url.toString()
it[domain] = customEmoji.domain.domain it[category] = customEmoji.category
it[instanceId] = customEmoji.instanceId.instanceId it[createdAt] = customEmoji.createdAt
it[url] = customEmoji.url.toString()
it[category] = customEmoji.category
it[createdAt] = customEmoji.createdAt
}
} else {
CustomEmojis.update({ CustomEmojis.id eq customEmoji.id.emojiId }) {
it[name] = customEmoji.name
it[domain] = customEmoji.domain.domain
it[instanceId] = customEmoji.instanceId.instanceId
it[url] = customEmoji.url.toString()
it[category] = customEmoji.category
it[createdAt] = customEmoji.createdAt
}
} }
return@query customEmoji return@query customEmoji
} }

View File

@ -19,7 +19,7 @@ class ExposedTimelineRelationshipRepository : AbstractRepository(), TimelineRela
override suspend fun save(timelineRelationship: TimelineRelationship): TimelineRelationship { override suspend fun save(timelineRelationship: TimelineRelationship): TimelineRelationship {
query { query {
TimelineRelationships.insert { TimelineRelationships.upsert {
it[id] = timelineRelationship.id.value it[id] = timelineRelationship.id.value
it[timelineId] = timelineRelationship.timelineId.value it[timelineId] = timelineRelationship.timelineId.value
it[actorId] = timelineRelationship.actorId.id it[actorId] = timelineRelationship.actorId.id

View File

@ -20,7 +20,7 @@ class ExposedTimelineRepository(override val domainEventPublisher: DomainEventPu
override suspend fun save(timeline: Timeline): Timeline { override suspend fun save(timeline: Timeline): Timeline {
query { query {
Timelines.insert { Timelines.upsert {
it[id] = timeline.id.value it[id] = timeline.id.value
it[userDetailId] = timeline.userDetailId.id it[userDetailId] = timeline.userDetailId.id
it[name] = timeline.name.value it[name] = timeline.name.value

View File

@ -33,36 +33,21 @@ class InstanceRepositoryImpl : InstanceRepository,
get() = Companion.logger get() = Companion.logger
override suspend fun save(instance: InstanceEntity): InstanceEntity = query { override suspend fun save(instance: InstanceEntity): InstanceEntity = query {
if (Instance.selectAll().where { Instance.id.eq(instance.id.instanceId) }.forUpdate().empty()) { Instance.upsert {
Instance.insert { it[id] = instance.id.instanceId
it[id] = instance.id.instanceId it[name] = instance.name.name
it[name] = instance.name.name it[description] = instance.description.description
it[description] = instance.description.description it[url] = instance.url.toString()
it[url] = instance.url.toString() it[iconUrl] = instance.iconUrl.toString()
it[iconUrl] = instance.iconUrl.toString() it[sharedInbox] = instance.sharedInbox?.toString()
it[sharedInbox] = instance.sharedInbox?.toString() it[software] = instance.software.software
it[software] = instance.software.software it[version] = instance.version.version
it[version] = instance.version.version it[isBlocked] = instance.isBlocked
it[isBlocked] = instance.isBlocked it[isMuted] = instance.isMuted
it[isMuted] = instance.isMuted it[moderationNote] = instance.moderationNote.note
it[moderationNote] = instance.moderationNote.note it[createdAt] = instance.createdAt
it[createdAt] = instance.createdAt
}
} else {
Instance.update({ Instance.id eq instance.id.instanceId }) {
it[name] = instance.name.name
it[description] = instance.description.description
it[url] = instance.url.toString()
it[iconUrl] = instance.iconUrl.toString()
it[sharedInbox] = instance.sharedInbox?.toString()
it[software] = instance.software.software
it[version] = instance.version.version
it[isBlocked] = instance.isBlocked
it[isMuted] = instance.isMuted
it[moderationNote] = instance.moderationNote.note
it[createdAt] = instance.createdAt
}
} }
return@query instance return@query instance
} }

View File

@ -31,6 +31,22 @@ class MediaRepositoryImpl : MediaRepository, AbstractRepository() {
override val logger: Logger override val logger: Logger
get() = Companion.logger get() = Companion.logger
override suspend fun save(media: EntityMedia): EntityMedia = query {
Media.upsert {
it[id] = media.id.id
it[name] = media.name.name
it[url] = media.url.toString()
it[remoteUrl] = media.remoteUrl?.toString()
it[thumbnailUrl] = media.thumbnailUrl?.toString()
it[type] = media.type.name
it[blurhash] = media.blurHash?.hash
it[mimeType] = media.mimeType.type + "/" + media.mimeType.subtype
it[description] = media.description?.description
it[actorId] = media.actorId.id
}
return@query media
}
override suspend fun findById(id: MediaId): dev.usbharu.hideout.core.domain.model.media.Media? { override suspend fun findById(id: MediaId): dev.usbharu.hideout.core.domain.model.media.Media? {
return query { return query {
return@query Media return@query Media
@ -55,36 +71,6 @@ class MediaRepositoryImpl : MediaRepository, AbstractRepository() {
} }
} }
override suspend fun save(media: EntityMedia): EntityMedia = query {
if (Media.selectAll().where { Media.id eq media.id.id }.forUpdate().singleOrNull() != null
) {
Media.update({ Media.id eq media.id.id }) {
it[name] = media.name.name
it[url] = media.url.toString()
it[remoteUrl] = media.remoteUrl?.toString()
it[thumbnailUrl] = media.thumbnailUrl?.toString()
it[type] = media.type.name
it[blurhash] = media.blurHash?.hash
it[mimeType] = media.mimeType.type + "/" + media.mimeType.subtype
it[description] = media.description?.description
it[actorId] = media.actorId.id
}
} else {
Media.insert {
it[id] = media.id.id
it[name] = media.name.name
it[url] = media.url.toString()
it[remoteUrl] = media.remoteUrl?.toString()
it[thumbnailUrl] = media.thumbnailUrl?.toString()
it[type] = media.type.name
it[blurhash] = media.blurHash?.hash
it[mimeType] = media.mimeType.type + "/" + media.mimeType.subtype
it[description] = media.description?.description
it[actorId] = media.actorId.id
}
}
return@query media
}
companion object { companion object {
private val logger = LoggerFactory.getLogger(MediaRepositoryImpl::class.java) private val logger = LoggerFactory.getLogger(MediaRepositoryImpl::class.java)

View File

@ -41,26 +41,15 @@ class UserDetailRepositoryImpl(override val domainEventPublisher: DomainEventPub
override suspend fun save(userDetail: UserDetail): UserDetail { override suspend fun save(userDetail: UserDetail): UserDetail {
val userDetail1 = query { val userDetail1 = query {
val singleOrNull = UserDetails.upsert {
UserDetails.selectAll().where { UserDetails.id eq userDetail.id.id }.forUpdate().singleOrNull() it[id] = userDetail.id.id
if (singleOrNull == null) { it[actorId] = userDetail.actorId.id
UserDetails.insert { it[password] = userDetail.password.password
it[id] = userDetail.id.id it[autoAcceptFolloweeFollowRequest] = userDetail.autoAcceptFolloweeFollowRequest
it[actorId] = userDetail.actorId.id it[lastMigration] = userDetail.lastMigration
it[password] = userDetail.password.password it[homeTimelineId] = userDetail.homeTimelineId?.value
it[autoAcceptFolloweeFollowRequest] = userDetail.autoAcceptFolloweeFollowRequest
it[lastMigration] = userDetail.lastMigration
it[homeTimelineId] = userDetail.homeTimelineId?.value
}
} else {
UserDetails.update({ UserDetails.id eq userDetail.id.id }) {
it[actorId] = userDetail.actorId.id
it[password] = userDetail.password.password
it[autoAcceptFolloweeFollowRequest] = userDetail.autoAcceptFolloweeFollowRequest
it[lastMigration] = userDetail.lastMigration
it[homeTimelineId] = userDetail.homeTimelineId?.value
}
} }
onComplete { onComplete {
update(userDetail) update(userDetail)
} }