package Ġcom . ig or iv kin . website . controller . admin Ċ Ċ import Ġcom . ig or iv kin . website . controller . dto . article . Article CreateRequest Ċ import Ġcom . ig or iv kin . website . controller . dto . article . Article Update Request Ċ import Ġcom . ig or iv kin . website . response . Basic Response Ċ import Ġcom . ig or iv kin . website . response . StatusCode Ċ import Ġcom . ig or iv kin . website . response . Successfully Modified Response Ċ import Ġcom . ig or iv kin . website . service . Article Service Ċ import Ġcom . ig or iv kin . website . view . Html Basic View Ċ import Ġcom . ig or iv kin . website . view . Html View Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . data . domain . Page Request Ċ import Ġorg . springframework . data . domain . Page able Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . Response Entity Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . ui . Model Ċ import Ġorg . springframework . web . bind . annotation .* Ċ import Ġjavax . validation . Valid Ċ Ċ @ Controller Ċ class ĠAdmin Articles Controller ( ĊĠĠĠ Ġprivate Ġval Ġarticle Service : ĠArticle Service Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Admin Articles Controller :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġarticles PerPage : ĠInt Ġ= Ġ 1 0 ĊĊĠĠĠ Ġ@ GetMapping ("/ admin / articles /", Ġ"/ admin / articles / page /{ pageNumber }") ĊĠĠĠ Ġfun Ġrender Main Page ( ĊĠĠĠĠĠĠĠ Ġmodel : ĠModel , ĊĠĠĠĠĠĠĠ Ġ@ PathVariable ( required Ġ= Ġfalse ) Ġpage Number : ĠInt ? ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġarticle Service . findAll ( page able Ġ= Ġproduce Page able From Page Number ( pageNumber )) ĊĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" articles ", Ġpage . toList ()) ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" page Count ", Ġpage . total Pages ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠHtml Basic View ( model ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrender Admin Article Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" ÐĲ Ð´ Ð¼ Ð¸Ð½ Ð¸ÑģÑĤ ÑĢ Ð°ÑĤÐ¾ÑĢ Ñģ ÐºÐ¸Ð¹ ĠÐ¸Ð½ ÑĤÐµÑĢ ÑĦ ÐµÐ¹ Ñģ Ġ- ĠÐ¡ ÑĤ Ð°ÑĤÑĮ Ð¸ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Main Template (" admin / main - template ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent (" admin / articles / main - page Ġ:: Ġcontent ") ĊĠĠĠĠĠĠĠ Ġ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ admin / articles / add /") ĊĠĠĠ Ġfun Ġrender Add Page ( model : ĠModel ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠHtml Basic View ( model ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrender Admin Article Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" ÐĲ Ð´ Ð¼ Ð¸Ð½ Ð¸ÑģÑĤ ÑĢ Ð°ÑĤÐ¾ÑĢ Ñģ ÐºÐ¸Ð¹ ĠÐ¸Ð½ ÑĤÐµÑĢ ÑĦ ÐµÐ¹ Ñģ Ġ- ĠÐ¡ ÑĤ Ð°ÑĤÑĮ Ð¸ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Main Template (" admin / main - template ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent (" admin / articles / add - page Ġ:: Ġcontent ") ĊĠĠĠĠĠĠĠ Ġ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ GetMapping ("/ admin / articles / edit /{ article Id }") ĊĠĠĠ Ġfun Ġrender Edit Page ( ĊĠĠĠĠĠĠĠ Ġmodel : ĠModel , ĊĠĠĠĠĠĠĠ Ġ@ PathVariable Ġarticle Id : ĠLong ĊĠĠĠ Ġ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . addAttribute (" article ", Ġarticle Service . findById ( article Id )) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠHtml Basic View ( model ) ĊĠĠĠĠĠĠĠ Ġreturn Ġrender Admin Article Page ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" ÐĲ Ð´ Ð¼ Ð¸Ð½ Ð¸ÑģÑĤ ÑĢ Ð°ÑĤÐ¾ÑĢ Ñģ ÐºÐ¸Ð¹ ĠÐ¸Ð½ ÑĤÐµÑĢ ÑĦ ÐµÐ¹ Ñģ Ġ- ĠÐ¡ ÑĤ Ð°ÑĤÑĮ Ð¸ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Main Template (" admin / main - template ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Javascript Data (" admin / articles / edit - page Ġ:: Ġjavascript - data ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent (" admin / articles / edit - page Ġ:: Ġcontent ") ĊĠĠĠĠĠĠĠ Ġ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ RequestMapping ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ["/ admin / articles / do - add / "], ĊĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ[ Request Method . POST ], ĊĠĠĠĠĠĠĠ Ġconsume s Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ], ĊĠĠĠĠĠĠĠ Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġadd (@ RequestBody Ġ@ Valid Ġrequest : ĠArticle CreateRequest ): ĠResponseEntity < Basic Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Received Ġnew Ġarticle : Ġ{}", Ġrequest ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Article Id Ġ= Ġarticle Service . create ( request ). id ĊĠĠĠĠĠĠĠ Ġlog . info (" Created Ġnew Ġarticle : Ġ{}", Ġcreated Article Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuccessfully Created Article Response ( created Article Id ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ RequestMapping ( ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ["/ admin / articles / do - edit / "], ĊĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ[ Request Method . POST ], ĊĠĠĠĠĠĠĠ Ġconsume s Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ], ĊĠĠĠĠĠĠĠ Ġproduces Ġ= Ġ[ MediaType . APPLICATION _ JSON _ VALUE ] ĊĠĠĠ Ġ) ĊĠĠĠ Ġfun Ġedit (@ RequestBody Ġ@ Valid Ġrequest : ĠArticle Update Request ): ĠResponseEntity < Basic Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Received Ġnew Ġarticle : Ġ{}", Ġrequest ) ĊĠĠĠĠĠĠĠ Ġval Ġarticle Id Ġ= Ġrequest . id ĊĠĠĠĠĠĠĠ Ġval Ġupdated Article Ġ= Ġarticle Service . update ( article Id , Ġrequest ) ĊĠĠĠĠĠĠĠ Ġlog . info (" Updated Ġan Ġarticle : Ġ{}", Ġupdated Article ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuccessfully Updated Article Response ( article Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Admin Article Page ( view : ĠHtml View ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Js ("/ js / components / topic - autocomplete . js ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Js ("/ js / components / article - preview . js ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Js ("/ js / infrastructure / admin / article . js ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. render () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġproduce Page able From Page Number ( pageNumber : ĠInt ?): ĠPage able Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( pageNumber Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Request . of ( pageNumber , Ġarticles PerPage ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPage Request . of ( 0 , Ġarticles PerPage ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsuccessfully Created Article Response ( id : ĠLong ): ĠResponseEntity < Basic Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSuccessfully Modified Response ( id , ĠStatusCode . ENTITY _ SUCCESS FULL Y _ CREATED ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsuccessfully Updated Article Response ( id : ĠLong ): ĠResponseEntity < Basic Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponseEntity . ok ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSuccessfully Modified Response ( id , ĠStatusCode . ENTITY _ SUCCESS FULL Y _ UPDATED ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }