package Ġcom . ata fel ska . service . notes . core Ċ Ċ import Ġcom . ata fel ska . service . notes . generated . Note Ċ import Ġcom . ata fel ska . service . notes . generated . Up sert Note Request Ċ import Ġorg . jetbrains . ex posed . sql .* Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġorg . springframework . stereotype . Repository Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . time . Zone Offset Ċ import Ġjava . util .* Ċ Ċ @ Repository Ċ class ĠNotes Repository ( val Ġdatabase : ĠNotes Database Configuration . Notes Database ) Ġ: ĠLogging Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun ĠResult Row . to Note () Ġ= ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġthis [ Notes . id ]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġthis [ Notes . text ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠOffset DateTime . of Instant ( this [ Notes . createdAt ], ĠZone Offset . UTC ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= Ġthis [ Notes . updatedAt ]?. let Ġ{ ĠupdatedAt Instant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOffset DateTime . of Instant ( updatedAt Instant , ĠZone Offset . UTC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Notes (): ĠList < Note > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction ( Database . connect ( database . dataSource )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger (). debug (" get Notes ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotes . selectAll (). map Ġ{ Ġit . to Note () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert OrUpdate Post ( upsert Note Request : ĠUp sert Note Request ): ĠNote Ġ= Ġtransaction ( Database . connect ( database . dataSource )) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Note Ġ= Ġupsert Note Request . note Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotes . select Ġ{ ĠNotes . id Ġeq ĠUUID . fromString ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to Note () ĊĠĠĠĠĠĠĠ Ġif Ġ( current Note Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger (). info (" Updating Ġnote : Ġ$ upsert Note Request ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedited Note Ġ= ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġupsert Note Request . note Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġupsert Note Request . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= Ġcurrent Note . createdAt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠupdatedAt Ġ= ĠOffset DateTime . now ( Zone Offset . UTC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotes . update ({ ĠNotes . id Ġeq ĠUUID . fromString ( current Note . id ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ text ] Ġ= Ġedited Note . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ updatedAt ] Ġ= Ġedited Note . updatedAt !!. to Instant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedited Note ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger (). info (" Inser ting Ġnote : Ġ$ upsert Note Request ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreated Note Ġ= ĠNote ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġupsert Note Request . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠOffset DateTime . now ( Zone Offset . UTC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNotes . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ id ] Ġ= ĠUUID . fromString ( created Note . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ text ] Ġ= Ġcreated Note . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ createdAt ] Ġ= Ġcreated Note . createdAt . to Instant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Note ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Note ( note Id : ĠString ) Ġ= Ġtransaction ( Database . connect ( database . dataSource )) Ġ{ ĊĠĠĠĠĠĠĠ ĠNotes . delete Where Ġ{ ĠNotes . id Ġeq ĠUUID . fromString ( note Id ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ