diff --git a/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDao.kt b/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDao.kt index da207114f..bb7995c35 100644 --- a/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDao.kt +++ b/komga/src/main/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDao.kt @@ -8,7 +8,6 @@ import org.gotson.komga.domain.model.KomgaUser import org.gotson.komga.domain.model.UserRoles import org.gotson.komga.domain.persistence.KomgaUserRepository import org.gotson.komga.jooq.main.Tables -import org.gotson.komga.jooq.main.tables.records.AnnouncementsReadRecord import org.gotson.komga.jooq.main.tables.records.UserApiKeyRecord import org.gotson.komga.language.toCurrentTimeZone import org.jooq.DSLContext @@ -172,7 +171,12 @@ class KomgaUserDao( user: KomgaUser, announcementIds: Set, ) { - dsl.batchStore(announcementIds.map { AnnouncementsReadRecord(user.id, it) }).execute() + dsl + .batch( + announcementIds.map { + dsl.insertInto(ar).values(user.id, it).onDuplicateKeyIgnore() + }, + ).execute() } private fun insertRoles(user: KomgaUser) { diff --git a/komga/src/test/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDaoTest.kt b/komga/src/test/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDaoTest.kt index ffddea44c..e45114cd6 100644 --- a/komga/src/test/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDaoTest.kt +++ b/komga/src/test/kotlin/org/gotson/komga/infrastructure/jooq/main/KomgaUserDaoTest.kt @@ -216,4 +216,21 @@ class KomgaUserDaoTest( assertThat(found?.email).isEqualTo("user1@example.org") assertThat(notFound).isNull() } + + @Test + fun `given user when saving announcement as read then it works`() { + val user = KomgaUser("user1@example.org", "p") + komgaUserDao.insert(user) + + assertThat(komgaUserDao.findAnnouncementIdsReadByUserId(user.id)).isEmpty() + + komgaUserDao.saveAnnouncementIdsRead(user, setOf("1")) + assertThat(komgaUserDao.findAnnouncementIdsReadByUserId(user.id)).containsExactlyInAnyOrder("1") + + komgaUserDao.saveAnnouncementIdsRead(user, setOf("2")) + assertThat(komgaUserDao.findAnnouncementIdsReadByUserId(user.id)).containsExactlyInAnyOrder("1", "2") + + komgaUserDao.saveAnnouncementIdsRead(user, setOf("2")) + assertThat(komgaUserDao.findAnnouncementIdsReadByUserId(user.id)).containsExactlyInAnyOrder("1", "2") + } }