package Ġno . nav . sy fo . util Ċ Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġno . nav . sy fo . Environment Ċ import Ġno . nav . sy fo . application . database . Database Ċ import Ġno . nav . sy fo . application . database . Database Interface Ċ import Ġno . nav . sy fo . application . database . toList Ċ import Ġno . nav . sy fo . hen del ser . db . H en del se Db Model Ċ import Ġno . nav . sy fo . kafka . fel les . Sy ke pen ge so kn ad DTO Ċ import Ġno . nav . sy fo . model . sy k meld ing . ar be id sg iver . Ar be id sg iver Sy k meld ing Ċ import Ġno . nav . sy fo . nar me ste le der . db . N ar me ste le der Db Model Ċ import Ġno . nav . sy fo . object Mapper Ċ import Ġno . nav . sy fo . so kn ad . db . S ok nad Db Model Ċ import Ġno . nav . sy fo . sy k meld ing . db . Sy k meld ing Db Model Ċ import Ġno . nav . sy fo . sy k meld ing . db . Sy k meld t Db Model Ċ import Ġorg . test containers . containers . PostgreSQL Container Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Zone Offset Ċ Ċ class ĠP sql Container Ġ: ĠPostgreSQL Container < P sql Container >(" postgres : 1 2 ") Ċ Ċ class ĠTest Db Ġprivate Ġconstructor () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase : ĠDatabase Interface ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġp sql Container : ĠP sql Container Ġ= ĠP sql Container () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Ex posed Ports ( 5 4 3 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Username (" username ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Password (" password ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Database Name (" database ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Init Script (" db / test db - init . sql ") ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp sql Container . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmock Env Ġ= Ġmock k < Environment >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Env . database Username Ġ} Ġreturns Ġ" username " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Env . database Password Ġ} Ġreturns Ġ" password " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Env . jdbc Url () Ġ} Ġreturns Ġp sql Container . jdbc Url ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase Ġ= ĠDatabase ( mock Env ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġclear All Data () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatabase . connection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepareStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġn ar me ste le der ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġsy k meld ing ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġsy k meld t ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġs ok nad ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġh en del ser ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . executeUpdate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . commit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget N ar me ste le der ( pas ient Fn r : ĠString ): ĠList < N ar me ste le der Db Model > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatabase . connection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepareStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġn ar me ste le der ĠWHERE Ġpas ient _ fn r Ġ= Ġ? ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . setString ( 1 , Ġpas ient Fn r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . executeQuery (). toList Ġ{ Ġto N ar me ste le der Db Model () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠResultSet . to N ar me ste le der Db Model (): ĠN ar me ste le der Db Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN ar me ste le der Db Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn ar me ste le der Id Ġ= ĠgetString (" nar me ste _ le der _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas ient Fn r Ġ= ĠgetString (" pas ient _ fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle der Fn r Ġ= ĠgetString (" le der _ fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg nummer Ġ= ĠgetString (" org nummer ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Sy k meld t ( fn r : ĠString ): ĠS yk meld t Db Model ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatabase . connection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepareStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġsy k meld t ĠWHERE Ġpas ient _ fn r Ġ= Ġ? ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . setString ( 1 , Ġfn r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . executeQuery (). toList Ġ{ Ġto Sy k meld t Db Model () Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠResultSet . to Sy k meld t Db Model (): ĠS yk meld t Db Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS yk meld t Db Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas ient Fn r Ġ= ĠgetString (" pas ient _ fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas ient Nav n Ġ= ĠgetString (" pas ient _ nav n "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart dat o Sy ke fr ava er Ġ= ĠgetObject (" start dat o _ sy ke fr ava er ", ĠLocalDate :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Tom Ġ= ĠgetObject (" latest _ tom ", ĠLocalDate :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Sy k meld ing ( sy k meld ing Id : ĠString ): ĠS yk meld ing Db Model ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatabase . connection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepareStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġsy k meld ing ĠWHERE Ġsy k meld ing _ id Ġ= Ġ? ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . setString ( 1 , Ġsy k meld ing Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . executeQuery (). toList Ġ{ Ġto Sy k meld ing Db Model () Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠResultSet . to Sy k meld ing Db Model (): ĠS yk meld ing Db Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS yk meld ing Db Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy k meld ing Id Ġ= ĠgetString (" sy k meld ing _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas ient Fn r Ġ= ĠgetString (" pas ient _ fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg nummer Ġ= ĠgetString (" org nummer "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg nav n Ġ= ĠgetString (" org nav n "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy k meld ing Ġ= ĠobjectMapper . readValue ( getString (" sy k meld ing "), ĠAr be id sg iver Sy k meld ing :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle st Ġ= Ġget Boolean (" le st "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġget Timestamp (" timestamp "). to Instant (). at Offset ( Zone Offset . UTC ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatest Tom Ġ= ĠgetObject (" latest _ tom ", ĠLocalDate :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetS ok nad ( so kn ad Id : ĠString ): ĠS ok nad Db Model ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatabase . connection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepareStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġs ok nad ĠWHERE Ġs ok nad _ id Ġ= Ġ? ; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . setString ( 1 , Ġs ok nad Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . executeQuery (). toList Ġ{ Ġto S ok nad Db Model () Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠResultSet . to S ok nad Db Model (): ĠS ok nad Db Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS ok nad Db Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ok nad Id Ġ= ĠgetString (" so kn ad _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsy k meld ing Id Ġ= ĠgetString (" sy k meld ing _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas ient Fn r Ġ= ĠgetString (" pas ient _ fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg nummer Ġ= ĠgetString (" org nummer "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs ok nad Ġ= ĠobjectMapper . readValue ( getString (" so kn ad "), ĠSy ke pen ge so kn ad DTO :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend t D ato Ġ= ĠgetObject (" send t _ dat o ", ĠLocalDate :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġle st Ġ= Ġget Boolean (" le st "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġget Timestamp (" timestamp "). to Instant (). at Offset ( Zone Offset . UTC ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtom Ġ= ĠgetObject (" tom ", ĠLocalDate :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget H en del se ( id : ĠString ): ĠHen del se Db Model ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdatabase . connection . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . prepareStatement ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġh en del ser ĠWHERE Ġid = ?; ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). use Ġ{ Ġps Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . setString ( 1 , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġps . executeQuery (). toList Ġ{ Ġto H en del se Db Model () Ġ}. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠResultSet . to H en del se Db Model (): ĠHen del se Db Model Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHen del se Db Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠgetString (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpas ient Fn r Ġ= ĠgetString (" pas ient _ fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg nummer Ġ= ĠgetString (" org nummer "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopp g av etype Ġ= ĠgetString (" op pg av etype "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen ke Ġ= ĠgetString (" len ke "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtek st Ġ= ĠgetString (" tek st "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġget Timestamp (" timestamp "). to Instant (). at Offset ( Zone Offset . UTC ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut lop st id sp unkt Ġ= Ġget Timestamp (" ut lop st id sp unkt ") ?. to Instant ()?. at Offset ( Zone Offset . UTC ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfer dig st ilt Ġ= Ġget Boolean (" fer dig st ilt "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfer dig st ilt Timestamp Ġ= Ġget Timestamp (" fer dig st ilt _ timestamp ") ?. to Instant ()?. at Offset ( Zone Offset . UTC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ