package Ġch . u zh . ifi . se al . controllers Ċ Ċ import Ġch . u zh . ifi . se al . DTO s . Schedule DTO Ċ import Ġch . u zh . ifi . se al . DTO s . to DTO Ċ import Ġch . u zh . ifi . se al . data _ access . Daily Form Info Repository Ċ import Ġch . u zh . ifi . se al . data _ access . UserRepository Ċ import Ġch . u zh . ifi . se al . domain _ classes . Schedule Ċ import Ġch . u zh . ifi . se al . domain _ classes . Settings Ċ import Ġch . u zh . ifi . se al . domain _ classes . User Ċ import Ġmu . K Logging Ċ import Ġorg . springframework . security . authentication . Anonymous Authentication Token Ċ import Ġorg . springframework . security . core . context . SecurityContext Holder Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . time . LocalDate Ċ import Ġjavax . persistence . EntityManager Ċ import Ġjavax . persistence . Persistence Context Ċ import Ġjavax . transaction . Transactional Ċ Ċ /** Ċ Ġ* ĠFrom Ġthis Ġcontroller Ġinformation Ġabout Ġthe Ġuser Ġcan Ġbe Ġretrieved Ġand Ġmanaged . Ċ Ġ* Ġ( settings Ġ-- Ġretrieving , Ġupdating ; Ġstate Ġ-- Ġretrieving ). Ċ Ġ*/ Ċ @ RestController Ċ @ Transactional Ċ @ RequestMapping ("/ user ") Ċ class ĠUser Controller ( private Ġval Ġuser Repo : ĠUser Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġdaily Form Repository : ĠDaily Form Info Repository ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ: ĠK Logging () ĊĊĠĠĠ Ġ@ Persistence Context ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġem : ĠEntity Manager ĊĊĠĠĠ Ġ@ GetMapping ("") ĊĠĠĠ Ġfun ĠgetCurrent User (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget LoggedIn User () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping (" state ") ĊĠĠĠ Ġfun ĠgetState (): ĠUser State Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget LoggedIn User () ĊĠĠĠĠĠĠĠ Ġval Ġdaily Form Ġ= Ġdaily Form Repository . findBy Owner And Date ( user , ĠLocalDate . now ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠUser State ( user . settings Ġ!= Ġnull , Ġuser . tasks . isNotEmpty (), Ġdaily Form Ġ!= Ġnull ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ PostMapping ("/ create ") ĊĠĠĠ Ġfun Ġcreate User (@ RequestBody Ġinput : ĠUser ): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew User Ġ= Ġuser Repo . save ( input ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnew User ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ settings ") ĊĠĠĠ Ġfun Ġget Settings (): ĠSettings ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget LoggedIn User (). settings ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Put Mapping ("/ create OrUpdate Settings ") ĊĠĠĠ Ġfun Ġcreate OrUpdate Settings (@ RequestBody Ġsettings : ĠSettings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġget LoggedIn User () ĊĠĠĠĠĠĠĠ Ġif Ġ( user . settings Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . settings Ġ= Ġsettings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . owner Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" saved Ġsettings Ġ$ settings ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġem . persist ( settings ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . settings Ġ= Ġem . merge ( settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . settings . owner Ġ= Ġuser ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ schedule / options ") ĊĠĠĠ Ġfun Ġget Schedule Options (): ĠList < Schedule DTO > Ġ= Ġget LoggedIn User (). schedules ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . for Date Ġ== ĠLocalDate . now () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to DTO () Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ schedule / chosen ") ĊĠĠĠ Ġfun Ġget Schedule For Today (): ĠSchedule DTO ? Ġ= Ġget LoggedIn User (). schedules ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. single OrNull Ġ{ Ġit . for Date Ġ== ĠLocalDate . now () Ġ&& Ġit . is Ch osen Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . to DTO () ĊĊĠĠĠ Ġ@ RequestMapping ("/ schedule /{ schedule Id }/ select ") Ġ// Ġtodo Ġswitch Ġto Ġ@ GetMapping ĊĠĠĠ Ġfun Ġchoose Schedule Option (@ PathVariable Ġschedule Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġem . find ( Schedule :: class . java , Ġschedule Id ). is Ch osen Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget LoggedIn User (): ĠUser Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġauthentication Ġ= ĠSecurity Context Holder . getContext (). authentication ĊĠĠĠĠĠĠĠ Ġif Ġ( authentication Ġ! is ĠAn onymous Authentication Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent UserName Ġ= Ġauthentication . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġuser Repo . find ByName ( current UserName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentUser Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" User Ġwith Ġname Ġ$ current UserName Ġwas Ġnot Ġfound Ġin Ġthe Ġdatabase !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠcurrentUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" There Ġis Ġno Ġlogged Ġin Ġuser !") ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠUser State ( val Ġhas Settings : ĠBoolean , Ġval Ġhas Tasks : ĠBoolean , Ġval Ġhas Daily Form : ĠBoolean )