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,27 +37,14 @@ class CustomEmojiRepositoryImpl : CustomEmojiRepository,
get() = Companion.logger
override suspend fun save(customEmoji: CustomEmoji): CustomEmoji = query {
val singleOrNull =
CustomEmojis.selectAll().where { CustomEmojis.id eq customEmoji.id.emojiId }.forUpdate().singleOrNull()
if (singleOrNull == null) {
CustomEmojis.insert {
it[id] = 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
}
} 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
}
CustomEmojis.upsert {
it[id] = 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
}

View File

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

View File

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

View File

@ -33,36 +33,21 @@ class InstanceRepositoryImpl : InstanceRepository,
get() = Companion.logger
override suspend fun save(instance: InstanceEntity): InstanceEntity = query {
if (Instance.selectAll().where { Instance.id.eq(instance.id.instanceId) }.forUpdate().empty()) {
Instance.insert {
it[id] = 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
}
} 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
}
Instance.upsert {
it[id] = 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
}

View File

@ -31,6 +31,22 @@ class MediaRepositoryImpl : MediaRepository, AbstractRepository() {
override val logger: 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? {
return query {
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 {
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 {
val userDetail1 = query {
val singleOrNull =
UserDetails.selectAll().where { UserDetails.id eq userDetail.id.id }.forUpdate().singleOrNull()
if (singleOrNull == null) {
UserDetails.insert {
it[id] = 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
}
} 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
}
UserDetails.upsert {
it[id] = 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 {
update(userDetail)
}