package Ġxyz . t cre op arg h . amt td _ web . controller . account Ċ Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpStatus Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġxyz . t cre op arg h . amt td _ web . annotation . Login Required Ċ import Ġxyz . t cre op arg h . amt td _ web . common . bean . request . User Change Avatar Request Ċ import Ġxyz . t cre op arg h . amt td _ web . common . bean . request . UserProfile Change Request Ċ import Ġxyz . t cre op arg h . amt td _ web . common . bean . response . Simple Response Ċ import Ġxyz . t cre op arg h . amt td _ web . common . exception . Amt td Exception Ċ import Ġxyz . t cre op arg h . amt td _ web . controller . Controller Base Ċ import Ġxyz . t cre op arg h . amt td _ web . entity . Entity User Avatar Ċ import Ġxyz . t cre op arg h . amt td _ web . util . logger Ċ import Ġjava . util .* Ċ import Ġjavax . servlet . http . HttpServletRequest ĊĊ Ċ /** Ċ Ġ* Ġ@ author ĠT Cre op arg h Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġhandles Ġuser Ġprofile Ġchanges . Ċ Ġ* Ċ Ġ* ĠNot Ġto Ġbe Ġconfused Ġwith Ġ[ xyz . t cre op arg h . amt td _ web . controller . work group . Work Group UserController ] Ċ Ġ* Ġwhich Ġmanages Ġusers Ġin Ġa Ġwork group . Ċ Ġ*/ Ċ @ RestController Ċ @ Login Required Ċ @ RequestMapping ("/ user ") Ċ class ĠUser Controller Ġ: ĠController Base () Ġ{ ĊĠĠĠ Ġ@ PostMapping ( ĊĠĠĠĠĠĠĠ Ġ"/ change - avatar ", ĊĠĠĠĠĠĠĠ Ġconsume s Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ], ĊĠĠĠĠĠĠĠ Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġchange Avatar ( request : ĠHttpServletRequest , Ġ@ RequestBody Ġbody : ĠUser Change Avatar Request ): ĠSimple Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimg Bytes Ġ= Ġbody . img ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService . findById OrNull ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . userId Ġ?: Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . JSON _ NON _ NULL ABLE _ VALUE _ IS _ NULL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . REQUEST ED _ ENTITY _ NOT _ FOUND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġavatar Ġ= ĠEntity User Avatar ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavatar Id Ġ= ĠUUID . randomUUID (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġuser , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Ġ= Ġimg Bytes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . avatar Ġ= Ġavatar ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . save Immediate ly ( user ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Response ( success Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Exception Ġin ĠUser Controller : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Response ( success Ġ= Ġfalse , Ġerror Ġ= ĠA mt td Exception . get From Exception ( e ). errorCode Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ( ĊĠĠĠĠĠĠĠ Ġ"/ avatar /{ uuid }" ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġget Avatar ( request : ĠHttpServletRequest , Ġ@ PathVariable Ġuuid : ĠUUID ): ĠResponseEntity < ByteArray > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheaders Ġ= ĠHttp Headers () ĊĠĠĠĠĠĠĠ Ġheaders . contentType Ġ= ĠMediaType . IMAGE _ PNG ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService . findById OrNull ( uuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . REQUEST ED _ ENTITY _ NOT _ FOUND ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity < ByteArray >( user . avatar ?. image , Ġheaders , ĠHttpStatus . OK ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ PostMapping ( ĊĠĠĠĠĠĠĠ Ġ"/ change - profile ", ĊĠĠĠĠĠĠĠ Ġconsume s Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ], ĊĠĠĠĠĠĠĠ Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ ResponseBody ĊĠĠĠ Ġfun Ġchange Profile ( request : ĠHttpServletRequest , Ġ@ RequestBody Ġbody : ĠUser Profile Change Request ): ĠSimple Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Username Ġ= Ġbody . new Username ĊĠĠĠĠĠĠĠ Ġval Ġnew Email Ġ= Ġbody . new Email ĊĠĠĠĠĠĠĠ Ġval Ġnew Password Ġ= Ġbody . new Password ĊĠĠĠĠĠĠĠ Ġval Ġuuid Ġ= Ġbody . userId ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify User ( request , Ġuuid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Username Ġ!= Ġnull Ġ&& Ġ! is Username Valid ( new Username )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . IL LEG AL _ USERNAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Email Ġ!= Ġnull Ġ&& Ġ! is Email Valid ( new Email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . IL LEG AL _ EMAIL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Password Ġ!= Ġnull Ġ&& Ġ! is Password Valid ( new Password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . IL LEG AL _ PASSWORD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠuserService . findById OrNull ( uuid Ġ?: Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . INVALID _ JSON )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . USER _ NOT _ FOUND ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Email Ġ!= Ġnull Ġ&& ĠuserService . findBy Email ( new Email ). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠA mt td Exception ( Amt td Exception . ErrorCode . USER _ AL READY _ EXISTS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Username ?. let Ġ{ Ġuser . name Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Email ?. let Ġ{ Ġuser . email Address Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Password ?. let Ġ{ Ġuser . password Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠuserService . save Immediate ly ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Response ( success Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Exception Ġin ĠUser Controller : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Response ( success Ġ= Ġfalse , Ġerror Ġ= ĠA mt td Exception . get From Exception ( e ). errorCode Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }