package Ġcom . wj p . server Ċ Ċ import Ġcom . wj p . common . Shop Item Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . features . C ORS Ċ import Ġio . ktor . features . Compression Ċ import Ġio . ktor . features . Content Neg otiation Ċ import Ġio . ktor . features . gzip Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . http . content .* Ċ import Ġio . ktor . request .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġio . ktor . serialization . json Ċ import Ġio . ktor . server . engine . embedded Server Ċ import Ġio . ktor . server . netty . Net ty Ċ import Ġorg . lit ote . km ongo . coroutine .* Ċ import Ġorg . lit ote . km ongo . eq Ċ import Ġorg . lit ote . km ongo . reactiv est ream s . K Mongo Ċ Ċ val Ġclient Ġ= ĠK Mongo . create Client (). coroutine Ġ// use Ġcoroutine Ġextension Ċ val Ġdatabase Ġ= Ġclient . get Database (" shop _ db ") Ċ val Ġcollection Ġ= Ġdatabase . get Collection < Shop Item >() Ċ Ċ fun Ġmain () Ġ{ ĊĠĠĠ Ġembedded Server ( factory Ġ= ĠNet ty , Ġ Ġport Ġ= Ġ 8 0 8 0 , Ġhost Ġ= Ġ" localhost ") Ġ{ ĊĠĠĠĠĠĠĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstall ( C ORS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ( HttpMethod . Get ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ( HttpMethod . Post ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod ( HttpMethod . Delete ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġany Host () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinstall ( Compression ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgzip () ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġshop ItemList Ġ= Ġmutable ListOf ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShop Item (" Apple ", Ġ 1 2 . 0 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShop Item (" B anna ", Ġ 1 8 . 0 ), Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShop Item (" Orange ", Ġ 2 3 . 0 ), Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ Ġindex . html Ġ ä½ľä¸º ä¸Ģä¸ª Ġplaceholder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ("/ "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text ( contentType Ġ= ĠContentType . Text . Html ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis :: class . java . class Loader . getResource (" index . html ") !!. read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġindex . html éľĢè¦ģ å¼ķçĶ¨ è¿Ļä¸ª è¯¥ çĽ®å½ķ çļĦ çĶŁæĪĲ çļĦ shopping . js ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatic ("/ "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroute ( Shop Item . path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( shop ItemList ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( collection . find (). toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġ Ġcall . receive < Shop Item >() Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop ItemList Ġ+= Ġitem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . insert One ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete ("/ { id }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcall . parameters [" id "] ?. toInt () Ġ?: Ġerror (" invalid Ġid Ġ${ call . parameters [" id "] }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshop ItemList . remove If Ġ{ Ġit . id Ġ== Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollection . delete One ById ( Shop Item :: id Ġeq Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . OK ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget (" hello ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond (" hello Ġk tor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. start ( true ) Ċ }