fix(api): marking already read announcement as read would return error 500

This commit is contained in:
Gauthier Roebroeck 2025-05-20 15:18:43 +08:00
parent 1ab46a7fc6
commit 8cf2403147
2 changed files with 23 additions and 2 deletions

View file

@ -8,7 +8,6 @@ import org.gotson.komga.domain.model.KomgaUser
import org.gotson.komga.domain.model.UserRoles import org.gotson.komga.domain.model.UserRoles
import org.gotson.komga.domain.persistence.KomgaUserRepository import org.gotson.komga.domain.persistence.KomgaUserRepository
import org.gotson.komga.jooq.main.Tables 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.jooq.main.tables.records.UserApiKeyRecord
import org.gotson.komga.language.toCurrentTimeZone import org.gotson.komga.language.toCurrentTimeZone
import org.jooq.DSLContext import org.jooq.DSLContext
@ -172,7 +171,12 @@ class KomgaUserDao(
user: KomgaUser, user: KomgaUser,
announcementIds: Set<String>, announcementIds: Set<String>,
) { ) {
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) { private fun insertRoles(user: KomgaUser) {

View file

@ -216,4 +216,21 @@ class KomgaUserDaoTest(
assertThat(found?.email).isEqualTo("user1@example.org") assertThat(found?.email).isEqualTo("user1@example.org")
assertThat(notFound).isNull() 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")
}
} }