package Ġsample . model . account Ċ Ċ import Ġorg . springframework . security . crypto . password . Password Encoder Ċ import Ġsample . Error Keys Ċ import Ġsample . ValidationException Ċ import Ġsample . context . Dto Ċ import Ġsample . context . actor . Actor Ċ import Ġsample . context . actor . Actor Role Type Ċ import Ġsample . context . orm . Orm ActiveRecord Ċ import Ġsample . context . orm . Orm Repository Ċ import Ġsample . model . constraints . Email Ċ import Ġsample . model . constraints . Id Str Ċ import Ġsample . model . constraints . Name Ċ import Ġsample . model . constraints . Password Ċ import Ġsample . util . Validator Ċ import Ġjava . util .* Ċ import Ġjavax . persistence . Entity Ċ import Ġjavax . persistence . Enum Type Ċ import Ġjavax . persistence . Enumer ated Ċ import Ġjavax . persistence . Id Ċ import Ġjavax . validation . constraints . NotNull ĊĊ Ċ /** Ċ Ġ* Ġ åı£ åº§ ãĤĴ è¡¨ çı¾ ãģĹãģ¾ãģĻ ãĢĤ Ċ Ġ* Ġlow : ĠãĤµ ãĥ³ãĥĹ ãĥ« çĶ¨ ãģ« å¿ħè¦ģ æľĢ ä½İ éĻĲ ãģ® éłħ çĽ® ãģłãģĳ Ċ Ġ*/ Ċ @ Entity Ċ data Ġclass ĠAccount ( ĊĠĠĠĠĠĠĠ Ġ/** Ġ åı£ åº§ ID Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Id ĊĠĠĠĠĠĠĠ Ġ@ field : Id Str ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ/** Ġ åı£ åº§ åĲį ç¾© Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ field : Name ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġ/** Ġãĥ¡ ãĥ¼ãĥ« ãĤ¢ ãĥī ãĥ¬ ãĤ¹ Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ field : Email ĊĠĠĠĠĠĠĠ Ġvar Ġmail : ĠString , ĊĠĠĠĠĠĠĠ Ġ/** Ġ åı£ åº§ çĬ¶æħĭ Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ field : NotNull ĊĠĠĠĠĠĠĠ Ġ@ Enumer ated ( Enum Type . STRING ) ĊĠĠĠĠĠĠĠ Ġvar Ġstatus Type : ĠAccount StatusType Ċ ) Ġ: ĠO rm ActiveRecord < Account >() Ġ{ ĊĊĠĠĠ Ġfun Ġactor (): ĠActor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActor ( id Ġ= Ġid !! , Ġrole Type Ġ= ĠActor Role Type . User , Ġname Ġ= Ġname ) ĊĊĠĠĠ Ġ/** Ġ åı£ åº§ ãģ« ç´ Ĳ ä»ĺ ãģı ãĥŃãĤ° ãĤ¤ãĥ³ æĥħåł± ãĤĴåıĸå¾Ĺ ãģĹãģ¾ãģĻ ãĢĤ Ġ Ġ*/ ĊĠĠĠ Ġfun Ġload Login ( rep : ĠO rm Repository ): ĠLogin Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogin . load ( rep , Ġid !! ) ĊĊĠĠĠ Ġ/** Ġ åı£ åº§ ãĤĴ å¤īæĽ´ ãģĹãģ¾ãģĻ ãĢĤ Ġ Ġ*/ ĊĠĠĠ Ġfun Ġchange ( rep : ĠO rm Repository , Ġp : ĠCh g Account ): ĠAccount Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . bind ( this ). update ( rep ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠserialVersionUID Ġ= Ġ 1 L ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ åı£ åº§ ãĤĴåıĸå¾Ĺ ãģĹãģ¾ãģĻ ãĢĤ Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget ( rep : ĠO rm Repository , Ġid : ĠString ?): ĠOptional < Account > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrep . get ( Account :: class . java , Ġid !! ) ĊĊĠĠĠĠĠĠĠ Ġ/** Ġæľī åĬ¹ ãģª åı£ åº§ ãĤĴåıĸå¾Ĺ ãģĹãģ¾ãģĻ ãĢĤ Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Valid ( rep : ĠO rm Repository , Ġid : ĠString ): ĠOptional < Account > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget ( rep , Ġid ). filter Ġ{ Ġacc Ġ-> Ġacc . status Type . valid () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ åı£ åº§ ãĤĴåıĸå¾Ĺ ãģĹãģ¾ãģĻ ãĢĤ ( ä¾ĭ å¤ĸ ä»ĺ ) Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġload ( rep : ĠO rm Repository , Ġid : ĠString ): ĠAccount Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrep . load ( Account :: class . java , Ġid ) ĊĊĠĠĠĠĠĠĠ Ġ/** Ġæľī åĬ¹ ãģª åı£ åº§ ãĤĴåıĸå¾Ĺ ãģĹãģ¾ãģĻ ãĢĤ ( ä¾ĭ å¤ĸ ä»ĺ ) Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġload Valid ( rep : ĠO rm Repository , Ġid : ĠString ): ĠAccount Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Valid ( rep , Ġid ). orElse Throw Ġ{ ĠValidation Exception (" error . Account . load Valid ") Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åı£ åº§ ãģ® çĻ»éĮ² ãĤĴè¡Į ãģĦ ãģ¾ãģĻ ãĢĤ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġãĥ Ń ãĤ° ãĤ¤ãĥ³ æĥħåł± ãĤĤ åĲĮ æĻĤ ãģ« çĻ»éĮ² ãģķãĤĮãģ¾ãģĻ ãĢĤ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġregister ( rep : ĠO rm Repository , Ġencoder : ĠPassword Encoder , Ġp : ĠReg Account ): ĠAccount Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠValidator . validate Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . check Field (! get ( rep , Ġp . id ). isPresent , Ġ" id ", ĠError Keys . Duplicate Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . create Login ( encoder . encode ( p . plain Password )). save ( rep ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġp . create (). save ( rep ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ enum Ġclass ĠAccount StatusType Ġ{ ĊĠĠĠ Ġ/** Ġ éĢļå¸¸ Ġ*/ ĊĠĠĠ ĠNormal , ĊĠĠĠ Ġ/** Ġ éĢĢ ä¼ļ Ġ*/ ĊĠĠĠ ĠWith draw al ; ĊĊĠĠĠ Ġfun Ġvalid (): ĠBoolean Ġ= Ġthis Ġ== ĠNormal ĊĠĠĠ Ġfun Ġinvalid (): ĠBoolean Ġ= Ġ! valid () Ċ } Ċ Ċ /** Ġ çĻ»éĮ² ãĥĳ ãĥ©ãĥ¡ ãĤ¿ Ġ Ġ*/ Ċ data Ġclass ĠReg Account ( ĊĠĠĠĠĠĠĠ Ġ@ field : Id Str ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ field : Name ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ field : Email ĊĠĠĠĠĠĠĠ Ġval Ġmail : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ/** Ġãĥĳ ãĤ¹ ãĥ¯ ãĥ¼ãĥī ( æľª ãĥı ãĥĥ ãĤ·ãĥ¥ ) Ġ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ field : Password ĊĠĠĠĠĠĠĠ Ġval Ġplain Password : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠD to Ġ{ ĊĠĠĠ Ġfun Ġcreate (): ĠAccount Ġ= ĠAccount ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġname !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmail Ġ= Ġmail !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Type Ġ= ĠAccount StatusType . Normal ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġcreate Login ( password : ĠString ): ĠLogin Ġ= ĠLogin ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin Id Ġ= Ġid !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ġ å¤īæĽ´ ãĥĳ ãĥ©ãĥ¡ ãĤ¿ Ġ Ġ*/ Ċ data Ġclass ĠCh g Account ( ĊĠĠĠĠĠĠĠ Ġ@ field : Name ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ@ field : Email ĊĠĠĠĠĠĠĠ Ġval Ġmail : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠD to Ġ{ ĊĠĠĠ Ġfun Ġbind ( m : ĠAccount ): ĠAccount Ġ{ ĊĠĠĠĠĠĠĠ Ġm . name Ġ= Ġname !! ĊĠĠĠĠĠĠĠ Ġm . mail Ġ= Ġmail !! ĊĠĠĠĠĠĠĠ Ġreturn Ġm ĊĠĠĠ Ġ} Ċ }