Merge pull request #587 from usbharu/use-upsert

feat: insertとupdateを使用していた部分をupsertに置き換え
This commit is contained in:
usbharu 2024-09-07 00:06:09 +09:00 committed by GitHub
commit ebef329120
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 48 additions and 102 deletions

View File

@ -37,10 +37,7 @@ 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()
if (singleOrNull == null) {
CustomEmojis.insert {
it[id] = customEmoji.id.emojiId it[id] = customEmoji.id.emojiId
it[name] = customEmoji.name it[name] = customEmoji.name
it[domain] = customEmoji.domain.domain it[domain] = customEmoji.domain.domain
@ -49,16 +46,6 @@ class CustomEmojiRepositoryImpl : CustomEmojiRepository,
it[category] = customEmoji.category it[category] = customEmoji.category
it[createdAt] = customEmoji.createdAt 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,8 +33,7 @@ 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
@ -48,21 +47,7 @@ class InstanceRepositoryImpl : InstanceRepository,
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,37 +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,10 +41,7 @@ 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()
if (singleOrNull == null) {
UserDetails.insert {
it[id] = userDetail.id.id it[id] = userDetail.id.id
it[actorId] = userDetail.actorId.id it[actorId] = userDetail.actorId.id
it[password] = userDetail.password.password it[password] = userDetail.password.password
@ -52,15 +49,7 @@ class UserDetailRepositoryImpl(override val domainEventPublisher: DomainEventPub
it[lastMigration] = userDetail.lastMigration it[lastMigration] = userDetail.lastMigration
it[homeTimelineId] = userDetail.homeTimelineId?.value 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)
} }