package Ġcz . mart info re jt . p isk v ork y . server . features . admin . use case Ċ Ċ import Ġcz . mart info re jt . p isk v ork y . domain . model . User Ċ import Ġcz . mart info re jt . p isk v ork y . domain . repository . Users Repository Ċ import Ġcz . mart info re jt . p isk v ork y . domain . use case . Error Ċ import Ġcz . mart info re jt . p isk v ork y . domain . use case . Result Ċ import Ġcz . mart info re jt . p isk v ork y . domain . use case . UseCase Result Ċ import Ġcz . mart info re jt . p isk v ork y . server . features . admin . model . Edit UserRequest Ċ import Ġcz . mart info re jt . p isk v ork y . domain . service . Hash Service Ċ import Ġcz . mart info re jt . p isk v ork y . server . security . User Principal Ċ import Ġkotlinx . coroutines . run Blocking Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠMartin ĠFore jt Ġon Ġ 2 6 . 1 2 . 2 0 2 0 . Ċ Ġ* Ġme @ mart info re jt . cz Ċ Ġ* Ċ Ġ* Ġ@ author ĠMartin ĠFore jt Ċ Ġ*/ Ċ class ĠEdit User UseCase ( ĊĠĠĠ Ġprivate Ġval Ġusers Repository : ĠUsers Repository , ĊĠĠĠ Ġprivate Ġval Ġhash Service : ĠHash Service Ċ ) Ġ: ĠUse Case Result < Unit , ĠEdit User UseCase . Params > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ PASSWORD S _ NOT _ MATCH Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠERROR _ PASSWORD _ LENGTH Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( params : ĠParams ): ĠResult < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( params . request . delete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( params . user . id Ġ== Ġparams . currentUser . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠError ( 0 , Ġ" Can Ġnot Ġdelete Ġself Ġaccount !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġusers Repository . delete User ( params . user . id ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdated Ġ= Ġparams . user . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadmin Ġ= Ġparams . request . admin , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactive Ġ= Ġparams . request . active ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ Ġusers Repository . update User ( updated ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( params . request . pass . isNull Or Blank (). not () Ġ&& Ġparams . request . pass Confirm . isNull Or Blank (). not ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( params . request . pass Ġ!= Ġparams . request . pass Confirm ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠError ( ERROR _ PASSWORD S _ NOT _ MATCH , Ġ" Password s Ġdo Ġnot Ġmatch .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( params . request . pass !!. length Ġ< Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= ĠError ( ERROR _ PASSWORD _ LENGTH , Ġ" Invalid Ġpassword Ġlength Ġ( minimum Ġ= Ġ 6 ). ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġhash Service . hash Password ( params . request . pass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers Repository . update User Password ( updated . id , Ġhash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠParams ( ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser : ĠUser Principal , ĊĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser , ĊĠĠĠĠĠĠĠ Ġval Ġrequest : ĠEdit UserRequest ĊĠĠĠ Ġ) Ċ }