From 4ae149d706b6b43f4a4664bc9985f045b700a6a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Andreas=20S=C3=B8rs=C3=A6ther?= Date: Wed, 11 Sep 2024 15:48:34 +0200 Subject: [PATCH 1/2] =?UTF-8?q?MVP=20migrering=20av=20timestamps=20til=20?= =?UTF-8?q?=C3=A5=20ha=20tidssone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For å redusere forvirring med tidspunkter når vi gjør databaseuttrekk så ønsker vi å konvertere en del "timestamp without time zone" til timestamps med tidssone. Dette gjøres på litt forskjellige måter avhengig av hvordan jpa-entitene behandler feltene. * for instants: bruk "at time zone 'UTC'" * for localdatetime: bruk "at time zone 'Europe/Oslo'" Instants som lagres i en timestamp er lagret i UTC, men ser ut som en "localdatetime" når man gjør uttrekk. LocalDateTimes som lagres i en timestamp ser riktige ut, og det er strengt tatt ikke nødvendig å migrere disse bortsett fra at tidspunktet blir mer nøyaktig og at vi fjerner all tvil om når tidspunktet gjelder for. --- .../tiltakrefusjon/hendelseslogg/Hendelseslogg.kt | 10 +++++++--- .../tiltakrefusjon/hendelseslogg/HendelsesloggDTO.kt | 4 ++-- .../V58__tidssone_for_godkjent_av_arbeidsgiver.sql | 4 ++++ .../migration/V59__tidssone_for_utbetalt_tidspunkt.sql | 4 ++++ .../V60__tidssone_for_hendelselogg_tidspunkt.sql | 5 +++++ 5 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/db/migration/V58__tidssone_for_godkjent_av_arbeidsgiver.sql create mode 100644 src/main/resources/db/migration/V59__tidssone_for_utbetalt_tidspunkt.sql create mode 100644 src/main/resources/db/migration/V60__tidssone_for_hendelselogg_tidspunkt.sql diff --git a/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/Hendelseslogg.kt b/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/Hendelseslogg.kt index 514c6404..ec862387 100644 --- a/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/Hendelseslogg.kt +++ b/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/Hendelseslogg.kt @@ -1,12 +1,16 @@ package no.nav.arbeidsgiver.tiltakrefusjon.hendelseslogg -import jakarta.persistence.* +import jakarta.persistence.Convert +import jakarta.persistence.Entity +import jakarta.persistence.EnumType +import jakarta.persistence.Enumerated +import jakarta.persistence.Id import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.BrukerRolle import no.nav.arbeidsgiver.tiltakrefusjon.utils.Now import no.nav.arbeidsgiver.tiltakrefusjon.utils.ulid import org.hibernate.annotations.JdbcTypeCode import org.hibernate.type.SqlTypes -import java.time.LocalDateTime +import java.time.Instant @Entity data class Hendelseslogg( @@ -23,5 +27,5 @@ data class Hendelseslogg( ) { @Id val id: String = ulid() - val tidspunkt: LocalDateTime = Now.localDateTime() + val tidspunkt: Instant = Now.instant() } diff --git a/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/HendelsesloggDTO.kt b/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/HendelsesloggDTO.kt index bc4bb20a..9a335ecb 100644 --- a/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/HendelsesloggDTO.kt +++ b/src/main/kotlin/no/nav/arbeidsgiver/tiltakrefusjon/hendelseslogg/HendelsesloggDTO.kt @@ -2,7 +2,7 @@ package no.nav.arbeidsgiver.tiltakrefusjon.hendelseslogg import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.BrukerRolle import no.nav.arbeidsgiver.tiltakrefusjon.refusjon.erGyldigFnr -import java.time.LocalDateTime +import java.time.Instant data class HendelsesloggDTO( val refusjonId: String, @@ -10,7 +10,7 @@ data class HendelsesloggDTO( val utførtAv: String, val event: String, val metadata: HendelseMetadata? = null, - val tidspunkt: LocalDateTime, + val tidspunkt: Instant, ) { constructor(hendelseslogg: Hendelseslogg) : this( refusjonId = hendelseslogg.refusjonId, diff --git a/src/main/resources/db/migration/V58__tidssone_for_godkjent_av_arbeidsgiver.sql b/src/main/resources/db/migration/V58__tidssone_for_godkjent_av_arbeidsgiver.sql new file mode 100644 index 00000000..7d62f058 --- /dev/null +++ b/src/main/resources/db/migration/V58__tidssone_for_godkjent_av_arbeidsgiver.sql @@ -0,0 +1,4 @@ +-- godkjent_av_arbeidsgiver-feltet har ikke tidssone i databasen, men er en instant i jpa-entiteten. +-- Instants er tidspunkter med tidssoner, så kolonnen burde også ha tidssone. +alter table refusjon alter column godkjent_av_arbeidsgiver type timestamp with time zone + using godkjent_av_arbeidsgiver at time zone 'UTC'; diff --git a/src/main/resources/db/migration/V59__tidssone_for_utbetalt_tidspunkt.sql b/src/main/resources/db/migration/V59__tidssone_for_utbetalt_tidspunkt.sql new file mode 100644 index 00000000..715edd06 --- /dev/null +++ b/src/main/resources/db/migration/V59__tidssone_for_utbetalt_tidspunkt.sql @@ -0,0 +1,4 @@ +-- godkjent_av_arbeidsgiver-feltet har ikke tidssone i databasen, men er en instant i jpa-entiteten. +-- Instants er tidspunkter med tidssoner, så kolonnen burde også ha tidssone. +alter table refusjon alter column utbetalt_tidspunkt type timestamp with time zone + using utbetalt_tidspunkt at time zone 'UTC'; diff --git a/src/main/resources/db/migration/V60__tidssone_for_hendelselogg_tidspunkt.sql b/src/main/resources/db/migration/V60__tidssone_for_hendelselogg_tidspunkt.sql new file mode 100644 index 00000000..638c189c --- /dev/null +++ b/src/main/resources/db/migration/V60__tidssone_for_hendelselogg_tidspunkt.sql @@ -0,0 +1,5 @@ +-- tidspunkt-feltet har ikke tidssone i databasen, og er en "localdatetime" i jpa-entiteten. +-- For å få tidspunktene til å bli riktige MED tidssone må vi derfor bruke "at time zone" med +-- europe/oslo i stedet for utc, slik vi gjorde med feltene hvor jpa-entiteten bruker instant. +alter table hendelseslogg alter column tidspunkt type timestamp with time zone + using tidspunkt at time zone 'Europe/Oslo'; From 1e7dde98d58b58426a433e47dd6c5ccd7aaee531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Odd=20Andreas=20S=C3=B8rs=C3=A6ther?= Date: Fri, 13 Sep 2024 15:07:04 +0200 Subject: [PATCH 2/2] beslutter-ad-gruppe matcher fakelogin-default fakelogin-appen leverer en fake token som inneholder en ad-gruppe, og vi kan like gjerne gjenbruke id'en. --- src/main/resources/application-dev-gcp-labs.yml | 2 +- src/test/resources/application-dockercompose.yml | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application-dev-gcp-labs.yml b/src/main/resources/application-dev-gcp-labs.yml index 9925f001..dbd05143 100644 --- a/src/main/resources/application-dev-gcp-labs.yml +++ b/src/main/resources/application-dev-gcp-labs.yml @@ -46,4 +46,4 @@ tiltak-refusjon: norg: fake: true beslutter-ad-gruppe: - id: BESLUTTER_AD_GRUPPE + id: 1a1d2745-952f-4a0f-839f-9530145b1d4a diff --git a/src/test/resources/application-dockercompose.yml b/src/test/resources/application-dockercompose.yml index c243ebb8..ff2f70a3 100644 --- a/src/test/resources/application-dockercompose.yml +++ b/src/test/resources/application-dockercompose.yml @@ -60,6 +60,8 @@ tiltak-refusjon: fake: true varsling: varsling-klar-cron: "0 */5 0 17 * ?" + beslutter-ad-gruppe: + id: 1a1d2745-952f-4a0f-839f-9530145b1d4a server: port: 8081