Skip to content

Commit

Permalink
MVP migrering av timestamps til å ha tidssone
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
Oddsor committed Sep 12, 2024
1 parent c549579 commit a9ec751
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -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(
Expand All @@ -23,5 +27,5 @@ data class Hendelseslogg(
) {
@Id
val id: String = ulid()
val tidspunkt: LocalDateTime = Now.localDateTime()
val tidspunkt: Instant = Now.instant()
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,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.ZoneId

data class HendelsesloggDTO(
val refusjonId: String,
Expand All @@ -18,7 +19,7 @@ data class HendelsesloggDTO(
utførtAv = utførtAv(hendelseslogg),
event = hendelseslogg.event,
metadata = hendelseslogg.metadata,
tidspunkt = hendelseslogg.tidspunkt,
tidspunkt = LocalDateTime.ofInstant(hendelseslogg.tidspunkt, ZoneId.of("Europe/Oslo")),
)
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Original file line number Diff line number Diff line change
@@ -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';

0 comments on commit a9ec751

Please sign in to comment.