package Ġar . com . k ai ros lp . tri pt er . service Ċ Ċ import Ġar . com . k ai ros lp . tri pt er . model . Trip Ċ import Ġar . com . k ai ros lp . tri pt er . model . User Ċ import Ġar . com . k ai ros lp . tri pt er . persistence . repository . UserRepository Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . security . access . Access Denied Exception Ċ import Ġorg . springframework . security . core . context . SecurityContext Holder Ċ import Ġorg . springframework . security . core . user details . UserDetails Ċ import Ġorg . springframework . security . crypto . password . Password Encoder Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġorg . springframework . web . bind . Missing Servlet Request Parameter Exception Ċ import Ġjava . time . LocalDate Ċ import Ġjavax . transaction . Transactional Ċ Ċ @ Service Ċ class ĠUserService (@ Autowired Ġval Ġtravel er Network Service : ĠTr avel er Network Service , Ġ@ Autowired Ġval Ġpassword Encoder : ĠPassword Encoder , Ġ@ Autowired Ġval Ġuser Repository : ĠUser Repository ) Ġ{ ĊĊĠĠĠ Ġ@ Throws ( Existing User With Email Exception :: class ) ĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġregister ( firstName : ĠString , ĠlastName : ĠString , Ġemail : ĠString , Ġpassword : ĠString ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexisting User : ĠUser ? Ġ= Ġthis . user Repository . findBy Username ( email ) ĊĠĠĠĠĠĠĠ Ġif Ġ( existing User Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠExisting User With Email Exception ( email ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( firstName , ĠlastName , Ġemail , Ġpassword ) ĊĠĠĠĠĠĠĠ Ġuser . password Ġ= Ġpassword Encoder . encode ( password ) ĊĠĠĠĠĠĠĠ Ġtravel er Network Service . find Travel er Network (). add User ( user ) ĊĠĠĠĠĠĠĠ Ġreturn Ġuser ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġfun Ġorgan ize Trip ( userId : ĠLong , Ġtitle : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartDate : ĠLocalDate , ĠendDate : ĠLocalDate ?): ĠTrip Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġuser Repository . findById ( userId ) ĊĠĠĠĠĠĠĠ Ġreturn Ġuser . organ ize New Trip ( title , ĠstartDate , ĠendDate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Transactional ĊĠĠĠ Ġ@ Throws ( Missing Servlet Request Parameter Exception :: class , ĠAccess Denied Exception :: class ) ĊĠĠĠ Ġfun Ġget LoggedIn User (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Details Ġ= ĠSecurity Context Holder . getContext (). authentication . principal ĊĠĠĠĠĠĠĠ Ġif Ġ( user Details Ġis ĠUser Details ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlogged In User : ĠUser ? Ġ= Ġthis . user Repository . findBy Username ( user Details . username ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logged In User Ġ!= Ġnull Ġ&& Ġlogged In User . id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠMissing Servlet Request Parameter Exception (" Logged Ġin Ġuser ĠID ", Ġ" Long ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( logged In User Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlogged In User ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠAccess Denied Exception (" User Ġis Ġnot Ġlogged Ġin !") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠExisting User With Email Exception ( email : ĠString ): ĠException (" The Ġemail / username Ġ$ email Ġis Ġalready Ġregistered Ġby Ġanother Ġuser .") ĊĊĊ