From 96af8fa14465d9e800b72630db06fe33d28004ef Mon Sep 17 00:00:00 2001 From: usbharu <64310155+usbharu@users.noreply.github.com> Date: Fri, 6 Sep 2024 17:53:58 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20insert=E3=81=A8update=E3=82=92?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E3=81=97=E3=81=A6=E3=81=84=E3=81=9F=E9=83=A8?= =?UTF-8?q?=E5=88=86=E3=82=92upsert=E3=81=AB=E7=BD=AE=E3=81=8D=E6=8F=9B?= =?UTF-8?q?=E3=81=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CustomEmojiRepositoryImpl.kt | 29 ++++-------- .../ExposedTimelineRelationshipRepository.kt | 2 +- .../ExposedTimelineRepository.kt | 2 +- .../InstanceRepositoryImpl.kt | 43 ++++++----------- .../exposedrepository/MediaRepositoryImpl.kt | 46 +++++++------------ .../UserDetailRepositoryImpl.kt | 27 ++++------- 6 files changed, 48 insertions(+), 101 deletions(-) diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/CustomEmojiRepositoryImpl.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/CustomEmojiRepositoryImpl.kt index 56fcc6d1..c095ae55 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/CustomEmojiRepositoryImpl.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/CustomEmojiRepositoryImpl.kt @@ -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 } diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRelationshipRepository.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRelationshipRepository.kt index e501f9eb..5ea3c74d 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRelationshipRepository.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRelationshipRepository.kt @@ -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 diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt index 227e4667..cd2b3f77 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/ExposedTimelineRepository.kt @@ -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 diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/InstanceRepositoryImpl.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/InstanceRepositoryImpl.kt index 76844bed..de57ff44 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/InstanceRepositoryImpl.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/InstanceRepositoryImpl.kt @@ -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 } diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt index d5bd5f2a..f04d4f68 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt @@ -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,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 { private val logger = LoggerFactory.getLogger(MediaRepositoryImpl::class.java) diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserDetailRepositoryImpl.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserDetailRepositoryImpl.kt index 9033e5e4..8251ec08 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserDetailRepositoryImpl.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/UserDetailRepositoryImpl.kt @@ -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) } From c7742914ef5179293b7ab29ff3118a45c6355193 Mon Sep 17 00:00:00 2001 From: usbharu Date: Fri, 6 Sep 2024 08:58:52 +0000 Subject: [PATCH 2/4] style: fix lint (CI) --- .../core/infrastructure/exposedrepository/MediaRepositoryImpl.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt index 0fcdb037..81fddc23 100644 --- a/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt +++ b/hideout-core/src/main/kotlin/dev/usbharu/hideout/core/infrastructure/exposedrepository/MediaRepositoryImpl.kt @@ -71,7 +71,6 @@ class MediaRepositoryImpl : MediaRepository, AbstractRepository() { } } - companion object { private val logger = LoggerFactory.getLogger(MediaRepositoryImpl::class.java) } From 96dd11292fc6a94a13e68a85ae86ed12ac918074 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Sep 2024 22:47:06 +0000 Subject: [PATCH 3/4] fix(deps): update dependency org.apache.logging.log4j:log4j-slf4j2-impl to v2.24.0 --- libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs.versions.toml b/libs.versions.toml index 5703b22b..3e24034c 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -96,7 +96,7 @@ protoc = { module = "com.google.protobuf:protoc", version.ref = "protobuf" } koin-bom = { module = "io.insert-koin:koin-bom", version = "3.5.6" } koin-core = { module = "io.insert-koin:koin-core" } -log4j2-slf4j = { module = "org.apache.logging.log4j:log4j-slf4j2-impl", version = "2.23.1" } +log4j2-slf4j = { module = "org.apache.logging.log4j:log4j-slf4j2-impl", version = "2.24.0" } mongodb-kotlin-coroutine = { module = "org.mongodb:mongodb-driver-kotlin-coroutine", version = "5.1.4" } From 7e535ebcf9635be2b62b889360b4b1549bfdc72e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 7 Sep 2024 02:22:47 +0000 Subject: [PATCH 4/4] fix(deps): update dependency software.amazon.awssdk:s3 to v2.27.21 --- libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs.versions.toml b/libs.versions.toml index 3e24034c..ee69cf50 100644 --- a/libs.versions.toml +++ b/libs.versions.toml @@ -65,7 +65,7 @@ jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module- blurhash = { module = "io.trbl:blurhash", version = "1.0.0" } -aws-s3 = { module = "software.amazon.awssdk:s3", version = "2.27.20" } +aws-s3 = { module = "software.amazon.awssdk:s3", version = "2.27.21" } jsoup = { module = "org.jsoup:jsoup", version = "1.18.1" }