package Ġca . ets mt l . app lets . not re _ d ame . whats new . service Ċ Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . Api Exceptions . User AlreadyExists Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . Api Exceptions . User NotFound Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . model . User Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . model . User Patch Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . model . UserProfile Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . model . User Registration Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . repository . Users Repo Ċ import Ġca . ets mt l . app lets . not re _ d ame . whats new . utils . B crypt Hash er Ċ import Ġcom . google . cloud . firestore . Write Result Ċ Ċ class ĠUsers Service ( val Ġrepo : ĠUsers Repo ) Ġ{ ĊĊĠĠĠ Ġfun Ġadd New User ( user : ĠUser Registration ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcheck User Exists Ġ= ĠfindBy Username ( user . userName ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( check User Exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUser AlreadyExists ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhashed Pass Ġ= ĠB crypt Hash er . hash Password ( user . password ) ĊĠĠĠĠĠĠĠ Ġval Ġuser ToAdd Ġ= ĠUser (_ id Ġ= Ġ"", ĠuserName Ġ= Ġuser . userName , Ġpassword Ġ= Ġhashed Pass , Ġrole Ġ= Ġuser . role , Ġtoken Ġ= Ġ"") ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . add User ( user ToAdd ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Users (): ĠMutable List < UserProfile > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . getAll Users () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetUser ( id : ĠString ): ĠUser ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . findById ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠfindBy Username ( userName : ĠString ): ĠUser ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . findBy UserName ( userName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate User Token ( user : ĠUser ): ĠWrite Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . update User Token ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete User ById ( id : ĠString ): ĠWrite Result Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . delete User ById ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate User ( user Patch : ĠUser Patch , Ġid : ĠString ): ĠWrite Result Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoriginal User Ġ= Ġthis . getUser ( id ) ĊĠĠĠĠĠĠĠ Ġoriginal User Ġ?: Ġthrow ĠUser NotFound ĊĠĠĠĠĠĠĠ Ġoriginal User . patch User ( user Patch ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrepo . update User ( original User ) ĊĠĠĠ Ġ} Ċ } Ċ