package Ġgov . cdc . prime . router . azure Ċ Ċ import Ġgov . cdc . prime . router . azure . db . Tables . ACTION Ċ import Ġgov . cdc . prime . router . azure . db . Tables . ACTION _ LOG Ċ import Ġgov . cdc . prime . router . azure . db . Tables . REPORT _ FILE Ċ import Ġgov . cdc . prime . router . azure . db . Tables . REPORT _ LINE AGE Ċ import Ġgov . cdc . prime . router . azure . db . enums . Task Action Ċ import Ġorg . jooq . Common Table Expression Ċ import Ġorg . jooq . Select Field Or A ster isk Ċ import Ġorg . jooq . impl . DSL Ċ import Ġorg . jooq . impl . SQL DataType . BIG INT Ċ import Ġorg . jooq . impl . SQL DataType . UUID Ċ import Ġjava . time . Offset DateTime Ċ Ċ interface ĠSubmission Access Ġ{ ĊĠĠĠ Ġenum Ġclass ĠSort Order Ġ{ ĊĠĠĠĠĠĠĠ ĠDESC , ĊĠĠĠĠĠĠĠ ĠASC , ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġfetch Actions ( ĊĠĠĠĠĠĠĠ Ġsending Org : ĠString , ĊĠĠĠĠĠĠĠ Ġorder : ĠSort Order , ĊĠĠĠĠĠĠĠ Ġresults After Date : ĠOffset DateTime ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt Ġ= Ġ 1 0 , ĊĠĠĠĠĠĠĠ Ġklass : ĠClass < T > ĊĠĠĠ Ġ): ĠList < T > ĊĊĠĠĠ Ġfun Ġ< T , ĠP , ĠU > Ġfetch Action ( ĊĠĠĠĠĠĠĠ Ġsending Org : ĠString , ĊĠĠĠĠĠĠĠ Ġsubmission Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġklass : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġreports K lass : ĠClass < P >, ĊĠĠĠĠĠĠĠ Ġlogs K lass : ĠClass < U >, ĊĠĠĠ Ġ): ĠT ? ĊĊĠĠĠ Ġfun Ġ< T , ĠP , ĠU > Ġfetch Related Actions ( ĊĠĠĠĠĠĠĠ Ġsubmission Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġklass : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġreports K lass : ĠClass < P >, ĊĠĠĠĠĠĠĠ Ġlogs K lass : ĠClass < U >, ĊĠĠĠ Ġ): ĠList < T > Ċ } Ċ /** Ċ Ġ* ĠClass Ġto Ġaccess Ġlookup Ġtables Ġstored Ġin Ġthe Ġdatabase . Ċ Ġ*/ Ċ class ĠDatabase Sub missions Access ( private Ġval Ġdb : ĠDatabase Access Ġ= ĠDatabase Access ()) Ġ: ĠSubmission Access Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġsending Org Ġis Ġthe ĠOrganization ĠName Ġreturned Ġfrom Ġthe ĠOk ta ĠJWT ĠClaim . ĊĠĠĠĠ Ġ* Ġ@ param Ġsort Order Ġsort Ġthe Ġtable Ġby Ġdate Ġin ĠASC Ġor ĠDESC Ġorder . ĊĠĠĠĠ Ġ* Ġ@ param Ġresults After Date Ġis Ġthe ĠAction ĠId Ġof Ġthe Ġlast Ġresult Ġin Ġthe Ġprevious Ġlist . ĊĠĠĠĠ Ġ* Ġ@ param Ġlimit Ġis Ġan ĠInteger Ġused Ġfor Ġsetting Ġthe Ġnumber Ġof Ġresults Ġper Ġpage . ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġlist Ġof Ġresults Ġmatching Ġthe ĠSQL ĠQuery . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġfetch Actions ( ĊĠĠĠĠĠĠĠ Ġsending Org : ĠString , ĊĠĠĠĠĠĠĠ Ġorder : ĠSubmission Access . SortOrder , ĊĠĠĠĠĠĠĠ Ġresults After Date : ĠOffset DateTime ?, ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt , ĊĠĠĠĠĠĠĠ Ġklass : ĠClass < T > ĊĠĠĠ Ġ): ĠList < T > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsorted Ġ= Ġif Ġ( order Ġ== ĠSubmission Access . SortOrder . ASC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION . CREATED _ AT . asc () ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĠACTION . CREATED _ AT . desc () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdb . transact Return ing Ġ{ Ġtxn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠDSL . using ( txn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select From ( ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ACTION . ACTION _ NAME . eq ( Task Action . receive ). and ( ACTION . SEND ING _ ORG . eq ( sending Org ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. orderBy ( sorted ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results After Date Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery . seek ( results After Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery . limit ( limit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Into ( klass ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< P , ĠU > Ġdetailed Submission Select ( ĊĠĠĠĠĠĠĠ Ġreports K lass : ĠClass < P >, ĊĠĠĠĠĠĠĠ Ġlogs K lass : ĠClass < U >, ĊĠĠĠ Ġ): ĠList < Select Field Or A ster isk > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠACTION . aster isk (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . multi set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( ACTION _ LOG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ACTION _ LOG . ACTION _ ID . eq ( ACTION . ACTION _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). ` as ` (" logs "). convert From Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ?. into ( logs K lass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . multi set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . select () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( REPORT _ FILE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( REPORT _ FILE . ACTION _ ID . eq ( ACTION . ACTION _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). ` as ` (" reports "). convert From Ġ{ Ġr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr ?. into ( reports K lass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġfetch Ġthe Ġdetails Ġof Ġa Ġsingle Ġaction ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< T , ĠP , ĠU > Ġfetch Action ( ĊĠĠĠĠĠĠĠ Ġsending Org : ĠString , ĊĠĠĠĠĠĠĠ Ġsubmission Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġklass : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġreports K lass : ĠClass < P >, ĊĠĠĠĠĠĠĠ Ġlogs K lass : ĠClass < U >, ĊĠĠĠ Ġ): ĠT ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdb . transact Return ing Ġ{ Ġtxn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . using ( txn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select ( detailed Submission Select ( reports K lass , Ġlogs K lass )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION . ACTION _ NAME . eq ( Task Action . receive ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( ACTION . SEND ING _ ORG . eq ( sending Org )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. and ( ACTION . ACTION _ ID . eq ( submission Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch One ()?. into ( klass ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreport Dec end ent Expression ( submission Id : ĠLong ): ĠCommon Table Expression < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDSL . name (" t "). fields ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" action _ id ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" child _ report _ id ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" parent _ report _ id " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBack ticks Ġescape Ġthe Ġkotlin Ġreserved Ġword , Ġso ĠJ OO Q Ġcan Ġuse Ġit 's Ġ" as " ĊĠĠĠĠĠĠĠ Ġ). ` as `( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . select ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPORT _ LINE AGE . ACTION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPORT _ LINE AGE . CHILD _ REPORT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPORT _ LINE AGE . PARENT _ REPORT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( REPORT _ LINE AGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( REPORT _ LINE AGE . ACTION _ ID . eq ( submission Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. union All ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . select ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPORT _ LINE AGE . ACTION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPORT _ LINE AGE . CHILD _ REPORT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREPORT _ LINE AGE . PARENT _ REPORT _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( DSL . table ( DSL . name (" t "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( REPORT _ LINE AGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . field ( DSL . name (" t ", Ġ" child _ report _ id "), ĠUUID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. eq ( REPORT _ LINE AGE . PARENT _ REPORT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠFetch Ġthe Ġdetails Ġof Ġan Ġactions Ġrelations Ġ( desc end ents ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġdone Ġthrough Ġa Ġrecursive Ġquery Ġon Ġthe Ġreport _ line age Ġtable ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġ< T , ĠP , ĠU > Ġfetch Related Actions ( ĊĠĠĠĠĠĠĠ Ġsubmission Id : ĠLong , ĊĠĠĠĠĠĠĠ Ġklass : ĠClass < T >, ĊĠĠĠĠĠĠĠ Ġreports K lass : ĠClass < P >, ĊĠĠĠĠĠĠĠ Ġlogs K lass : ĠClass < U >, ĊĠĠĠ Ġ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc te Ġ= Ġreport Dec end ent Expression ( submission Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġdb . transact Return ing Ġ{ Ġtxn Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDSL . using ( txn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Recursive ( cte ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. select Distinct ( detailed Submission Select ( reports K lass , Ġlogs K lass )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ( cte ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on ( ACTION . ACTION _ ID . eq ( cte . field (" action _ id ", ĠBIGINT ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( ACTION . ACTION _ ID . ne ( submission Id )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Into ( klass ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }