package Ġnet . tim afe . lets go 2 . web . rest Ċ Ċ import Ġio . github . j hip ster . web . util . Header Util Ċ import Ġio . github . j hip ster . web . util . Response Util Ċ import Ġnet . tim afe . lets go 2 . domain . Place Ċ import Ġnet . tim afe . lets go 2 . repository . Place Repository Ċ import Ġnet . tim afe . lets go 2 . web . rest . errors . BadRequest Alert Exception Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjava . net . URI Ċ import Ġjava . net . UR ISyntaxException Ċ import Ġjavax . validation . Valid ĊĊ Ċ private Ġconst Ġval ĠENT ITY _ NAME Ġ= Ġ" place " Ċ Ċ /** Ċ Ġ* ĠREST Ġcontroller Ġfor Ġmanaging Ġ[ net . tim afe . lets go 2 . domain . Place ]. Ċ Ġ*/ Ċ @ RestController Ċ @ RequestMapping ("/ api ") Ċ class ĠPlace Resource ( ĊĠĠĠ Ġprivate Ġval Ġplace Repository : ĠPlace Repository ĊĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( java Class ) ĊĠĠĠ Ġ@ Value ("\ ${ j hip ster . client App . name }") ĊĠĠĠ Ġprivate Ġvar Ġapplication Name : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ` POST Ġ Ġ/ places ` Ġ: ĠCreate Ġa Ġnew Ġplace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplace Ġthe Ġplace Ġto Ġcreate . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Response Entity ] Ġwith Ġstatus Ġ` 2 0 1 Ġ( Created )` Ġand Ġwith Ġbody Ġthe Ġnew Ġplace , Ġor Ġwith Ġstatus Ġ` 4 0 0 Ġ( Bad ĠRequest )` Ġif Ġthe Ġplace Ġhas Ġalready Ġan ĠID . ĊĠĠĠĠ Ġ* Ġ@ throws ĠUR ISyntaxException Ġif Ġthe ĠLocation ĠURI Ġsyntax Ġis Ġincorrect . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ PostMapping ("/ places ") ĊĠĠĠ Ġfun Ġcreate Place (@ Valid Ġ@ RequestBody Ġplace : ĠPlace ): ĠResponseEntity < Place > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" REST Ġrequest Ġto Ġsave ĠPlace Ġ: Ġ{}", Ġplace ) ĊĠĠĠĠĠĠĠ Ġif Ġ( place . id Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Alert Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" A Ġnew Ġplace Ġcannot Ġalready Ġhave Ġan ĠID ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠENT ITY _ NAME , Ġ" i dex ists " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġplace Repository . save ( place ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . created ( URI ("/ api / places /" Ġ+ Ġresult . id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( Header Util . create Entity Creation Alert ( application Name , Ġtrue , ĠENT ITY _ NAME , Ġresult . id . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ` PUT Ġ Ġ/ places ` Ġ: ĠUpdates Ġan Ġexisting Ġplace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġplace Ġthe Ġplace Ġto Ġupdate . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Response Entity ] Ġwith Ġstatus Ġ` 2 0 0 Ġ( OK )` Ġand Ġwith Ġbody Ġthe Ġupdated Ġplace , ĊĠĠĠĠ Ġ* Ġor Ġwith Ġstatus Ġ` 4 0 0 Ġ( Bad ĠRequest )` Ġif Ġthe Ġplace Ġis Ġnot Ġvalid , ĊĠĠĠĠ Ġ* Ġor Ġwith Ġstatus Ġ` 5 0 0 Ġ( Internal ĠServer ĠError )` Ġif Ġthe Ġplace Ġcouldn 't Ġbe Ġupdated . ĊĠĠĠĠ Ġ* Ġ@ throws ĠUR ISyntaxException Ġif Ġthe ĠLocation ĠURI Ġsyntax Ġis Ġincorrect . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Put Mapping ("/ places ") ĊĠĠĠ Ġfun Ġupdate Place (@ Valid Ġ@ RequestBody Ġplace : ĠPlace ): ĠResponseEntity < Place > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" REST Ġrequest Ġto Ġupdate ĠPlace Ġ: Ġ{}", Ġplace ) ĊĠĠĠĠĠĠĠ Ġif Ġ( place . id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBadRequest Alert Exception (" Invalid Ġid ", ĠENT ITY _ NAME , Ġ" id null ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġplace Repository . save ( place ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHeader Util . create Entity Update Alert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Name , Ġtrue , ĠENT ITY _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace . id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ` GET Ġ Ġ/ places ` Ġ: Ġget Ġall Ġthe Ġplaces . ĊĠĠĠĠ Ġ* ĊĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Response Entity ] Ġwith Ġstatus Ġ` 2 0 0 Ġ( OK )` Ġand Ġthe Ġlist Ġof Ġplaces Ġin Ġbody . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ places ") ĊĠĠĠ Ġfun ĠgetAll Places (): ĠMutable Iterable < Place > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" REST Ġrequest Ġto Ġget Ġall ĠPl aces ") ĊĠĠĠĠĠĠĠ Ġ// Ġvar Ġ Ġp Ġ Ġ= ĠPlace () ĊĠĠĠĠĠĠĠ Ġreturn Ġplace Repository . findAll () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ` GET Ġ Ġ/ places /: id ` Ġ: Ġget Ġthe Ġ" id " Ġplace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġthe Ġid Ġof Ġthe Ġplace Ġto Ġretrieve . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Response Entity ] Ġwith Ġstatus Ġ` 2 0 0 Ġ( OK )` Ġand Ġwith Ġbody Ġthe Ġplace , Ġor Ġwith Ġstatus Ġ` 4 0 4 Ġ( Not ĠFound )`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ GetMapping ("/ places /{ id }") ĊĠĠĠ Ġfun Ġget Place (@ PathVariable Ġid : ĠString ): ĠResponseEntity < Place > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" REST Ġrequest Ġto Ġget ĠPlace Ġ: Ġ{}", Ġid ) ĊĠĠĠĠĠĠĠ Ġval Ġplace Ġ= Ġplace Repository . findById ( id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse Util . wrap Or NotFound ( place ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ Ġ` DELETE Ġ Ġ/ places /: id ` Ġ: Ġdelete Ġthe Ġ" id " Ġplace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid Ġthe Ġid Ġof Ġthe Ġplace Ġto Ġdelete . ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġ[ Response Entity ] Ġwith Ġstatus Ġ` 2 0 4 Ġ( NO _ CONTENT )`. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Delete Mapping ("/ places /{ id }") ĊĠĠĠ Ġfun Ġdelete Place (@ PathVariable Ġid : ĠString ): ĠResponseEntity < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" REST Ġrequest Ġto Ġdelete ĠPlace Ġ: Ġ{}", Ġid ) ĊĊĠĠĠĠĠĠĠ Ġplace Repository . delete ById ( id ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . no Content () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. headers ( Header Util . create Entity Deletion Alert ( application Name , Ġtrue , ĠENT ITY _ NAME , Ġid . toString ())). build () ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ