Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hibernate Envers for audit. #1338

Merged
merged 25 commits into from
Feb 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
283c0d8
Hibernate Envers for audit.
flexable777 Feb 12, 2025
bb73693
Merge remote-tracking branch 'origin/main' into db_audit_behandling
flexable777 Feb 13, 2025
d491704
Missing schema.
flexable777 Feb 13, 2025
0a7a7e4
Fixed schema ref, and added sequence for Hibernate Envers.
flexable777 Feb 13, 2025
b310d79
Trying to override how to get the sequence.
flexable777 Feb 13, 2025
9c1357e
Correct sequence.
flexable777 Feb 13, 2025
e7caa7b
Merge branch 'main' into db_audit_behandling
flexable777 Feb 13, 2025
0c4ca28
New attempt with sequence.
flexable777 Feb 13, 2025
15ca47e
New attempt with sequence.
flexable777 Feb 13, 2025
b4e10b3
Merge remote-tracking branch 'origin/main' into db_audit_behandling
flexable777 Feb 13, 2025
3ec2435
Adapted to correct version.
flexable777 Feb 13, 2025
e1da2ea
Using aud-tables more or less like Hibernate would create them.
flexable777 Feb 13, 2025
513a7f0
Merge remote-tracking branch 'origin/main' into db_audit_behandling
flexable777 Feb 13, 2025
2cc7d4e
Removed duplicate statement.
flexable777 Feb 13, 2025
f2b3e75
Child entities need annotation as well.
flexable777 Feb 13, 2025
5b5bc4a
Added properties from child entities.
flexable777 Feb 13, 2025
c7415f1
Merge remote-tracking branch 'origin/main' into db_audit_behandling
flexable777 Feb 13, 2025
db3d7b8
Adding traceId to audit.
flexable777 Feb 13, 2025
8531db8
Don't use our old "endringslogg"-implementation.
flexable777 Feb 13, 2025
2e7d5b1
Merge branch 'main' into db_audit_behandling
flexable777 Feb 13, 2025
4ebc280
Some HikariCP-logging to track down why connections are used up when …
flexable777 Feb 14, 2025
f1c32d3
Removed debug logging for HikariCP.
flexable777 Feb 14, 2025
a93b653
Stop using old "endringslogg"-regime.
flexable777 Feb 17, 2025
ecdf90c
Audit for DUA as well.
flexable777 Feb 17, 2025
a68c477
Removed unnecessary checks.
flexable777 Feb 17, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ dependencies {

implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
implementation("org.springframework.data:spring-data-envers")

implementation("org.springframework.kafka:spring-kafka")
implementation("io.projectreactor.kafka:reactor-kafka")
implementation("org.flywaydb:flyway-core")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import org.hibernate.annotations.BatchSize
import org.hibernate.annotations.DynamicUpdate
import org.hibernate.annotations.Fetch
import org.hibernate.annotations.FetchMode
import org.hibernate.envers.AuditJoinTable
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*

Expand All @@ -15,6 +17,7 @@ import java.util.*
@Table(name = "dokument_under_arbeid", schema = "klage")
@DynamicUpdate
@DiscriminatorColumn(name = "dokument_under_arbeid_type")
@Audited
abstract class DokumentUnderArbeid(
@Id
open val id: UUID = UUID.randomUUID(),
Expand All @@ -41,6 +44,7 @@ abstract class DokumentUnderArbeid(
@JoinColumn(name = "dokument_under_arbeid_id", referencedColumnName = "id", nullable = false)
@Fetch(FetchMode.SELECT)
@BatchSize(size = 5)
@AuditJoinTable(name = "dua_dokument_under_arbeid_dokarkiv_reference_aud")
open var dokarkivReferences: MutableSet<DokumentUnderArbeidDokarkivReference> = mutableSetOf(),
) : Comparable<DokumentUnderArbeid> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,21 @@ import no.nav.klage.oppgave.util.isUtgaaende
import org.hibernate.annotations.BatchSize
import org.hibernate.annotations.Fetch
import org.hibernate.annotations.FetchMode
import org.hibernate.envers.AuditJoinTable
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*

@Entity
@Audited
abstract class DokumentUnderArbeidAsHoveddokument(
@Column(name = "dokument_enhet_id")
open var dokumentEnhetId: UUID? = null,
@OneToMany(cascade = [CascadeType.ALL], orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "dokument_under_arbeid_id", referencedColumnName = "id", nullable = false)
@Fetch(FetchMode.SELECT)
@BatchSize(size = 5)
@AuditJoinTable(name = "dua_dokument_under_arbeid_avsender_mottaker_info_aud")
open val avsenderMottakerInfoSet: MutableSet<DokumentUnderArbeidAvsenderMottakerInfo> = mutableSetOf(),
@Column(name = "journalfoerende_enhet_id")
open var journalfoerendeEnhetId: String?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,13 @@ package no.nav.klage.dokument.domain.dokumenterunderarbeid

import jakarta.persistence.Column
import jakarta.persistence.Entity
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*

@Entity
@Audited
abstract class DokumentUnderArbeidAsVedlegg(
@Column(name = "parent_id")
open var parentId: UUID,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package no.nav.klage.dokument.domain.dokumenterunderarbeid

import jakarta.persistence.*
import org.hibernate.envers.Audited
import java.util.*

@Entity
@Table(name = "dokument_under_arbeid_avsender_mottaker_info", schema = "klage")
@Audited
class DokumentUnderArbeidAvsenderMottakerInfo(
@Id
val id: UUID = UUID.randomUUID(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table
import org.hibernate.envers.Audited
import java.util.*

@Entity
@Table(name = "dokument_under_arbeid_dokarkiv_reference", schema = "klage")
@Audited
class DokumentUnderArbeidDokarkivReference(
@Id
val id: UUID = UUID.randomUUID(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ package no.nav.klage.dokument.domain.dokumenterunderarbeid
import jakarta.persistence.Column
import jakarta.persistence.DiscriminatorValue
import jakarta.persistence.Entity
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*

@Entity
@DiscriminatorValue("journalfoertdokument")
@Audited
class JournalfoertDokumentUnderArbeidAsVedlegg (
@Column(name = "opprettet")
var opprettet: LocalDateTime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import jakarta.persistence.*
import no.nav.klage.dokument.api.view.InngaaendeKanal
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import org.hibernate.envers.Audited
import java.time.LocalDate
import java.time.LocalDateTime
import java.util.*


@Entity
@DiscriminatorValue("opplastetdokument")
@Audited
class OpplastetDokumentUnderArbeidAsHoveddokument(
@Column(name = "size")
var size: Long?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@ import jakarta.persistence.DiscriminatorValue
import jakarta.persistence.Entity
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*


@Entity
@DiscriminatorValue("opplastetdokument_vedlegg")
@Audited
class OpplastetDokumentUnderArbeidAsVedlegg(
@Column(name = "size")
var size: Long?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ package no.nav.klage.dokument.domain.dokumenterunderarbeid
import jakarta.persistence.*
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*


@Entity
@DiscriminatorValue("smartdokument")
@Audited
class SmartdokumentUnderArbeidAsHoveddokument(
@Column(name = "size")
override var size: Long?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ package no.nav.klage.dokument.domain.dokumenterunderarbeid
import jakarta.persistence.*
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.klage.BehandlingRole
import org.hibernate.envers.Audited
import java.time.LocalDateTime
import java.util.*


@Entity
@DiscriminatorValue("smartdokument_vedlegg")
@Audited
class SmartdokumentUnderArbeidAsVedlegg(
@Column(name = "size")
override var size: Long?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1694,7 +1694,6 @@ class DokumentUnderArbeidService(
behandlingService.getBehandlingAndCheckLeseTilgangForPerson(
behandlingId = dokument.behandlingId,
)
//TODO: Skal det lages endringslogg på dette??

if (dokument is DokumentUnderArbeidAsHoveddokument) {
throw DokumentValidationException("Dokumentet er allerede hoveddokument.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import no.nav.klage.dokument.gateway.DefaultKabalSmartEditorApiGateway
import no.nav.klage.dokument.repositories.SmartdokumentUnderArbeidAsHoveddokumentRepository
import no.nav.klage.dokument.repositories.SmartdokumentUnderArbeidAsVedleggRepository
import no.nav.klage.kodeverk.DokumentType
import no.nav.klage.oppgave.domain.events.BehandlingEndretEvent
import no.nav.klage.oppgave.domain.kafka.*
import no.nav.klage.oppgave.domain.klage.Behandling
import no.nav.klage.oppgave.domain.klage.Endringslogginnslag
Expand All @@ -28,7 +27,6 @@ import no.nav.klage.oppgave.service.SaksbehandlerService
import no.nav.klage.oppgave.util.getLogger
import no.nav.klage.oppgave.util.getSecureLogger
import no.nav.klage.oppgave.util.ourJacksonObjectMapper
import org.springframework.context.ApplicationEventPublisher
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.time.LocalDateTime
Expand All @@ -44,7 +42,6 @@ class SmartDocumentService(
private val smartDokumentUnderArbeidAsHoveddokumentRepository: SmartdokumentUnderArbeidAsHoveddokumentRepository,
private val smartDokumentUnderArbeidAsVedleggRepository: SmartdokumentUnderArbeidAsVedleggRepository,
private val behandlingService: BehandlingService,
private val applicationEventPublisher: ApplicationEventPublisher,
private val dokumentMapper: DokumentMapper,
private val saksbehandlerService: SaksbehandlerService,
) {
Expand Down Expand Up @@ -127,13 +124,6 @@ class SmartDocumentService(
)
)
}
behandling.publishEndringsloggEvent(
saksbehandlerident = innloggetIdent,
felt = Felt.SMARTDOKUMENT_OPPRETTET,
fraVerdi = null,
tilVerdi = document.created.toString(),
tidspunkt = document.created,
)

val smartEditorDocument =
kabalSmartEditorApiGateway.getSmartDocumentResponse(smartEditorId = document.smartEditorId)
Expand Down Expand Up @@ -486,43 +476,16 @@ class SmartDocumentService(
felt: Felt,
fraVerdi: String?,
tilVerdi: String?,
tidspunkt: LocalDateTime
): Endringslogginnslag? {
return Endringslogginnslag.endringslogg(
saksbehandlerident = saksbehandlerident,
felt = felt,
fraVerdi = fraVerdi,
tilVerdi = tilVerdi,
behandlingId = this.id,
tidspunkt = tidspunkt
)
}

private fun Behandling.publishEndringsloggEvent(
saksbehandlerident: String,
felt: Felt,
fraVerdi: String?,
tilVerdi: String?,
tidspunkt: LocalDateTime,
) {
listOfNotNull(
this.endringslogg(
saksbehandlerident = saksbehandlerident,
felt = felt,
fraVerdi = fraVerdi,
tilVerdi = tilVerdi,
tidspunkt = tidspunkt,
)
).let {
applicationEventPublisher.publishEvent(
BehandlingEndretEvent(
behandling = this,
endringslogginnslag = it
)
)
}
}

private fun getSmartEditorId(dokumentId: UUID, readOnly: Boolean): UUID {
val dokumentUnderArbeid = dokumentUnderArbeidService.getDokumentUnderArbeid(dokumentId)

Expand Down
25 changes: 25 additions & 0 deletions src/main/kotlin/no/nav/klage/oppgave/domain/OurRevision.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package no.nav.klage.oppgave.domain

import jakarta.persistence.*
import no.nav.klage.oppgave.eventlisteners.OurRevisionListener
import org.hibernate.envers.RevisionEntity
import org.hibernate.envers.RevisionNumber
import org.hibernate.envers.RevisionTimestamp
import java.time.LocalDateTime

@Entity
@Table(name = "revision", schema = "klage")
@RevisionEntity(OurRevisionListener::class)
class OurRevision(
@Id
@SequenceGenerator(name = "klage.revision_seq", sequenceName = "klage.revision_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "klage.revision_seq")
@RevisionNumber
var id: Long?,
@RevisionTimestamp
var timestamp: LocalDateTime?,
var actor: String,
var request: String?,
@Column(name = "trace_id")
var traceId: String?,
)
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ import no.nav.klage.kodeverk.Utfall
import no.nav.klage.kodeverk.hjemmel.Hjemmel
import no.nav.klage.kodeverk.hjemmel.Registreringshjemmel
import no.nav.klage.kodeverk.ytelse.Ytelse
import org.hibernate.envers.Audited
import java.time.LocalDate
import java.time.LocalDateTime
import java.util.*

@Entity
@DiscriminatorValue("anke_i_trygderetten")
@Audited
class AnkeITrygderettenbehandling(
@Column(name = "sendt_til_trygderetten")
var sendtTilTrygderetten: LocalDateTime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ object AnkeITrygderettenbehandlingSetters {
fraVerdi = gammelVerdi.toString(),
tilVerdi = nyVerdi.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt,
)
return BehandlingEndretEvent(
behandling = this,
Expand All @@ -44,7 +43,6 @@ object AnkeITrygderettenbehandlingSetters {
fraVerdi = gammelVerdi.toString(),
tilVerdi = nyVerdi.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt,
)
return BehandlingEndretEvent(
behandling = this,
Expand All @@ -67,7 +65,6 @@ object AnkeITrygderettenbehandlingSetters {
fraVerdi = gammelVerdi.toString(),
tilVerdi = nyVerdi.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt,
)
return BehandlingEndretEvent(
behandling = this,
Expand All @@ -90,7 +87,6 @@ object AnkeITrygderettenbehandlingSetters {
fraVerdi = gammelVerdi.toString(),
tilVerdi = nyVerdi.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt,
)
return BehandlingEndretEvent(
behandling = this,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ import no.nav.klage.kodeverk.*
import no.nav.klage.kodeverk.hjemmel.Hjemmel
import no.nav.klage.kodeverk.hjemmel.Registreringshjemmel
import no.nav.klage.kodeverk.ytelse.Ytelse
import org.hibernate.envers.Audited
import java.time.LocalDate
import java.time.LocalDateTime
import java.util.*

@Entity
@DiscriminatorValue("anke")
@Audited
class Ankebehandling(
@Column(name = "klage_vedtaks_dato")
val klageVedtaksDato: LocalDate? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ object AnkebehandlingSetters {
fraVerdi = gammelVerdiVarsletFrist.toString(),
tilVerdi = nyVerdiVarsletFrist.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt
)?.let { endringslogginnslag.add(it) }

endringslogg(
Expand All @@ -58,7 +57,6 @@ object AnkebehandlingSetters {
fraVerdi = gammelVerdiVarsletBehandlingstidUnits.toString(),
tilVerdi = nyVerdiVarsletBehandlingstidUnits.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt
)?.let { endringslogginnslag.add(it) }

endringslogg(
Expand All @@ -67,7 +65,6 @@ object AnkebehandlingSetters {
fraVerdi = gammelVerdiVarsletBehandlingstidUnitType.toString(),
tilVerdi = nyVerdiVarsletBehandlingstidUnitType.toString(),
behandlingId = this.id,
tidspunkt = tidspunkt
)?.let { endringslogginnslag.add(it) }

return BehandlingEndretEvent(behandling = this, endringslogginnslag = endringslogginnslag)
Expand Down
Loading