package Ġcom . prototype . user directory . service Ċ Ċ import Ġcom . prototype . user directory . NotFoundException Ċ import Ġcom . prototype . user directory . dto . Address DTO Ċ import Ġcom . prototype . user directory . dto . User DTO Ċ import Ġcom . prototype . user directory . model . User DAO Ċ import Ġcom . prototype . user directory . repository . UserRepository Ċ import Ġcom . prototype . user directory . utils . from DTO Ċ import Ġcom . prototype . user directory . utils . to DTO Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjavax . validation . ValidationException Ċ Ċ @ Service Ċ class ĠUser Directory Service ( ĊĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġget In Active Users (): ĠList < User DTO > Ġ= Ġuser Repository . findAll In Active (). map Ġ{ Ġit . to DTO () Ġ} ĊĊĠĠĠ Ġfun Ġget In Active User ( id : ĠString ): ĠUser DTO Ġ= Ġin Active User OrThrow ( id ). to DTO () ĊĊĠĠĠ Ġfun Ġdelete In Active User ( id : ĠString ) Ġ= Ġuser Repository . perm Delete ( in Active User OrThrow ( id ). id ) ĊĊĠĠĠ Ġfun ĠgetAll Users (): ĠList < User DTO > Ġ= ĊĠĠĠĠĠĠĠ Ġuser Repository . findAll (). map Ġ{ Ġit . to DTO () Ġ} ĊĊĠĠĠ Ġ// TODO Ġsearch Ġcan Ġbe ĠSearch Criteria ĊĠĠĠ Ġ// TODO ĠSpecification Ġapproach Ġwill Ġhave Ġgreater Ġcontrol Ġ- Ġtime Ġfactor ĊĠĠĠ Ġfun Ġsearch Users ( search : ĠString ?): ĠList < User DTO > Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( name , Ġcountry ) Ġ= Ġsearch Criteria ( search ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . search Users ( name . trim (), Ġcountry . trim ()). map Ġ{ Ġit . to DTO () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠgetAll Users () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch In Active Users ( search : ĠString ?): ĠList < User DTO > Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( name , Ġcountry ) Ġ= Ġsearch Criteria ( search ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . search In Active Users ( name , Ġcountry ). map Ġ{ Ġit . to DTO () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget In Active Users () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser ( id : ĠString ): ĠUser DTO Ġ= Ġuser OrThrow ( id ). to DTO () ĊĊĠĠĠ Ġfun Ġpost User ( user : ĠUser DTO ): ĠUser DTO Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser DAO Ġ= Ġuser . from DTO () ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . save ( user DAO ). to DTO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Address ( id : ĠString , Ġaddress : ĠAddress DTO ): ĠUser DTO Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser DAO Ġ= Ġuser OrThrow ( id ) ĊĠĠĠĠĠĠĠ Ġuser DAO . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaddresses Ġ= Ġaddresses ?. plus ( address . from DTO ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . save ( user DAO ). to DTO () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete User ( id : ĠString ) Ġ= Ġuser Repository . soft Delete ( user OrThrow ( id ). id ) ĊĊĠĠĠ Ġprivate Ġfun Ġuser OrThrow ( id : ĠString ): ĠUser DAO Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser DAO Ġ= Ġuser Repository . findById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠNotFound Exception (" No ĠUser ĠProfile Ġfound Ġ[$ id ]") Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser DAO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġin Active User OrThrow ( id : ĠString ): ĠUser DAO Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser DAO Ġ= Ġuser Repository . find In Active ById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠNotFound Exception (" No ĠIn Active ĠUser ĠProfile Ġfound Ġ[$ id ]") Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuser DAO ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch Criteria ( search : ĠString ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġ( name , Ġcountry ) Ġ= ĠPair ( search . trim (), Ġ" Sing apore ") ĊĠĠĠĠĠĠĠ Ġval ĠSEARCH _ DE LIMIT ED Ġ= Ġ"," ĊĠĠĠĠĠĠĠ Ġif Ġ( search . contains ( SEARCH _ DE LIMIT ED )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġsearch . split ( SEARCH _ DE LIMIT ED )[ 0 ]. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġsearch . split ( SEARCH _ DE LIMIT ED )[ 1 ]. trim () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isEmpty ()) Ġthrow ĠValidation Exception (" Search : ĠName Ġcan 't Ġbe Ġempty ") ĊĠĠĠĠĠĠĠ Ġif Ġ( country . isEmpty ()) Ġthrow ĠValidation Exception (" Search : ĠCountry Ġcan 't Ġbe Ġempty Ġexplicitly ") ĊĠĠĠĠĠĠĠ Ġreturn ĠPair ( name , Ġcountry ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// TODO ĠUnit ĠTest Ċ }