package Ġcom . s ama . integration . google . calendar . infrastructure Ċ Ċ import Ġcom . s ama . common . to Ċ import Ġcom . s ama . integration . google . auth . domain . Google AccountId Ċ import Ġcom . s ama . integration . google . auth . infrastructure . to Google AccountId Ċ import Ġcom . s ama . integration . google . calendar . domain . Calendar Sync Ċ import Ġcom . s ama . integration . google . calendar . domain . Calendar Sync Repository Ċ import Ġcom . s ama . integration . google . calendar . domain . Google Calendar Id Ċ import Ġcom . s ama . users . domain . UserId Ċ import Ġcom . s ama . users . infrastructure . to UserId Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . time . Instant Ċ import Ġjava . time . Offset DateTime . of Instant Ċ import Ġjava . time . Zone Offset . UTC Ċ import Ġorg . springframework . dao . Empty Result Data AccessException Ċ import Ġorg . springframework . jdbc . core . named param . Map Sql Parameter Source Ċ import Ġorg . springframework . jdbc . core . named param . Named Parameter Jdbc Operations Ċ import Ġorg . springframework . jdbc . core . named param . Sql Parameter Source Ċ import Ġorg . springframework . stereotype . Component Ċ Ċ @ Component Ċ class ĠJdbc Calendar Sync Repository ( private Ġval Ġjdbc Template : ĠNamed Parameter Jdbc Operations ) Ġ: ĠCalendar Sync Repository Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġfind ( accountId : ĠGoogle AccountId , Ġcalendar Id : ĠGoogle Calendar Id ): ĠCalendar Sync ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ id ", ĠaccountId . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" calendar _ id ", Ġcalendar Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc Template . query For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġg cal . calendar _ sync Ġcs ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . google _ account _ id Ġ= Ġ: account _ id ĠAND Ġcs . calendar _ id Ġ= Ġ: calendar _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Mapper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEmpty Result Data AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll ( accountId : ĠGoogle AccountId ): ĠCollection < Calendar Sync > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ id ", ĠaccountId . id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc Template . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġg cal . calendar _ sync Ġcs ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . google _ account _ id Ġ= Ġ: account _ id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow Mapper ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll ( account Ids : ĠSet < Google AccountId >): ĠCollection < Calendar Sync > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( account Ids . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ ids ", Ġaccount Ids . map Ġ{ Ġit . id Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc Template . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġg cal . calendar _ sync Ġcs ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . google _ account _ id Ġin Ġ(: account _ ids ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow Mapper ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll Calendar Ids ( accountId : ĠGoogle AccountId ): ĠCollection < Google Calendar Id > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ id ", ĠaccountId . id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc Template . query For List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġcalendar _ id ĠFROM Ġg cal . calendar _ sync Ġcs Ġ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . google _ account _ id Ġ= Ġ: account _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGoogle Calendar Id :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind And Lock ( accountId : ĠGoogle AccountId , Ġcalendar Id : ĠGoogle Calendar Id ): ĠCalendar Sync ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ id ", ĠaccountId . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" calendar _ id ", Ġcalendar Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjdbc Template . query For Object ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM Ġg cal . calendar _ sync Ġcs ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . google _ account _ id Ġ= Ġ: account _ id ĠAND Ġcs . calendar _ id Ġ= Ġ: calendar _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFOR ĠUPDATE ĠNO WAIT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Mapper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠEmpty Result Data AccessException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind Sync able ( from : ĠInstant ): ĠCollection < Pair < Google AccountId , ĠGoogle Calendar Id >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamed Parameters : ĠSql Parameter Source Ġ= ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" timestamp ", Ġof Instant ( from , ĠUTC )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġjdbc Template . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġgoogle _ account _ id , Ġcalendar _ id ĠFROM Ġg cal . calendar _ sync Ġcs ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . next _ sync _ at Ġ< Ġ: timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnamed Parameters ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġrs , Ġ_ Ġ-> Ġrs . getLong (" google _ account _ id "). to Google AccountId () Ġto Ġrs . getString (" calendar _ id ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave ( calendar Sync : ĠCalendar Sync ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjdbc Template . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSERT ĠINTO Ġg cal . calendar _ sync Ġ( google _ account _ id , Ġcalendar _ id , Ġnext _ sync _ at , Ġfailed _ sync _ count , Ġsync _ token , Ġsynced _ from , Ġsynced _ to , Ġlast _ sync ed ) ĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVALUES Ġ(: account _ id , Ġ: calendar _ id , Ġ: next _ sync _ at , Ġ: failed _ sync _ count , Ġ: sync _ token , ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ: sync ed _ from , Ġ: sync ed _ to , Ġ: last _ sync ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠON ĠCON FLI CT Ġ( google _ account _ id , Ġcalendar _ id ) ĠDO ĠUPDATE ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSET Ġnext _ sync _ at Ġ= Ġ: next _ sync _ at , Ġfailed _ sync _ count Ġ= Ġ: failed _ sync _ count , Ġsync _ token Ġ= Ġ: sync _ token , ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsynced _ from Ġ= Ġ: sync ed _ from , Ġsynced _ to Ġ= Ġ: sync ed _ to , Ġlast _ sync ed Ġ= Ġ: last _ sync ed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ id ", Ġcalendar Sync . accountId . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" calendar _ id ", Ġcalendar Sync . calendar Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" next _ sync _ at ", Ġof Instant ( calendar Sync . next Sync At , ĠUTC )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" failed _ sync _ count ", Ġcalendar Sync . failed Sync Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" sync _ token ", Ġcalendar Sync . sync Token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" sync ed _ from ", Ġcalendar Sync . sync ed Range ?. start ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" sync ed _ to ", Ġcalendar Sync . sync ed Range ?. end ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" last _ sync ed ", Ġcalendar Sync . last Sync ed ?. let Ġ{ Ġof Instant ( it , ĠUTC ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete ( accountId : ĠGoogle AccountId , Ġcalendar Id : ĠGoogle Calendar Id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjdbc Template . update ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE ĠFROM Ġg cal . calendar _ sync Ġcs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġcs . google _ account _ id Ġ= Ġ: account _ id ĠAND Ġcs . calendar _ id Ġ= Ġ: calendar _ id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMap Sql Parameter Source () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" account _ id ", ĠaccountId . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Value (" calendar _ id ", Ġcalendar Id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrow Mapper : Ġ( ResultSet , Ġrow Num : ĠInt ) Ġ-> ĠCalendar Sync Ġ= Ġ{ Ġrs , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠCalendar Sync ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getLong (" google _ account _ id "). to Google AccountId (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" calendar _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getTimestamp (" next _ sync _ at ") !!. to Instant (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getInt (" failed _ sync _ count "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getString (" sync _ token "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getDate (" sync ed _ from ") ?. to LocalDate () Ġto Ġrs . getDate (" sync ed _ to ") ?. to LocalDate (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getTimestamp (" last _ sync ed ") ?. to Instant () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }