package Ġcom . kon k uk . boost . repositories Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . google . firebase . crash ly t ics . Firebase Crash ly t ics Ċ import Ġcom . kon k uk . boost . api . Authorized K uis Service Ċ import Ġcom . kon k uk . boost . data . grade . Grad uation Simulation Response Ċ import Ġcom . kon k uk . boost . data . grade . Metadata Grade Ċ import Ġcom . kon k uk . boost . persistence . Preference Manager Ċ import Ġcom . kon k uk . boost . persistence . area . Subject Area Dao Ċ import Ġcom . kon k uk . boost . persistence . area . Subject Area Entity Ċ import Ġcom . kon k uk . boost . persistence . grade . Grade Contract Ċ import Ġcom . kon k uk . boost . persistence . grade . Grade Dao Ċ import Ġcom . kon k uk . boost . persistence . grade . Grade Entity Ċ import Ġcom . kon k uk . boost . persistence . grade . Year Se mester Entity Ċ import Ġcom . kon k uk . boost . persistence . sim ul . Grad uation Simulation Dao Ċ import Ġcom . kon k uk . boost . persistence . sim ul . Grad uation Simulation Entity Ċ import Ġcom . kon k uk . boost . utils . DateTime Converter Ċ import Ġcom . kon k uk . boost . utils . Grade Utils Ċ import Ġcom . kon k uk . boost . utils . Messages Ċ import Ġcom . kon k uk . boost . utils . UseCase Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠGr ade Repository Impl ( ĊĠĠĠ Ġprivate Ġval Ġauthorized K uis Service : ĠAuthor ized K uis Service , ĊĠĠĠ Ġprivate Ġval Ġgrad uation Simulation Dao : ĠGrad uation Simulation Dao , ĊĠĠĠ Ġprivate Ġval Ġpreference Manager : ĠPreference Manager , ĊĠĠĠ Ġprivate Ġval Ġgrade Dao : ĠGr ade Dao , ĊĠĠĠ Ġprivate Ġval Ġsubject Area Dao : ĠSubject Area Dao , Ċ ) Ġ: ĠGr ade Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġmake Grad uation Simulation Request (): ĠUse Case < Grad uation Simulation Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġstd No Ġ= Ġpreference Manager . std No Pref ĊĠĠĠĠĠĠĠ Ġval Ġcourse Year Ġ= Ġstd No . toString (). substring ( 0 , Ġ 4 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġcode Ġ= Ġpreference Manager . code Pref ĊĊĠĠĠĠĠĠĠ Ġval Ġgrad uation Simulation Response : ĠGrad uation Simulation Response ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( username . isEmpty ()) Ġthrow ĠException (" No Ġusername .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrad uation Simulation Response Ġ= Ġauthorized K uis Service . fetch Grad uation Simulation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd No Ġ= Ġstd No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġcourse Year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh reg Cd Ġ= Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimulations Ġ= Ġgrad uation Simulation Response . sim ulations Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimulation Entities Ġ= Ġmutable ListOf < Grad uation Simulation Entity >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( simulation Ġin Ġsimulations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsimulation Entities Ġ+= ĠGrad uation Simulation Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassification Ġ= Ġsimulation . classification , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstandard Ġ= Ġsimulation . standard Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġacquired Ġ= Ġsimulation . acquire d ?. toInt () Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremainder Ġ= Ġsimulation . remainder Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodified At Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrad uation Simulation Dao . insert Grad uation Simulation (* simulation Entities . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Messages . LOG _ KEY , Ġ"${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( grad uation Simulation Response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Grad uation Sim ulations (): ĠUse Case < List < Grad uation Simulation Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgrad uation Simulation List : ĠList < Grad uation Simulation Entity > ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrad uation Simulation List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrad uation Simulation Dao . load Grad uation Simulation By Username ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( grad uation Simulation List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Std No (): ĠInt Ġ= Ġpreference Manager . std No Pref ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll Valid Gr ades (): ĠUse Case < List < Grade Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġgrade Preview Ġ= Ġpreference Manager . grade Preview ĊĊĠĠĠĠĠĠĠ Ġval Ġall Valid Gr ades : ĠList < Grade Entity > ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Valid Gr ades Ġ= Ġgrade Dao . getAll Valid Gr ades ( username , Ġgrade Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( all Valid Gr ades ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Not Deleted Gr ades (): ĠUse Case < List < Grade Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġgrade Preview Ġ= Ġpreference Manager . grade Preview ĊĊĠĠĠĠĠĠĠ Ġval Ġall Gr ades : ĠList < Grade Entity > ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Gr ades Ġ= Ġgrade Dao . get Not Deleted Gr ades ( username , Ġgrade Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( all Gr ades ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetCurrent Gr ades (): ĠUse Case < List < Grade Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Gr ades : ĠList < Grade Entity > ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Gr ades Ġ= Ġgrade Dao . get Pending Gr ades ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Grade Ġ= Ġpending Gr ades . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Year Ġ= Ġfirst Grade . year ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Se mester Ġ= Ġfirst Grade . semester ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Gr ades Ġ= Ġgrade Dao . getAll Gr ades ( username , Ġcurrent Year , Ġcurrent Se mester ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( current Gr ades ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Not Deleted Gr ades By Classification ( clf : ĠString ): ĠUse Case < List < Grade Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġgrade Preview Ġ= Ġpreference Manager . grade Preview ĊĊĠĠĠĠĠĠĠ Ġval Ġgr ades By Classification : ĠList < Grade Entity > ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgr ades By Classification Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Dao . get Not Deleted Gr ades By Classification ( username , Ġclf , Ġgrade Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( grade sBy Classification ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Not Deleted Major Gr ades (): ĠUse Case < List < Grade Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġgrade Preview Ġ= Ġpreference Manager . grade Preview ĊĊĠĠĠĠĠĠĠ Ġval Ġmajor Gr ades : ĠList < Grade Entity > ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmajor Gr ades Ġ= Ġgrade Dao . get Not Deleted Major Gr ades ( username , Ġgrade Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( major Gr ades ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll Subject Area (): ĠUse Case < List < Subject Area Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġsubject Areas : ĠList < Subject Area Entity > ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Areas Ġ= Ġsubject Area Dao . getAll ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Crash ly t ics . getInstance (). log ("${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( subject Areas ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Metadata (): ĠUse Case < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġstd No Ġ= Ġpreference Manager . std No Pref ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Gr ades Ġ= Ġmutable ListOf < Metadata Grade >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Se me sters Ġ= Ġgrade Dao . get Year Se mester ( username ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( year , Ġse mester ) Ġin Ġyear Se me sters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse mester Code Ġ= ĠGr ade Utils . to Se mester Code ( semester ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrade Response Ġ= Ġauthorized K uis Service . fetch Regular Grade ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse mester Code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Converter . today () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata Gr ades Ġ+= Ġgrade Response . grade s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Gr ades Ġ= Ġgrade Dao . getAll Gr ades ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtranslate Ġ= ĠlistOf (" 1 íķĻ ê¸° ", Ġ" íķĺ ê³Ħ Ġê³Ħ ìł Ī íķĻ ê¸° ", Ġ" 2 íķĻ ê¸° ", Ġ" ëıĻ ê³Ħ Ġê³Ħ ìł Ī íķĻ ê¸° ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( exist Grade Ġin Ġall Gr ades ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Grade Ġ= Ġmetadata Gr ades . find Ġ{ Ġgrade Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . year Ġ== Ġexist Grade . year Ġ&& Ġgrade . semester Name Ġ== Ġtranslate [ exist Grade . semester Ġ- Ġ 1 ] Ġ&& Ġgrade . subject Number Ġ== Ġexist Grade . subject Number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexist Grade . evaluation Method Ġ= Ġmetadata Grade . evaluation Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexist Grade . prof essor Ġ= Ġmetadata Grade . prof essor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexist Grade . subject Id Ġ= Ġmetadata Grade . subject Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Dao . insert Grade (* all Gr ades . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Manager . has Data Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Messages . LOG _ KEY , Ġ"${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġmake Pending Gr ades (): ĠUse Case < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġstd No Ġ= Ġpreference Manager . std No Pref ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( last Year , Ġlast Se mester ) Ġ= Ġgrade Dao . getLast Year Se mester ( username ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Year Ġ= ĠDateTime Converter . current Year (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Grade Entities Ġ= Ġmutable ListOf < Grade Entity >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( semester Ġin Ġlast Se mester Ġ+ Ġ 1 .. 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrade Response Ġ= Ġauthorized K uis Service . fetch Regular Grade ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr ade Utils . to Se mester Code ( semester ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Converter . today () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Grade Entities Ġ+= Ġget Updated Pending Grade Entities ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse mester , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Response . grade s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( year Ġin Ġlast Year Ġ+ Ġ 1 .. current Year ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( semester Ġin Ġ 1 .. 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrade Response Ġ= Ġauthorized K uis Service . fetch Regular Grade ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr ade Utils . to Se mester Code ( semester ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Converter . today () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Grade Entities Ġ+= Ġget Updated Pending Grade Entities ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse mester , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Response . grade s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Dao . insert Grade (* pending Grade Entities . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Manager . has Data Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Messages . LOG _ KEY , Ġ"${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmake Pending Gr ades For Fresh men () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Grade Preview (): ĠBoolean Ġ= Ġpreference Manager . grade Preview Ġ== Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġset Grade Preview ( use Preview : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpreference Manager . grade Preview Ġ= Ġif Ġ( use Preview ) Ġ 1 Ġelse Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Se me sters (): ĠUse Case < List < Year Se mester Entity >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġyear Se me sters : ĠList < Year Se mester Entity > ĊĠĠĠĠĠĠĠ Ġval Ġgrade Preview Ġ= Ġpreference Manager . grade Preview ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Se me sters Ġ= Ġgrade Dao . get Year Se mester ( username , Ġgrade Preview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Messages . LOG _ KEY , Ġ"${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( year Se me sters ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhas Data (): ĠBoolean Ġ= Ġpreference Manager . has Data ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġmake Pending Gr ades For Fresh men (): ĠUse Case < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġpreference Manager . username Pref ĊĠĠĠĠĠĠĠ Ġval Ġstd No Ġ= Ġpreference Manager . std No Pref ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Ġ= ĠDateTime Converter . current Year (). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse me sters Ġ= ĠlistOf ( 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpending Grade Entities Ġ= Ġmutable ListOf < Grade Entity >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( semester Ġin Ġse me sters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrade Response Ġ= Ġauthorized K uis Service . fetch Regular Grade ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd No , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr ade Utils . to Se mester Code ( semester ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDateTime Converter . today () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Grade Entities Ġ+= Ġget Updated Pending Grade Entities ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse mester , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Response . grade s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade Dao . insert Grade (* pending Grade Entities . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Manager . has Data Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( Messages . LOG _ KEY , Ġ"${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUse Case . error ("${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠUse Case . success ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Updated Pending Grade Entities ( ĊĠĠĠĠĠĠĠ Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġyear : ĠInt , ĊĠĠĠĠĠĠĠ Ġse mester : ĠInt , ĊĠĠĠĠĠĠĠ Ġgr ades : ĠList < Metadata Grade > ĊĠĠĠ Ġ): ĠList < Grade Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Grade Entity >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( grade Ġin Ġgr ades ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= ĠGr ade Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . evaluation Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse mester , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . classification , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . character Grade Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . grade Ġ?: Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . prof essor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . subject Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . subject Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . subject Number , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrade . subject Point , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGr ade Contract . Type . PENDING . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ Ċ }