package Ġfr . eline . virtual id . controller Ċ Ċ import Ġfr . eline . virtual id . bean . Post Ċ import Ġfr . eline . virtual id . bean . User Ċ import Ġfr . eline . virtual id . dal . Users Ċ import Ġfr . eline . virtual id . dbName Ċ import Ġfr . eline . virtual id . mongo . extensions . analyze DB Ref Ċ import Ġfr . eline . virtual id . mongo . extensions . include DB Refs Ċ import Ġfr . eline . virtual id . request .* Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . auth . authenticate Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . routing . Route Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . routing . post Ċ import Ġio . ktor . routing . route Ċ import Ġorg . bson . types . ObjectId Ċ import Ġorg . k oin . ktor . ext . inject Ċ import Ġorg . lit ote . km ongo . ascending Ċ import Ġorg . lit ote . km ongo . coroutine . Coroutine Client Ċ import Ġorg . lit ote . km ongo . desc ending Ċ import Ġorg . lit ote . km ongo . eq Ċ import Ġorg . lit ote . km ongo . id . to Id Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ Ċ fun ĠRoute . post Routes () Ġ{ ĊĊĠĠĠ Ġval Ġlogger : ĠLogger Ġ= ĠLoggerFactory . getLogger (" Post Controller ") ĊĠĠĠ Ġval Ġclient : ĠCor outine Client Ġby Ġinject () ĊĊĠĠĠ Ġval Ġcollection Name Ġ= Ġ" posts " ĊĊĠĠĠ Ġroute ("/ posts ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġauthenticate (" virtual id - user - auth ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ list ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposts Ġ= Ġclient . get Database ( dbName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Collection < Post >( collection Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sort ( desc ending ( Post :: date )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( post Ġin Ġposts ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude DB Refs ( post , Ġclient ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . OK , Ġposts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost < Create Post Request > ("/ create ") Ġ{ Ġrequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Ġ= ĠPost ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= ĠUser ( ObjectId ( request . author id ). to Id ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġrequest . content , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= Ġrequest . visibility , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġrequest . date ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( post Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyze DB Ref ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . get Database ( dbName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Collection < Post >( collection Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. insert One ( post ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" New Ġpost Ġ${ post ._ id } Ġpublished ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcall . respond ( HttpStatusCode . InternalServerError ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost < Delete Post Request > ("/ delete ") Ġ{ Ġrequest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . get Database ( dbName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Collection < Post >( collection Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. delete One ( Post ::_ id Ġeq ĠObjectId ( request . post id ). to Id ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Post Ġ${ request . post id } Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }