/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠPaul ĠAmb rose Ġ( p amb rose @ mac . com ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . github . reading bat . common Ċ Ċ import Ġcom . github . p amb rose . common . util . random Id Ċ import Ġcom . github . p amb rose . common . util . toDouble Quoted Ċ import Ġcom . github . reading bat . common . Form Fields . DISABLED _ MODE Ċ import Ġcom . github . reading bat . common . User . Companion . to User Ċ import Ġcom . github . reading bat . server . Classes Table Ċ import Ġcom . github . reading bat . server . En rol le es Table Ċ import Ġcom . github . reading bat . server . Users Table Ċ import Ġcom . p amb rose . common . ex posed . get Ċ import Ġio . ktor . http .* Ċ import Ġmu . K Logging Ċ import Ġorg . jetbrains . ex posed . sql . Count Ċ import Ġorg . jetbrains . ex posed . sql . and Ċ import Ġorg . jetbrains . ex posed . sql . delete Where Ċ import Ġorg . jetbrains . ex posed . sql . insert Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . transactions . transaction Ċ import Ġkotlin . time . measure Timed Value Ċ Ċ data Ġclass ĠClass Code ( val Ġclass Code : ĠString ) Ġ{ ĊĠ Ġval Ġis Not Enabled Ġby Ġlazy Ġ{ Ġclass Code Ġ== ĠDISABLE D _ MODE Ġ|| Ġclass Code . isBlank () Ġ} ĊĠ Ġval Ġis Enabled Ġby Ġlazy Ġ{ Ġ! isNot Enabled Ġ} ĊĊĠ Ġval Ġdisplayed Value Ġget () Ġ= Ġif Ġ( class Code Ġ== ĠDISABLE D _ MODE ) Ġ"" Ġelse Ġclass Code ĊĊĠ Ġprivate Ġval Ġclass Code Db ms Id ĊĠĠĠ Ġget () Ġ= ĊĠĠĠĠĠ Ġmeasure Timed Value Ġ{ ĊĠĠĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠClasses Table ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice ( Classes Table . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠClasses Table . class Code Ġeq Ġclass Code Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ Classes Table . id ]. value Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġerror (" Missing Ġclass Ġcode Ġ$ class Code ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}. let Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . debug Ġ{ Ġ" Look ed Ġup Ġclass Id Ġin Ġ${ it . duration }" Ġ} ĊĠĠĠĠĠĠĠ Ġit . value ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġfun Ġis Not Valid () Ġ= Ġ! isValid () ĊĊĠ Ġfun ĠisValid () Ġ= ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ ĠClasses Table ĊĠĠĠĠĠĠĠ Ġ. slice ( Count ( Classes Table . class Code )) ĊĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠClasses Table . class Code Ġeq Ġclass Code Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ 0 ] Ġas ĠLong Ġ} ĊĠĠĠĠĠĠĠ Ġ. first (). also Ġ{ Ġlogger . debug Ġ{ Ġ" Class Code . isValid () Ġreturned Ġ$ it Ġfor Ġ$ class Code " Ġ} Ġ} Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġfetch En rol le es (): ĠList < User > Ġ= ĊĠĠĠ Ġif Ġ( isNot Enabled ) ĊĠĠĠĠĠ Ġempty List () ĊĠĠĠ Ġelse ĊĠĠĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ids Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġ( Classes Table Ġinner Join ĠEn rol le es Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. slice ( En rol le es Table . user Ref ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠClasses Table . class Code Ġeq Ġclass Code Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ 0 ] Ġas ĠLong Ġ} ĊĊĠĠĠĠĠĠĠ ĠUsers Table ĊĠĠĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠUsers Table . id Ġin List Ġuser Ids Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ Users Table . userId ]. to User ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġlogger . debug Ġ{ Ġ" fetch En rol le es () Ġreturning Ġ${ it . size } Ġusers " Ġ} Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠ Ġfun Ġdelete Class Code () Ġ= ĠClasses Table . delete Where Ġ{ ĠClasses Table . class Code Ġeq Ġclass Code Ġ} ĊĊĠ Ġfun Ġadd En rol lee ( user : ĠUser ) Ġ= ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ ĠEn rol le es Table ĊĠĠĠĠĠĠĠ Ġ. insert Ġ{ Ġrow Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġrow [ classes Ref ] Ġ= Ġclass Code Db ms Id ĊĠĠĠĠĠĠĠĠĠ Ġrow [ user Ref ] Ġ= Ġuser . user Db ms Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun Ġremove En rol lee ( user : ĠUser ) Ġ= ĊĠĠĠ ĠEn rol le es Table . delete Where Ġ{ Ġ( En rol le es Table . classes Ref Ġeq Ġclass Code Db ms Id ) Ġand Ġ( En rol le es Table . user Ref Ġeq Ġuser . user Db ms Id ) Ġ} ĊĊĠ Ġfun Ġfetch Class Desc ( quoted : ĠBoolean Ġ= Ġfalse ) Ġ= ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġ( Classes Table ĊĠĠĠĠĠĠĠ Ġ. slice ( Classes Table . description ) ĊĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠClasses Table . class Code Ġeq Ġclass Code Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ 0 ] Ġas ĠString Ġ} ĊĠĠĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġ" Missing Ġdescription ") ĊĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġlogger . debug Ġ{ Ġ" fetch Class Desc () Ġreturned Ġ${ it . toDouble Quoted ()} Ġfor Ġ$ class Code " Ġ} Ġ} ĊĠĠĠ Ġ}. let Ġ{ Ġif Ġ( quoted ) Ġit . toDouble Quoted () Ġelse Ġit Ġ} ĊĊĠ Ġfun Ġto Display String () Ġ= Ġ"${ fetch Class Desc ( true )} Ġ[$ class Code ]" ĊĊĠ Ġfun Ġfetch Class Teacher Id () Ġ= ĊĠĠĠ Ġtransaction Ġ{ ĊĠĠĠĠĠ Ġ(( Classes Table Ġinner Join ĠUsers Table ) ĊĠĠĠĠĠĠĠ Ġ. slice ( Users Table . userId ) ĊĠĠĠĠĠĠĠ Ġ. select Ġ{ ĠClasses Table . class Code Ġeq Ġclass Code Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit [ 0 ] Ġas ĠString Ġ} ĊĠĠĠĠĠĠĠ Ġ. first OrNull () Ġ?: Ġ""). also Ġ{ Ġlogger . debug Ġ{ Ġ" fetch Class Teacher Id () Ġreturned Ġ$ it " Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠtoString () Ġ= Ġclass Code ĊĊĠ Ġcompanion Ġobject Ġ: ĠK Logging () Ġ{ ĊĠĠĠ Ġinternal Ġval ĠDISABLE D _ CLASS _ CODE Ġ= ĠClass Code ( DISABLED _ MODE ) ĊĊĠĠĠ Ġinternal Ġfun Ġnew Class Code () Ġ= ĠClass Code ( random Id ( 1 5 )) ĊĊĠĠĠ Ġinternal Ġfun ĠParameters . getClass Code ( parameter Name : ĠString ) Ġ= ĊĠĠĠĠĠ Ġthis [ parameter Name ]?. let Ġ{ ĠClass Code ( it ) Ġ} Ġ?: ĠDISABLE D _ CLASS _ CODE ĊĠ Ġ} Ċ }