package Ġca . ush er bro o ke . de gel . services Ċ Ċ import Ġca . ush er bro o ke . de gel . entities . Only Id Ċ import Ġca . ush er bro o ke . de gel . entities . User Entity Ċ import Ġca . ush er bro o ke . de gel . exceptions . User NotFoundException Ċ import Ġca . ush er bro o ke . de gel . models . User Ċ import Ġca . ush er bro o ke . de gel . models . UserDetails Impl Ċ import Ġca . ush er bro o ke . de gel . repositories . UserRepository Ċ import Ġorg . springframework . security . core . user details . UserDetails Ċ import Ġorg . springframework . security . core . user details . UserDetails Service Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . util .* Ċ import Ġkotlin . streams . toList Ċ Ċ interface ĠUserService Ġ{ ĊĠĠĠ Ġfun ĠgetUser ( id : ĠUUID ): ĠUser ĊĠĠĠ Ġfun Ġupsert User ( user : ĠUser ): ĠUser ĊĠĠĠ Ġfun Ġget Users Id (): ĠList < UUID > Ċ } Ċ Ċ @ Service Ċ class ĠUser ServiceImpl ( private Ġval Ġuser Repository : ĠUser Repository ) Ġ: ĠUserService , ĠUser Details Service Ġ{ ĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġoverride Ġfun Ġget Users Id () Ġ= Ġuser Repository . findAll Project edBy (). stream (). map ( Only Id :: getId ). toList () ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġ@ Throws ( User NotFoundException :: class ) ĊĠĠĠ Ġoverride Ġfun ĠgetUser ( id : ĠUUID ): ĠUser Ġ= Ġuser Repository . findById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġu Ġ-> Ġu . to Model () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orElse Throw Ġ{ ĠUser NotFoundException ( id ) Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġoverride Ġfun Ġupsert User ( user : ĠUser ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġupsert User Entity ( user ). to Model () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġoverride Ġfun Ġload User By Username ( username : ĠString ): ĠUser Details Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Entity Ġ= Ġupsert User Entity ( User ( null , Ġusername , Ġtrue , Ġfalse )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġto Set Ġis Ġnecessary Ġto Ġdetach Ġthe Ġset Ġfrom ĠHibernate Ġpersistence Ġcache ĊĠĠĠĠĠĠĠ Ġreturn ĠUser Details Impl ( user Entity . id !! , Ġuser Entity . cip , Ġuser Entity . author ities . toSet (), Ġuser Entity . enabled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġprivate Ġfun Ġupsert User Entity ( user : ĠUser ): ĠUser Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuser Entity Ġ= Ġuser Repository . findBy C ip ( user . cip ) ĊĊĠĠĠĠĠĠĠ Ġif ( user Entity Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Entity Ġ= ĠUser Entity . from Model ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġuser Repository . save ( user Entity ) ĊĠĠĠ Ġ} Ċ }