/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ 2 0 2 0 ĠZ UP ĠIT ĠSER V IC OS ĠEM ĠT EC NO LOG IA ĠE ĠIN OV AC AO ĠSA Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* Ġ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 Ġio . char le sc d . m oo ve . legacy . m oo ve . service Ċ Ċ import Ġio . char le sc d . m oo ve . commons . exceptions . NotFoundException Legacy Ċ import Ġio . char le sc d . m oo ve . commons . extension . to Representation Ċ import Ġio . char le sc d . m oo ve . commons . representation . User Representation Ċ import Ġio . char le sc d . m oo ve . legacy . m oo ve . request . user . Add Groups Request Ċ import Ġio . char le sc d . m oo ve . legacy . m oo ve . request . user . Create UserRequest Ċ import Ġio . char le sc d . m oo ve . legacy . m oo ve . request . user . Reset Password Request Ċ import Ġio . char le sc d . m oo ve . legacy . m oo ve . request . user . Update UserRequest Ċ import Ġio . char le sc d . m oo ve . legacy . repository . UserRepository Ċ import Ġio . char le sc d . m oo ve . legacy . repository . entity . User Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . util .* Ċ import Ġjavax . transaction . Transactional Ċ Ċ @ Service Ċ class ĠUserService Legacy ( ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġkey cloak Service : ĠKey cloak Service Ċ ) Ġ{ ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġcreate ( create UserRequest : ĠCreate UserRequest ): ĠUser Representation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate UserRequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Model () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let ( this :: save And Flush User ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġuser Ġ-> Ġadd User To Key cloak ( user , Ġcreate UserRequest . password ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Representation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Groups To User ( userId : ĠString , Ġadd Groups Request : ĠAdd Groups Request ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . user Repository . findById ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġthis . keycloak Service . add Groups To User ( it . email , Ġadd Groups Request . group Ids ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠNotFound Exception Legacy (" user ", ĠuserId ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove User From Group ( userId : ĠString , ĠgroupId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . user Repository . findById ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠNotFound Exception Legacy (" user ", ĠuserId ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġkey cloak Service . remove User From Group ( it . email , ĠgroupId ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( id : ĠString , Ġupdate UserRequest : ĠUpdate UserRequest ): ĠUser Representation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . findById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this . update UserData ( update UserRequest )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: save And Flush User ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: to Representation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠNotFound Exception Legacy (" user ", Ġid ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġdelete ( id : ĠString ): ĠUser Representation Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . findById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: delete User ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġkey cloak Service . delete User By Email ( it . email ); Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( this :: to Representation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠNotFound Exception Legacy (" user ", Ġid ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UserData ( update UserRequest : ĠUpdate UserRequest ): Ġ( User ) Ġ-> ĠUser Ġ= ĊĠĠĠĠĠĠĠ Ġ{ Ġuser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġupdate UserRequest . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġupdate UserRequest . email . toLowerCase (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Url Ġ= Ġupdate UserRequest . photoUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave And Flush User ( user : ĠUser ): ĠUser Ġ= ĊĠĠĠĠĠĠĠ Ġuser Repository . save And Flush ( user ) ĊĊĠĠĠ Ġprivate Ġfun Ġdelete User ( user : ĠUser ): ĠUser Ġ= ĊĠĠĠĠĠĠĠ Ġuser . also Ġ{ Ġuser Repository . delete ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Representation ( user : ĠUser ): ĠUser Representation Ġ= Ġuser . to Representation () ĊĊĠĠĠ Ġprivate Ġfun ĠCreate UserRequest . to Model () Ġ= ĠUser ( ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġthis . name , ĊĠĠĠĠĠĠĠ Ġemail Ġ= Ġthis . email . toLowerCase (). trim (), ĊĠĠĠĠĠĠĠ Ġphoto Url Ġ= Ġthis . photoUrl , ĊĠĠĠĠĠĠĠ Ġis Root Ġ= Ġthis . is Root Ġ?: Ġfalse , ĊĠĠĠĠĠĠĠ ĠcreatedAt Ġ= ĠLocalDateTime . now () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġadd User To Key cloak ( user : ĠUser , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . keycloak Service . createUser ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . email , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . is Root ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset Password ( email : ĠString , Ġrequest : ĠReset Password Request ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġkey cloak Service . reset Password ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . new Password ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ } Ċ