package Ġno . nav . dag p enger . re gel . api . db Ċ Ċ import Ġio . prometheus . client . Counter Ċ import Ġk ot li query . Row Ċ import Ġk ot li query . query Of Ċ import Ġk ot li query . session Of Ċ import Ġk ot li query . using Ċ import Ġmu . Kotlin Logging Ċ import Ġno . nav . dag p enger . re gel . api . models . Kont ek st Ċ import Ġno . nav . dag p enger . re gel . api . models . Re gel Kont ek st Ċ import Ġno . nav . dag p enger . re gel . api . models . Sub sums jon Ċ import Ġno . nav . dag p enger . re gel . api . models . Sub sums jon Id Ċ import Ġno . nav . dag p enger . re gel . api . monitoring . HealthCheck Ċ import Ġno . nav . dag p enger . re gel . api . monitoring . Health Status Ċ import Ġorg . postgresql . util . P SQLException Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjavax . sql . DataSource Ċ Ċ private Ġval ĠLOGGER Ġ= ĠKotlin Logging . logger Ġ{} Ċ Ċ class ĠPostgres B ru kt Sub sums jon Store ( ĊĠĠĠ Ġprivate Ġval ĠdataSource : ĠDataSource , ĊĠĠĠ Ġval Ġsub sums jon Store : ĠSub sums jon Store Ġ= ĠPostgres Sub sums jon Store ( dataSource ) Ċ ) Ġ: ĠB ru kt Sub sums jon Store , ĠHealth Check Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinsert Counter Ġ= ĠCounter . build (). name (" sub sums jon _ br uk t _ insert ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. namespace (" no _ nav _ dag p enger ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. help (" H vor Ġm ange Ġsub sums jon er Ġf ra Ġved tak Ġl yt ter "). register () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstatus (): ĠHealth Status Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusing ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsession . run ( query Of (" SELECT Ġ 1 "). as Execute ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. let Ġ{ ĠHealth Status . UP Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( p : ĠP SQLException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . error (" Failed Ġhealth Ġcheck ", Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠHealth Status . DOWN ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlist Sub sums jon B ru kt (): ĠList < Intern Sub sums jon B ru kt > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġusing ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT Ġ* ĠFROM Ġv 2 _ sub sums jon _ br uk t """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Map () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Intern Sub sums jon B ru kt ( r ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. asList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġek st ern Til Intern Sub sums jon ( ek st ern Sub sums jon B ru kt : ĠE k st ern Sub sums jon B ru kt ): ĠIntern Sub sums jon B ru kt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbe hand lings Id Ġ= Ġsub sums jon Store . h ent K ob ling Til Re gel Kont ek st ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe gel Kont ek st ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġek st ern Sub sums jon B ru kt . ek st ern Id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKont ek st . ved tak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġ?: Ġthrow ĠSub sums jon B ru kt NotFoundException (" Could Ġnot Ġfind Ġsus b sums jon Ġbased Ġon Ġ$ ek st ern Sub sums jon B ru kt ") ĊĠĠĠĠĠĠĠ Ġreturn ĠIntern Sub sums jon B ru kt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġek st ern Sub sums jon B ru kt . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe hand lings Id Ġ= Ġbe hand lings Id . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarena Ts Ġ= Ġek st ern Sub sums jon B ru kt . arena Ts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= ĠZ onedDateTime . of Instant ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . of Epoch Milli ( ek st ern Sub sums jon B ru kt . ts ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠZone Offset . UTC ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sub sums jon By Result ( sub sums jon Id : ĠSub sums jon Id ): ĠSub sums jon Ġ= ĊĠĠĠĠĠĠĠ Ġsub sums jon Store . getSub sums jon By Result ( sub sums jon Id ) ĊĊĠĠĠ Ġoverride Ġfun Ġinsert Sub sums jon B ru kt ( intern Sub sums jon B ru kt : ĠIntern Sub sums jon B ru kt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġusing ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( intern Sub sums jon B ru kt . created ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġquery Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" INSERT ĠINTO Ġv 2 _ sub sums jon _ br uk t ( id , Ġbe hand lings _ id , Ġarena _ ts ) ĠVALUES Ġ(: id , Ġ: be handling , Ġ: arena ) ĠON ĠCON FLI CT ĠDO ĠNOT H ING """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto Ġintern Sub sums jon B ru kt . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" be handling " Ġto Ġintern Sub sums jon B ru kt . be hand lings Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" arena " Ġto Ġintern Sub sums jon B ru kt . arena Ts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). as Update ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġquery Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" INSERT ĠINTO Ġv 2 _ sub sums jon _ br uk t ( id , Ġbe hand lings _ id , Ġarena _ ts , Ġcreated ) ĠVALUES Ġ(: id , Ġ: be handling , Ġ: arena , Ġ: created ) ĠON ĠCON FLI CT ĠDO ĠNOT H ING """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġto Ġintern Sub sums jon B ru kt . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" be handling " Ġto Ġintern Sub sums jon B ru kt . be hand lings Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" arena " Ġto Ġintern Sub sums jon B ru kt . arena Ts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" created " Ġto Ġintern Sub sums jon B ru kt . created ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). as Update ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sub sums jon B ru kt ( sub sums jon Id : ĠSub sums jon Id ): ĠIntern Sub sums jon B ru kt ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġusing ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT Ġ* ĠFROM Ġv 2 _ sub sums jon _ br uk t ĠWHERE Ġid Ġ= Ġ: id """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" id " Ġto Ġsub sums jon Id . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġr Ġ-> Ġextract Intern Sub sums jon B ru kt ( r ) Ġ}. as Single ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Intern Sub sums jon B ru kt ( r : ĠRow ): ĠIntern Sub sums jon B ru kt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠIntern Sub sums jon B ru kt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġr . string (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe hand lings Id Ġ= Ġr . string (" be hand lings _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarena Ts Ġ= Ġr . zon ed DateTime (" arena _ ts "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= Ġr . zon ed DateTime (" created ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsub sums jon B ru kt F ra Be hand lings Id ( be hand lings Id : ĠString ): ĠList < Intern Sub sums jon B ru kt > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġusing ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" SELECT Ġ* ĠFROM Ġv 2 _ sub sums jon _ br uk t ĠWHERE Ġbe hand lings _ id Ġ= Ġ: bid """, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" bid " Ġto Ġbe hand lings Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). map Ġ{ Ġr Ġ-> Ġextract Intern Sub sums jon B ru kt ( r ) Ġ}. asList ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ