diff --git a/database/src/main/kotlin/no/nav/su/se/bakover/database/dokument/DokumentPostgresRepo.kt b/database/src/main/kotlin/no/nav/su/se/bakover/database/dokument/DokumentPostgresRepo.kt index 6c94a87747..7bcbb54e87 100644 --- a/database/src/main/kotlin/no/nav/su/se/bakover/database/dokument/DokumentPostgresRepo.kt +++ b/database/src/main/kotlin/no/nav/su/se/bakover/database/dokument/DokumentPostgresRepo.kt @@ -29,7 +29,7 @@ internal class DokumentPostgresRepo( ) : DokumentRepo { private val joinDokumentOgDistribusjonQuery = - "select d.*, dd.journalpostid, dd.brevbestillingid from dokument d left join dokument_distribusjon dd on dd.dokumentid = d.id" + "select d.*, dd.journalpostid, dd.brevbestillingid from dokument d left join dokument_distribusjon dd on dd.dokumentid = d.id where d.duplikatAv is null" override fun lagre(dokument: Dokument.MedMetadata, transactionContext: TransactionContext) { dbMetrics.timeQuery("lagreDokumentMedMetadata") { @@ -86,7 +86,7 @@ internal class DokumentPostgresRepo( return dbMetrics.timeQuery("hentDokumentMedMetadataForSakId") { sessionFactory.withSession { session -> """ - $joinDokumentOgDistribusjonQuery where sakId = :id + $joinDokumentOgDistribusjonQuery and sakId = :id """.trimIndent() .hentListe(mapOf("id" to id), session) { it.toDokumentMedStatus() @@ -99,7 +99,7 @@ internal class DokumentPostgresRepo( return dbMetrics.timeQuery("hentDokumentMedMetadataForSøknadId") { sessionFactory.withSession { session -> """ - $joinDokumentOgDistribusjonQuery where søknadId = :id + $joinDokumentOgDistribusjonQuery and søknadId = :id """.trimIndent() .hentListe(mapOf("id" to id), session) { it.toDokumentMedStatus() @@ -112,7 +112,7 @@ internal class DokumentPostgresRepo( return dbMetrics.timeQuery("hentDokumentMedMetadataForVedtakId") { sessionFactory.withSession { session -> """ - $joinDokumentOgDistribusjonQuery where vedtakId = :id + $joinDokumentOgDistribusjonQuery and vedtakId = :id """.trimIndent() .hentListe(mapOf("id" to id), session) { it.toDokumentMedStatus() @@ -125,7 +125,7 @@ internal class DokumentPostgresRepo( return dbMetrics.timeQuery("hentDokumentMedMetadataForRevurderingId") { sessionFactory.withSession { session -> """ - $joinDokumentOgDistribusjonQuery where revurderingId = :id + $joinDokumentOgDistribusjonQuery and revurderingId = :id """.trimIndent() .hentListe(mapOf("id" to id), session) { it.toDokumentMedStatus() @@ -138,7 +138,7 @@ internal class DokumentPostgresRepo( return dbMetrics.timeQuery("hentDokumentMedMetadataForKlageId") { sessionFactory.withSession { session -> """ - $joinDokumentOgDistribusjonQuery where klageId = :id + $joinDokumentOgDistribusjonQuery and klageId = :id """.trimIndent() .hentListe(mapOf("id" to id), session) { it.toDokumentMedStatus() @@ -230,7 +230,7 @@ internal class DokumentPostgresRepo( private fun hentDokument(id: UUID, session: Session) = """ - $joinDokumentOgDistribusjonQuery where d.id = :id + $joinDokumentOgDistribusjonQuery and d.id = :id """.trimIndent() .hent(mapOf("id" to id), session) { it.toDokumentMedStatus() diff --git a/database/src/main/kotlin/no/nav/su/se/bakover/database/klage/KlagePostgresRepo.kt b/database/src/main/kotlin/no/nav/su/se/bakover/database/klage/KlagePostgresRepo.kt index ec695fd8a4..394199ece3 100644 --- a/database/src/main/kotlin/no/nav/su/se/bakover/database/klage/KlagePostgresRepo.kt +++ b/database/src/main/kotlin/no/nav/su/se/bakover/database/klage/KlagePostgresRepo.kt @@ -313,6 +313,7 @@ internal class KlagePostgresRepo( join vedtak v on k.vedtakid = v.id join dokument d on d.vedtakid = v.id where k.id = :id + and d.duplikatAv is null """.trimIndent() .hent(mapOf("id" to klageId), it) { row -> row.string("vedtaksbrevdato").let { diff --git a/database/src/main/kotlin/no/nav/su/se/bakover/database/vedtak/VedtakPostgresRepo.kt b/database/src/main/kotlin/no/nav/su/se/bakover/database/vedtak/VedtakPostgresRepo.kt index a28d1d686c..3ffe45b7d4 100644 --- a/database/src/main/kotlin/no/nav/su/se/bakover/database/vedtak/VedtakPostgresRepo.kt +++ b/database/src/main/kotlin/no/nav/su/se/bakover/database/vedtak/VedtakPostgresRepo.kt @@ -106,6 +106,7 @@ internal class VedtakPostgresRepo( left join dokument d on v.id = d.vedtakid left join dokument_distribusjon dd on d.id = dd.dokumentid where v.id = :vedtakId + and d.duplikatAv is null order by v.opprettet """.trimIndent() .hent(mapOf("vedtakId" to vedtakId), session) { @@ -127,6 +128,7 @@ internal class VedtakPostgresRepo( join behandling_vedtak bv on bv.vedtakid = v.id join revurdering r on r.id = bv.revurderingId where r.id = :revurderingId + and d.duplikatAv is null order by v.opprettet """.trimIndent() .hent(mapOf("revurderingId" to revurderingId), session) { @@ -146,10 +148,15 @@ internal class VedtakPostgresRepo( left join dokument d on v.id = d.vedtakid left join dokument_distribusjon dd on d.id = dd.dokumentid where v.sakId = :sakId + and d.duplikatAv is null order by v.opprettet """.trimIndent() .hentListe(mapOf("sakId" to sakId), session) { it.toVedtak(session) + }.also { + it.map { it.id }.let { + check(it.distinct().size == it.size) { "Fant duplikate vedtak/dokument/dokument_distribusjon for sakId=$sakId" } + } } override fun lagre(vedtak: Vedtak) { @@ -186,6 +193,7 @@ internal class VedtakPostgresRepo( left join dokument d on v.id = d.vedtakid left join dokument_distribusjon dd on d.id = dd.dokumentid where v.utbetalingId = :utbetalingId + and d.duplikatAv is null order by v.opprettet """.trimIndent() .hent(mapOf("utbetalingId" to utbetalingId), session) { @@ -205,7 +213,7 @@ internal class VedtakPostgresRepo( from dokument inner join dokument_distribusjon dd on dokument.id = dd.dokumentid - where vedtakid = :vedtakId + where vedtakid = :vedtakId and d.duplikatAv is null """.trimIndent().hent(mapOf("vedtakId" to vedtakId), session) { JournalpostId(it.string("journalpostid")) } diff --git a/database/src/main/resources/db/migration/V182__dokument_add_column_duplikatAv.sql b/database/src/main/resources/db/migration/V182__dokument_add_column_duplikatAv.sql new file mode 100644 index 0000000000..00c2f00be1 --- /dev/null +++ b/database/src/main/resources/db/migration/V182__dokument_add_column_duplikatAv.sql @@ -0,0 +1,14 @@ +ALTER TABLE + dokument + ADD COLUMN IF NOT EXISTS duplikatAv uuid; + +ALTER TABLE dokument + ADD CONSTRAINT fk_duplikatAv + FOREIGN KEY (duplikatAv) REFERENCES dokument (id); + +COMMENT ON COLUMN dokument.duplikatAv IS 'Dokumentet er et duplikat av et annet dokument og skal ignoreres ved søk og visning.'; + +-- Setter det første dokumentet til å være duplikat av det siste dokumentet for et enkelt vedtak. +update dokument set duplikatAv = '7202a89f-ef54-4fad-899f-6ddd32d74c55' where id = '527e84d6-c8a5-49d7-941a-d9ca2dca866e'; +update dokument set duplikatAv = '1b34fdc6-7b85-4a57-ab99-df756c6724d4' where id = '3b3e897a-8b4e-42db-a79c-48dd872c7bcd'; +update dokument set duplikatAv = '1244d833-fc5f-49bf-b9d6-ad87b1a51c16' where id = '9a4bdf0d-ee1a-4614-8747-ecf31adb0a35';