package Ġno . oct op od . cin ema . k ino . controller Ċ Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . google . common . base . Throw ables Ċ import Ġno . oct op od . cin ema . k ino . converter . The ater Converter Ċ import Ġno . oct op od . cin ema . common . dto . The ater Dto Ċ import Ġno . oct op od . cin ema . common . utility . Response Util . get Wrapped Response Ċ import Ġno . oct op od . cin ema . k ino . repository . The ater Repository Ċ import Ġio . swagger . annotations . Api Ċ import Ġio . swagger . annotations . ApiOperation Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġorg . springframework . web . util . Uri Components Builder Ċ import Ġorg . springframework . http . MediaType Ċ import Ġno . oct op od . cin ema . common . dto . Wrapped Response Ċ import Ġno . oct op od . cin ema . k ino . entity . The ater Entity Ċ import Ġio . swagger . annotations . Api Param Ċ import Ġno . oct op od . cin ema . common . h ate os . Format Ċ import Ġno . oct op od . cin ema . common . h ate os . Hal Link Ċ import Ġno . oct op od . cin ema . common . h ate os . Hal Page Ċ import Ġno . oct op od . cin ema . common . utility . Response Util Ċ import Ġjavax . validation . Constraint Violation Exception Ċ Ċ @ Api ( value Ġ= Ġ" the aters ", Ġdescription Ġ= Ġ" Handling Ġof Ġthe aters ") Ċ @ RequestMapping ( ĊĠĠĠĠĠĠĠ Ġpath Ġ= Ġ["/ the aters "], ĊĠĠĠĠĠĠĠ Ġproduces Ġ= Ġ[( MediaType . APPLICATION _ JSON _ VALUE )] Ċ ) Ċ @ RestController Ċ class ĠThe ater Controller Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġrepo : ĠThe ater Repository ĊĊĠĠĠ Ġ@ ApiOperation (" Create Ġa Ġnew Ġthe ater ") ĊĠĠĠ Ġ@ PostMapping ĊĠĠĠ Ġfun Ġcreate The ater ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" Show Entity Ġdto ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestBody Ġdto : ĠThe ater Dto ĊĊĠĠĠ Ġ): ĠResponseEntity < Wrapped Response < Void >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dto . name Ġ== Ġnull Ġ|| Ġdto . seats Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Missing Ġname Ġor Ġse ats " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġthe ater Ġ= ĠThe ater Entity ( name Ġ= Ġdto . name !! , Ġse ats Max Ġ= Ġdto . seats !!. size ) ĊĠĠĠĠĠĠĠ Ġthe ater . seats !!. addAll ( dto . seats !! ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġrepo . save ( the ater ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . created ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri Components Builder ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from Path ("/ the aters /${ created . id !! }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Uri () ĊĠĠĠĠĠĠĠ Ġ). body ( Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 2 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" The ater ĠCreated " ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ApiOperation (" Get Ġall Ġthe aters ") ĊĠĠĠ Ġ@ GetMapping ( pro duces Ġ= Ġ[ Format . HAL _ V 1 ]) ĊĠĠĠ Ġfun ĠgetAll The aters ( ĊĊĠĠĠĠĠĠĠ Ġ@ Api Param (" Page Ġnumber ") ĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" page ", ĠdefaultValue Ġ= Ġ" 1 ") ĊĠĠĠĠĠĠĠ Ġpage : ĠString , ĊĊĠĠĠĠĠĠĠ Ġ@ Api Param (" Limit ") ĊĠĠĠĠĠĠĠ Ġ@ RequestParam (" limit ", ĠdefaultValue Ġ= Ġ" 1 0 ") ĊĠĠĠĠĠĠĠ Ġlimit : ĠString ĊĊĠĠĠ Ġ): ĠResponseEntity < Wrapped Response < Hal Page < The ater Dto >>> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpage Int Ġ= Ġpage . toInt () ĊĠĠĠĠĠĠĠ Ġval Ġlimit Int Ġ= Ġlimit . toInt () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( page Int Ġ< Ġ 1 Ġ|| Ġlimit Int Ġ< Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( 4 0 0 ). body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWr apped Response < Hal Page < The ater Dto >>( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Malformed Ġlimit Ġog Ġpage Ġnumber Ġsupplied " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). validated () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġentry List Ġ= Ġrepo . findAll (). toList () ĊĠĠĠĠĠĠĠ Ġval Ġdto Ġ= ĠThe ater Converter . transform ( entry List , Ġpage Int , Ġlimit Int ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuri Builder Ġ= ĠUri Components Builder . from Path ("/ the aters ") ĊĠĠĠĠĠĠĠ Ġdto ._ self Ġ= ĠHal Link ( uri Builder . clone Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" page ", Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" limit ", Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). toString ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! entry List . isEmpty () Ġ&& Ġpage Int Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdto . previous Ġ= ĠHal Link ( uri Builder . clone Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" page ", Ġ( page Int Ġ- Ġ 1 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" limit ", Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ((( page Int ) Ġ* Ġlimit Int ) Ġ< Ġentry List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdto . next Ġ= ĠHal Link ( uri Builder . clone Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" page ", Ġ( page Int Ġ+ Ġ 1 ). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. query Param (" limit ", Ġlimit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (). toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWr apped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 2 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). validated () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ApiOperation (" Get Ġticket Ġwith Ġspecific Ġid ") ĊĠĠĠ Ġ@ GetMapping ( path Ġ= Ġ[" /{ id }" ]) ĊĠĠĠ Ġfun Ġget The ater ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" The ater Entity Ġid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PathVariable (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠString ĊĊĠĠĠ Ġ): ĠResponseEntity < Wrapped Response < The ater Dto >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Id : ĠLong ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Id Ġ= Ġid . to Long () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Ġid . ĠBut Ġhere Ġwe Ġreturn Ġ 4 0 4 Ġinstead Ġof Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas Ġin Ġthe ĠAPI Ġwe Ġdefined Ġthe Ġid Ġas Ġstring Ġinstead Ġof Ġlong ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" The ater Ġnot Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġentity Ġ= Ġrepo . findById ( path Id ). orElse ( null ) Ġ?: Ġreturn ĠResponseEntity . status ( 4 0 4 ). build () ĊĠĠĠĠĠĠĠ Ġval Ġdto Ġ= ĠThe ater Converter . transform ( entity ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 2 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdto ĊĠĠĠĠĠĠĠ Ġ). validated ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ApiOperation (" Delete Ġthe ater Ġwith Ġspecific Ġid ") ĊĠĠĠ Ġ@ Delete Mapping ( path Ġ= Ġ[" /{ id }" ]) ĊĠĠĠ Ġfun Ġdelete The ater ById ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" The ater Entity Ġid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PathVariable (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠString ĊĊĠĠĠ Ġ): ĠResponseEntity < Wrapped Response < The ater Dto >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Id : ĠLong ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Id Ġ= Ġid . to Long () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Ġid . ĠBut Ġhere Ġwe Ġreturn Ġ 4 0 4 Ġinstead Ġof Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas Ġin Ġthe ĠAPI Ġwe Ġdefined Ġthe Ġid Ġas Ġstring Ġinstead Ġof Ġlong ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" The ater Ġnot Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrepo . delete ById ( path Id ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( 2 0 4 ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ApiOperation (" Update Ġa Ġthe ater ") ĊĠĠĠ Ġ@ Put Mapping ( path Ġ= Ġ[" /{ id }" ]) ĊĠĠĠ Ġfun Ġupdate The ater ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" The ater Entity Ġid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PathVariable (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠString , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" Updated Ġthe ater Ġdto ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestBody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdto : ĠThe ater Dto ĊĊĠĠĠ Ġ): ĠResponseEntity < Wrapped Response < The ater Dto >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Id : ĠLong ĊĠĠĠĠĠĠĠ Ġval Ġdto Id : ĠLong ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Id Ġ= Ġid . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdto Id Ġ= Ġdto . id !!. to Long () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Ġid . ĠBut Ġhere Ġwe Ġreturn Ġ 4 0 4 Ġinstead Ġof Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas Ġin Ġthe ĠAPI Ġwe Ġdefined Ġthe Ġid Ġas Ġstring Ġinstead Ġof Ġlong ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" The ater Ġnot Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dto . name Ġ== Ġnull Ġ|| Ġdto . seats Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Missing Ġrequired Ġkeys Ġname Ġand Ġse ats " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( dto Id Ġ!= Ġpath Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Path ĠID Ġand Ġobject ĠID Ġdoes Ġnot Ġmatch " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! repo . exists ById ( dto Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" The ater Ġdoes Ġnot Ġexist " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġthe ater Ġ= ĠThe ater Converter . transform ( dto ) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepo . save ( the ater ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Throw ables . getRoot Cause ( e ) Ġis ĠConstraint Violation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Constraints Ġvi olated " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( 2 0 4 ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ ApiOperation (" Update Ġa Ġfield Ġin Ġa Ġthe ater ") ĊĠĠĠ Ġ@ Patch Mapping ( path Ġ= Ġ[" /{ id }" ]) ĊĠĠĠ Ġfun Ġpatch The ater ( ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" The ater Entity Ġid ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ PathVariable (" id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : ĠString , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Api Param (" New Ġthe ater ĠJSON ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ RequestBody ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson : ĠString ĊĊĠĠĠ Ġ): ĠResponseEntity < Wrapped Response < The ater Dto >> Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpath Id : ĠLong ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Id Ġ= Ġid . to Long () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvalid Ġid . ĠBut Ġhere Ġwe Ġreturn Ġ 4 0 4 Ġinstead Ġof Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas Ġin Ġthe ĠAPI Ġwe Ġdefined Ġthe Ġid Ġas Ġstring Ġinstead Ġof Ġlong ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( 4 0 4 ). build () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Dto Ġ= Ġrepo . findById ( path Id ). orElse ( null ) Ġ?: Ġreturn ĠResponseEntity . status ( 4 0 4 ). body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWr apped Response < The ater Dto >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġ 4 0 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Resource Ġnot Ġfound " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). validated () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// taken Ġfrom Ġar cur i 8 2 ĠCounter Rest Patch ĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠObjectMapper () ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Node : ĠJsonNode ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson Node Ġ= Ġmapper . readValue ( json , ĠJsonNode :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Invalid ĠJSON Ġdata Ġas Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Malformed ĠJSON Ġsupplied " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( json Node . has (" id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// should n 't Ġbe Ġallowed Ġto Ġmodify Ġthe Ġcounter Ġid ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 9 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Merge Ġpatch Ġdoes Ġnot Ġsupport Ġreplacing Ġid " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar ĠnewName Ġ= Ġoriginal Dto . name ĊĠĠĠĠĠĠĠ Ġvar Ġnew Se ats Max Ġ= Ġoriginal Dto . seats Max ĊĠĠĠĠĠĠĠ Ġvar Ġnew Se ats Ġ= Ġoriginal Dto . seats ĊĊĠĠĠĠĠĠĠ Ġif Ġ( json Node . has (" name ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Node Ġ= Ġjson Node . get (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewName Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Node . isNull Ġ-> Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Name Ġcan Ġnot Ġbe Ġnull " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Node . is Text ual Ġ-> Ġname Node . as Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ// Invalid ĠJSON . ĠNon - string Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 4 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Name Ġis Ġof Ġinvalid Ġtype " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( json Node . has (" seats Max ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Node Ġ= Ġjson Node . get (" seats Max ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Se ats Max Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Node . isNull Ġ-> Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Max ĠSe ats Ġcan Ġnot Ġbe Ġnull " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax Node . isNumber Ġ-> Ġmax Node . as Int () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ// Invalid ĠJSON . ĠNon - int Ġse ats Max ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" max Se ats Ġis Ġof Ġinvalid Ġtype " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( json Node . has (" seats ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġse ats Node Ġ= Ġjson Node . with Array (" seats ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seats Node . isNull ) Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Se ats Ġcan Ġnot Ġbe Ġnull Ġ- ĠMust Ġbe Ġempty Ġarray Ġor Ġwith Ġitems " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( seats Node . isArray ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmutable Arr Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġse ats Node . elements (). forEach Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Arr . add ( it . as Text ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Se ats Ġ= Ġmutable Arr ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Wrapped Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġraw StatusCode Ġ= Ġ 4 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Se ats Ġis Ġof Ġwrong Ġtype " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoriginal Dto . name Ġ= ĠnewName ĊĠĠĠĠĠĠĠ Ġoriginal Dto . seats Max Ġ= Ġnew Se ats Max ĊĠĠĠĠĠĠĠ Ġoriginal Dto . seats Ġ= Ġnew Se ats ĊĊĠĠĠĠĠĠĠ Ġrepo . save ( original Dto ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . status ( 2 0 4 ). build () ĊĠĠĠ Ġ} Ċ }