package Ġcourse . kotlin . spring . domain Ċ Ċ import Ġcourse . kotlin . spring . dao . B logs Repository Ċ import Ġcourse . kotlin . spring . dao . Users Repository Ċ import Ġcourse . kotlin . spring . entities .* Ċ import Ġcourse . kotlin . spring . exception . Non existing Entity Exception Ċ import Ġcourse . kotlin . spring . exception . Un author ised Modification Exception Ċ import Ġorg . springframework . data . repository . findById OrNull Ċ import Ġorg . springframework . stereotype . Service Ċ import Ġjava . time . LocalDateTime Ċ Ċ @ Service Ċ class ĠB logs ServiceImpl ( ĊĠĠĠ Ġprivate Ġval Ġb logs Repository : ĠB logs Repository , ĊĠĠĠ Ġprivate Ġval Ġusers Repository : ĠUsers Repository , Ċ ) Ġ: ĠB logs Service Ġ{ Ċ // ĠĠĠ Ġ@ Autowired Ċ // ĠĠĠ Ġprivate Ġval Ġb logs Repository : ĠB logs Repository ? Ġ= Ġnull Ċ // ĠĠĠ Ġ@ Autowired Ċ // ĠĠĠ Ġprivate Ġval Ġusers Repository : ĠUsers Repository ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠfindAll (): ĠIterable < Blog Details View > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb logs Repository . findAll (). map { it . to Blog Details View Reflection ()} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfind ById ( blog Id : ĠLong ): ĠBlog Details View Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb logs Repository . findById OrNull ( blog Id )?. to Blog Details View Reflection () ?: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNon existing Entity Exception (" Blog Ġwith ĠID =$ blog Id Ġdoes Ġnot Ġexist .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd ( blog Create View : ĠBlog Create View ): ĠBlog Details View Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblog Ġ= Ġblog Create View . to Blog Reflection () ĊĠĠĠĠĠĠĠ Ġif ( users Repository . count () Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblog . author Ġ= Ġusers Repository . findAll (). first () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġb logs Repository . save ( blog ). to Blog Details View Reflection () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġ@ Pre Authorize (" (# blog . author Id Ġ== Ġauthentication . principal . id ) Ġor Ġhas Role (' ADMIN ') ") ĊĠĠĠ Ġoverride Ġfun Ġupdate ( blog Create View : ĠBlog Create View ): ĠBlog Details View Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġblog Ġ= Ġblog Create View . to Blog Reflection () Ċ // ĠĠĠĠĠĠĠ Ġval Ġauthentication : Ġorg . springframework . security . core . Authentication Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity Context Holder . getContext (). get Authentication () Ċ // ĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġauthentication . get Principal () Ġas ĠUser ĊĠĠĠĠĠĠĠ Ġval Ġold : ĠBlog Details View Ġ= Ġfind ById ( blog . id !! ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull Ġ|| Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ! authentication . get Author ities (). contains ( Simple Granted Authority (" ROLE _ ADMIN ")) Ġ&& Ġ! old . get Author Id () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equals ( user . getId ()) Ċ // ĠĠĠĠĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUn author ised Modification Exception (" You Ġhave Ġno Ġpermissions Ġto Ġedit Ġblog : Ġ" Ġ+ Ġold . getTitle ()) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġblog . created Ġ= Ġold . created ĊĠĠĠĠĠĠĠ Ġblog . modified Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġreturn Ġb logs Repository . save ( blog ). to Blog Details View Reflection () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġremove ById ( blog Id : ĠLong ): ĠBlog Details View Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġauthentication : Ġorg . springframework . security . core . Authentication Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠSecurity Context Holder . getContext (). get Authentication () Ċ // ĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġauthentication . get Principal () Ġas ĠUser ĊĠĠĠĠĠĠĠ Ġval Ġold : ĠBlog Details View Ġ= Ġfind ById ( blog Id ) Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( user Ġ== Ġnull Ġ|| Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ! authentication . get Author ities (). contains ( Simple Granted Authority (" ROLE _ ADMIN ")) Ġ&& Ġ! old . get Author Id () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equals ( user . getId ()) Ċ // ĠĠĠĠĠĠĠ Ġ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠUn author ised Modification Exception (" You Ġhave Ġno Ġpermissions Ġto Ġdelete Ġblog : Ġ" Ġ+ Ġold . getTitle ()) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġb logs Repository . delete ById ( blog Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġold ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcount (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġb logs Repository . count () ĊĠĠĠ Ġ} Ċ Ċ } Ċ