package Ġcom . i way ee . exam . cache Ċ Ċ import Ġcom . i way ee . exam . api . comp . Topic Ċ import Ġcom . i way ee . exam . api . comp . Paper Ċ import Ġcom . i way ee . exam . api . comp . Session Ċ import Ġcom . i way ee . exam . api . comp . User Ċ import Ġcom . i way ee . exam . dao . mysql . User Dao Ċ import Ġio . vertx . core . json . JsonArray Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġjava . util .* Ċ Ċ object ĠUser Cache Ġ: ĠBase Cache () Ġ{ ĊĠ Ġprivate Ġvar Ġusers For Name Ġ= Ġmutable Map Of < String , ĠUser >() ĊĠ Ġprivate Ġvar Ġusers For Id Ġ= Ġmutable Map Of < Int , ĠUser >() ĊĠ Ġprivate Ġvar Ġsessions Ġ= Ġmutable Map Of < String , ĠSession >() ĊĊĠ Ġfun Ġcache Session ( token : ĠString , Ġuid : ĠInt , Ġsex : ĠInt ) Ġ{ ĊĠĠĠ Ġvar Ġsession : ĠSession ? Ġ= Ġnull ĊĠĠĠ Ġif Ġ( sessions . containsKey ( token )) Ġ{ ĊĠĠĠĠĠ Ġsession Ġ= Ġsessions [ token ] ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġsession Ġ= ĠSession ( uid ) ĊĠĠĠĠĠ Ġsessions [ token ] Ġ= Ġsession ĊĠĠĠ Ġ} ĊĠĠĠ Ġsession ?. let Ġ{ ĊĠĠĠĠĠ Ġit . token Ġ= Ġtoken ĊĠĠĠĠĠ Ġit . uid Ġ= Ġuid ĊĠĠĠĠĠ Ġit . sex Ġ= Ġsex ĊĠĠĠĠĠ Ġit . at Ġ= ĠDate (). time ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġclear Session ( token : ĠString ) Ġ{ ĊĠĠĠ Ġif Ġ( sessions . containsKey ( token )) Ġ{ ĊĠĠĠĠĠ Ġsessions . remove ( token ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġcurrent Id ( token : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġs Ġ= Ġsessions [ token ] ĊĠĠĠ Ġif Ġ( s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġs . uid ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 ĊĠ Ġ} ĊĊĠ Ġfun Ġcurrent Sex ( token : ĠString ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġs Ġ= Ġsessions [ token ] ĊĠĠĠ Ġif Ġ( s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġs . sex ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ 0 ĊĠ Ġ} ĊĊĠ Ġfun Ġexpired ( token : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġvar Ġs Ġ= Ġsessions [ token ] ĊĠĠĠ Ġif Ġ( s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġvar Ġnow Ġ= ĠDate (). time ĊĠĠĠĠĠ Ġreturn Ġ( now Ġ- Ġs . at ) Ġ> Ġ( 2 Ġ* Ġ 2 4 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcache User ( user : ĠUser ) Ġ{ ĊĠĠĠ Ġusers For Id [ user . id ] Ġ= Ġuser ĊĠĠĠ Ġusers For Name [ user . username ] Ġ= Ġuser ĊĠ Ġ} ĊĊĠ Ġfun Ġcreate ( jo : ĠJsonObject , Ġaction : Ġ( Long ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠUser Dao . create ( jo ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( it Ġ> Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠ Ġjo . put (" id ", Ġit . toInt ()) ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġjo . map To ( User :: class . java ) ĊĠĠĠĠĠĠĠ Ġcache User ( user ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠgetUser ByName ( name : ĠString , Ġaction : Ġ( User ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( users For Name . containsKey ( name )) Ġ{ ĊĠĠĠĠĠ Ġprintln (" èİ·åıĸ çĶ¨æĪ· æķ°æį® ï¼Ī ç¼ĵåŃĺ ï¼ī : Ġ$ name ") ĊĠĠĠĠĠ Ġusers For Name [ name ]?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġprintln (" èİ·åıĸ çĶ¨æĪ· æķ°æį® ï¼Ī DB ) ï¼ļ $ name ") ĊĠĠĠĠĠ ĠUser Dao . getUser ByName ( name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġit . map To ( User :: class . java ) ĊĠĠĠĠĠĠĠĠĠ Ġcache User ( user ) ĊĠĠĠĠĠĠĠĠĠ Ġaction ( user ) ĊĠĠĠĠĠĠĠ Ġ} ?: Ġaction ( null ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠgetUser ById ( id : ĠInt , Ġaction : Ġ( User ?) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( users For Id . containsKey ( id )) Ġ{ ĊĠĠĠĠĠ Ġprintln (" èİ·åıĸ çĶ¨æĪ· æķ°æį® ï¼Ī ç¼ĵåŃĺ ï¼ī : Ġ$ id ") ĊĠĠĠĠĠ Ġaction ( users For Id [ id ]) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġprintln (" èİ·åıĸ çĶ¨æĪ· æķ°æį® ï¼Ī DB ) ï¼ļ $ id ") ĊĠĠĠĠĠ ĠUser Dao . getUser ById ( id ) Ġ{ ĊĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġit . map To ( User :: class . java ) ĊĠĠĠĠĠĠĠĠĠ Ġcache User ( user ) ĊĠĠĠĠĠĠĠĠĠ Ġaction ( user ) ĊĠĠĠĠĠĠĠ Ġ} ?: Ġaction ( null ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġget Users ById s ( ids : ĠList < Int >, Ġaction : Ġ( Map < Int , ĠUser >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġvar Ġitem Map Ġ= Ġmutable Map Of < Int , ĠUser >() ĊĠĠĠ Ġvar Ġids For DB Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġif Ġ( ids . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġaction ( item Map ) ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( id Ġin Ġids ) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Map . containsKey ( id ) Ġ-> Ġcontinue ĊĠĠĠĠĠĠĠ Ġusers For Id . containsKey ( id ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġusers For Id [ id ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Map [ id ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġids For DB . add ( id ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln (" èİ·åıĸ çĶ¨æĪ· æķ°æį® ï¼Ī ç¼ĵåŃĺ ï¼ī ï¼ļ $ item Map ") ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġids For DB . isEmpty () Ġ-> Ġaction ( item Map ) ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġid Str Ġ= Ġjoin er . join ( ids For DB ) ĊĠĠĠĠĠĠĠ Ġprintln (" èİ·åıĸ çĶ¨æĪ· æķ°æį® ï¼Ī DB ï¼ī ï¼ļ $ id Str ") ĊĠĠĠĠĠĠĠ ĠUser Dao . getUser ById s ( id Str ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit ?. forEach Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjo Ġ= Ġentry . value Ġas ĠJsonObject ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġjo . map To ( User :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache User ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Map [ user . id ] Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġaction ( item Map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġsync To DB ( id : ĠInt , Ġaction : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠ Ġusers For Id . containsKey ( id ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġusers For Id [ id ] ĊĠĠĠĠĠĠĠ ĠUser Dao . update User ById ( id , ĠJsonObject . map From ( user )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġaction ( false ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ