package Ġgov . cdc . prime . router . azure Ċ Ċ import Ġgov . cdc . prime . router . Detail Action Log Ċ import Ġgov . cdc . prime . router . Detail Report Ċ import Ġgov . cdc . prime . router . Detailed Submission History Ċ import Ġgov . cdc . prime . router . Submission History Ċ import Ġgov . cdc . prime . router . azure . db . tables . po jos . Action Ċ import Ġgov . cdc . prime . router . common . Jack son Mapper Utilities Ċ import Ġgov . cdc . prime . router . tokens . Authenticated Claims Ċ import Ġorg . apache . logging . log 4 j . kotlin . Logging Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . util . UUID Ċ Ċ /** Ċ Ġ* ĠSub missions Ġ/ Ġhistory ĠAPI Ċ Ġ* ĠContains Ġall Ġbusiness Ġlogic Ġregarding Ġsubmissions Ġand ĠJSON Ġserialization . Ċ Ġ*/ Ċ class ĠSub missions Facade ( ĊĠĠĠ Ġprivate Ġval Ġdb Submission Access : ĠSubmission Access Ġ= ĠDatabase Sub missions Access (), ĊĠĠĠ Ġprivate Ġval Ġdb Access : ĠDatabase Access Ġ= ĠWorkflow Engine . database Access Singleton Ċ ) Ġ: ĠLogging Ġ{ ĊĊĠĠĠ Ġ// ĠIgn oring Ġunknown Ġproperties Ġbecause Ġwe Ġdon 't Ġrequire Ġthem . Ġ- DK ĊĠĠĠ Ġprivate Ġval Ġmapper Ġ= ĠJack son Mapper Utilities . allow Unknown s Mapper ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSerial izes Ġa Ġlist Ġof ĠActions Ġinto Ġa ĠString . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġorganization Name Ġfrom ĠJWT ĠClaim . ĊĠĠĠĠ Ġ* Ġ@ param Ġsort Order Ġsort Ġthe Ġtable Ġby Ġdate Ġin ĠASC Ġor ĠDESC Ġorder . ĊĠĠĠĠ Ġ* Ġ@ param Ġsort Column Ġsort Ġthe Ġtable Ġby Ġa Ġspecific Ġcolumn ; Ġdefaults Ġto Ġsorting Ġby Ġcreated _ at . ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset ĠString Ġrepresentation Ġof Ġan ĠOffset DateTime Ġused Ġfor Ġpag in ating Ġresults . ĊĠĠĠĠ Ġ* Ġ@ param ĠpageSize ĠInt Ġof Ġitems Ġto Ġreturn Ġper Ġpage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠString Ġrepresentation Ġof Ġan Ġarray Ġof Ġactions . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Sub missions As Json ( ĊĠĠĠĠĠĠĠ Ġorganization Name : ĠString , ĊĠĠĠĠĠĠĠ Ġsort Order : ĠSubmission Access . SortOrder , ĊĠĠĠĠĠĠĠ Ġsort Column : ĠSubmission Access . Sort Column , ĊĠĠĠĠĠĠĠ Ġoffset : ĠOffset DateTime ?, ĊĠĠĠĠĠĠĠ Ġto End : ĠOffset DateTime ?, ĊĠĠĠĠĠĠĠ ĠpageSize : ĠInt , ĊĠĠĠĠĠĠĠ Ġshow Failed : ĠBoolean ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġfind Sub missions ( organization Name , Ġsort Order , Ġsort Column , Ġoffset , Ġto End , ĠpageSize , Ġshow Failed ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmapper . writeValue AsString ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param Ġorganization Name Ġfrom ĠJWT ĠClaim . ĊĠĠĠĠ Ġ* Ġ@ param Ġsort Order Ġsort Ġthe Ġtable Ġby Ġdate Ġin ĠASC Ġor ĠDESC Ġorder ; Ġdefaults Ġto ĠDESC . ĊĠĠĠĠ Ġ* Ġ@ param Ġsort Column Ġsort Ġthe Ġtable Ġby Ġa Ġspecific Ġcolumn ; Ġdefaults Ġto Ġsorting Ġby ĠCRE ATED _ AT . ĊĠĠĠĠ Ġ* Ġ@ param Ġoffset ĠString Ġrepresentation Ġof Ġan ĠOffset DateTime Ġused Ġfor Ġpag in ating Ġresults . ĊĠĠĠĠ Ġ* Ġ@ param ĠpageSize ĠInt Ġof Ġitems Ġto Ġreturn Ġper Ġpage . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġa ĠList Ġof ĠActions ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġfind Sub missions ( ĊĠĠĠĠĠĠĠ Ġorganization Name : ĠString , ĊĠĠĠĠĠĠĠ Ġsort Order : ĠSubmission Access . SortOrder , ĊĠĠĠĠĠĠĠ Ġsort Column : ĠSubmission Access . Sort Column , ĊĠĠĠĠĠĠĠ Ġoffset : ĠOffset DateTime ?, ĊĠĠĠĠĠĠĠ Ġto End : ĠOffset DateTime ?, ĊĠĠĠĠĠĠĠ ĠpageSize : ĠInt , ĊĠĠĠĠĠĠĠ Ġshow Failed : ĠBoolean ĊĠĠĠ Ġ): ĠList < Submission History > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( organization Name . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Invalid Ġorganization ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( pageSize Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" pageSize Ġmust Ġbe Ġa Ġpositive Ġinteger ." ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsubmissions Ġ= Ġdb Submission Access . fetch Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Column , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto End , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Failed , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSubmission History :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsubmissions ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Detailed Submission History ( ĊĠĠĠĠĠĠĠ Ġorganization Name : ĠString , ĊĠĠĠĠĠĠĠ Ġsubmission Id : ĠLong , ĊĠĠĠ Ġ): ĠD eta iled Submission History ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsubmission Ġ= Ġdb Submission Access . fetch Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission Id , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠD eta iled Submission History :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Report :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Action Log :: class . java , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsubmission ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelated Sub missions Ġ= Ġdb Submission Access . fetch Related Actions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubmission . action Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD eta iled Submission History :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Report :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Action Log :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . en rich With Desc endants ( related Sub missions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsubmission ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġsingle ĠAction Ġassociated Ġwith Ġthis Ġ[ report Id ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfetch Action For Report Id ( report Id : ĠUUID ): ĠAction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdb Access . fetch Action For Report Id ( report Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġa Ġsingle ĠAction , Ġgiven Ġits Ġkey Ġ[ action Id ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfetch Action ( action Id : ĠLong ): ĠAction ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdb Access . fetch Action ( action Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġwhether Ġthese Ġ[ claims ] Ġallow Ġaccess Ġto Ġthis Ġ[ action ] ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġ[ claims ] Ġauthor izes Ġaccess Ġto Ġthis Ġ' receive ' Ġ[ action ]. Ġ ĠReturn ĊĠĠĠĠ Ġ* Ġfalse Ġif Ġthe Ġsubmission Id Ġis Ġnot Ġa Ġproper Ġsubmission Ġor Ġif Ġthe Ġclaim Ġdoes Ġnot Ġgive Ġaccess . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck Sender Access Authorization ( ĊĠĠĠĠĠĠĠ Ġaction : ĠAction , ĊĠĠĠĠĠĠĠ Ġclaims : ĠAuth enticated Claims , ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdmin s Ġalways Ġget Ġaccess ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclaims . is Prime Admin Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUser Ġhas Ġa Ġsending Ġorganization Ġclaim , Ġand Ġthat Ġsending Org Ġmatches Ġthe Ġaction 's Ġsending Org ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( claims . is Sender Org Claim ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( action . sending Org Ġ== Ġclaims . organization Name Claim ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(! claims . organization Name Claim . isNull Or Blank ()) Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" User Ġfrom Ġorg Ġ'${ claims . organization Name Claim } '" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġdenied Ġaccess Ġto Ġaction _ id Ġ${ action . action Id }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġsubmitted Ġby Ġ${ action . sending Org }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠSub missions Facade Ġby Ġlazy ( Lazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSub missions Facade ( Database Sub missions Access ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }