/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠStan isl aw Ġst as bar ĠBar ans ki Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠ Ġ__ ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ__ Ċ Ġ* ĠĠĠ Ġ__ ___ / Ġ/ _____ Ġ__ ____ / Ġ/ _ Ġ Ġ____ Ġ__ ____ Ċ Ġ* ĠĠ Ġ/ Ġ___ / Ġ__ / Ġ__ Ġ`/ Ġ___ / Ġ__ Ġ\/ Ġ__ Ġ`/ Ġ___ / Ċ Ġ* Ġ Ġ(__ Ġ Ġ) Ġ/ _/ Ġ/ _/ Ġ(__ Ġ Ġ) Ġ/ _/ Ġ/ Ġ/ _/ Ġ/ Ġ/ Ċ Ġ* Ġ/ ____ /\ __/ \ __, _/ ____ / _. ___ /\ __, _ /_ / Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠ Ġst as bar @ st as bar . com Ċ Ġ*/ Ċ Ċ package Ġcom . st as bar . app Ċ Ċ import Ġcom . fasterxml . jackson . databind . Serialization Feature Ċ import Ġcom . st as bar . app . di . modules Ċ import Ġcom . st as bar . app . g play api . G Play Api Ċ import Ġio . ktor . application . Application Ċ import Ġio . ktor . application . call Ċ import Ġio . ktor . application . install Ċ import Ġio . ktor . features . Auto Head Response Ċ import Ġio . ktor . features . Call Logging Ċ import Ġio . ktor . features . Content Neg otiation Ċ import Ġio . ktor . features . Default Headers Ċ import Ġio . ktor . html . respond Html Ċ import Ġio . ktor . http . HttpStatusCode Ċ import Ġio . ktor . jackson . jackson Ċ import Ġio . ktor . response . respond Ċ import Ġio . ktor . routing . get Ċ import Ġio . ktor . routing . route Ċ import Ġio . ktor . routing . routing Ċ import Ġkotlinx . html .* Ċ import Ġmu . Kotlin Logging Ċ import Ġorg . k oin . core . context . start K oin Ċ import Ġorg . k oin . ktor . ext . inject ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ= Ġio . ktor . server . netty . Engine Main . main ( args ) Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{} Ċ @ Suppress (" unused ") Ġ// ĠRefer enced Ġin Ġapplication . conf Ċ fun ĠApplication . module () Ġ{ ĊĠ Ġstart K oin Ġ{ ĊĠĠĠ Ġmodules ( modules ) ĊĠĠĠ Ġfile Properties () ĊĠĠĠ Ġenvironment Properties () ĊĠ Ġ} ĊĠ Ġinstall ( Default Headers ) ĊĠ Ġinstall ( Call Logging ) ĊĠ Ġinstall ( Auto Head Response ) ĊĠ Ġinstall ( Content Neg otiation ) Ġ{ ĊĠĠĠ Ġj ack son Ġ{ ĊĠĠĠĠĠ Ġenable ( Serialization Feature . IND ENT _ OUTPUT ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġbooks Repository : ĠBooks Repository Ġby Ġinject () ĊĠ Ġval Ġg play Api : ĠG Play Api Ġby Ġinject () ĊĠ Ġ// ĠRegisters Ġroutes ĊĠ Ġrouting Ġ{ ĊĊĠĠĠ Ġroute ("/ api ") Ġ{ ĊĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠ Ġcall . respond Html Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġhead Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ{ Ġ+" K tor Ġon ĠGoogle ĠApp ĠEngine ĠStandard " Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġbody Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp Ġ{ Ġ+" Hello Ġthere ! ĠThis Ġis ĠK tor Ġrunning Ġon ĠGoogle ĠApp engine ĠStandard " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġul Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ( href Ġ= Ġ"/ api / fetch Good reads ") Ġ{ Ġ+" Fetch ĠGood reads " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġul Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli Ġ{ Ġa ( href Ġ= Ġ"/ api / fetch Books ") Ġ{ Ġ+" Fetch ĠBooks " Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli Ġ{ Ġa ( href Ġ= Ġ"/ api / fetch Quotes ") Ġ{ Ġ+" Fetch ĠQu otes " Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ( href Ġ= Ġ"/ api / quotes ") Ġ{ Ġ+" Quotes " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġli Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġa ( href Ġ= Ġ"/ api / books ") Ġ{ Ġ+" Books " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ fetch Good reads ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbooks Repository . fetch All Books () ĊĠĠĠĠĠĠĠ Ġbooks Repository . fetch All Quotes () ĊĠĠĠĠĠĠĠ Ġcall . respond (" Done ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ fetch Books ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbooks Repository . fetch All Books () ĊĠĠĠĠĠĠĠ Ġcall . respond (" Done ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ fetch Quotes ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbooks Repository . fetch All Quotes () ĊĠĠĠĠĠĠĠ Ġcall . respond (" Done ") ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ quotes ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġcall . parameters [" limit "] ?. toInt OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( limit Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( books Repository . getAll Quotes ( limit )) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( books Repository . getAll Quotes ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ books ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshe lf Ġ= Ġcall . parameters [" shelf "] ĊĠĠĠĠĠĠĠ Ġval Ġbooks Ġ= Ġif Ġ( shelf Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġbooks Repository . getAll Books () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠ Ġbooks Repository . get Books From She lf ( shelf ) ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" quer ied Ġ${ books . size } Ġbooks ") ĊĠĠĠĠĠĠĠ Ġcall . respond ( books ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ golden N ug get ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgold en N ug get Ġ= Ġbooks Repository . get Gold en N ug get () ĊĠĠĠĠĠĠĠ Ġif Ġ( golden N ug get Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . NotFound ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( golden N ug get ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ app Stats /{ packageName }") Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġcall . parameters [" packageName "] ĊĠĠĠĠĠĠĠ Ġif Ġ( packageName Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( g play Api . getApp Downloads ( packageName )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġget ("/ total Developer Apps Stats /{ developer Name }") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeveloper Name Ġ= Ġcall . parameters [" developer Name "] ĊĠĠĠĠĠĠĠ Ġif Ġ( developer Name Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( HttpStatusCode . BadRequest ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠ Ġcall . respond ( g play Api . getTotal Developer Apps Downloads ( developer Name )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ