package Ġru . ot us . ot us kotlin . property sale . be . app . ktor Ċ Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . http . content .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġru . ot us . ot us kotlin . property sale . backend . repository . cassandra . flat . Flat Repository C assandra Ċ import Ġru . ot us . ot us kotlin . property sale . backend . repository . cassandra . house . House Repository C assandra Ċ import Ġru . ot us . ot us kotlin . property sale . backend . repository . cassandra . room . Room Repository C assandra Ċ import Ġru . ot us . ot us kotlin . property sale . backend . repository . in memory . flat . Flat Repo InMemory Ċ import Ġru . ot us . ot us kotlin . property sale . backend . repository . in memory . house . House Repo InMemory Ċ import Ġru . ot us . ot us kotlin . property sale . backend . repository . in memory . room . Room Repo InMemory Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . config . Auth Config Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . config . C assandra Config Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . config . feature Auth Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . config . feature Rest Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . controllers . flat Routing Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . controllers . house Routing Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . controllers . rabbit Mq Endpoints Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . controllers . room Routing Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . controllers . websocket Endpoints Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . exceptions . Wrong Config Exception Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . services . Flat Service Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . services . House Service Ċ import Ġru . ot us . ot us kotlin . property sale . be . app . ktor . services . Room Service Ċ import Ġru . ot us . ot us kotlin . property sale . be . business . logic . Flat Crud Ċ import Ġru . ot us . ot us kotlin . property sale . be . business . logic . House Crud Ċ import Ġru . ot us . ot us kotlin . property sale . be . business . logic . Room Crud Ċ import Ġru . ot us . ot us kotlin . property sale . be . common . repositories . I Flat Repository Ċ import Ġru . ot us . ot us kotlin . property sale . be . common . repositories . IH ouse Repository Ċ import Ġru . ot us . ot us kotlin . property sale . be . common . repositories . IR oom Repository Ċ import Ġkotlin . time . Duration Unit Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . to Duration Ċ Ċ fun Ġmain ( args : ĠArray < String >): ĠUnit Ġ= Ġio . ktor . server . netty . Engine Main . main ( args ) Ċ Ċ @ Opt In ( Experimental Time :: class ) Ċ @ Suppress (" unused ") Ġ// ĠRefer enced Ġin Ġapplication . conf Ċ fun ĠApplication . module ( ĊĠĠĠ Ġtesting : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġauth Off : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġtest Flat Repo : ĠI Flat Repository ? Ġ= Ġnull , ĊĠĠĠ Ġtest House Repo : ĠI House Repository ? Ġ= Ġnull , ĊĠĠĠ Ġtest Room Repo : ĠI Room Repository ? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ Ġval Ġauth Config Ġby Ġlazy Ġ{ ĠAuth Config ( environment , Ġauth Off ) Ġ} ĊĠĠĠ Ġval Ġc assandra Config Ġby Ġlazy Ġ{ ĠCassandra Config ( environment ) Ġ} ĊĊĠĠĠ Ġfeature Auth ( auth Config ) ĊĠĠĠ Ġfeature Rest () ĊĊĠĠĠ Ġval Ġrepo Prod Name Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġenvironment . config . property OrNull (" property sale . repository . prod ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . getString ()?. trim ()?. toLowerCase () Ġ?: Ġ" cassandra " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġflat Repo Prod Ġ= Ġwhen Ġ( repo Prod Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" cassandra " Ġ-> ĠFlat Repository C assandra ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey space Name Ġ= Ġc assandra Config . key space , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhosts Ġ= Ġc assandra Config . hosts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġc assandra Config . port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġc assandra Config . user , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Ġ= Ġc assandra Config . pass , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ" in memory " Ġ-> ĠFlat Repo InMemory () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠWrong Config Exception (" Flat Ġrepository Ġis Ġnot Ġset ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġhouse Repo Prod Ġ= Ġwhen Ġ( repo Prod Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" cassandra " Ġ-> ĠHouse Repository C assandra ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey space Name Ġ= Ġc assandra Config . key space , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhosts Ġ= Ġc assandra Config . hosts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġc assandra Config . port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġc assandra Config . user , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Ġ= Ġc assandra Config . pass , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ" in memory " Ġ-> ĠHouse Repo InMemory () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠWrong Config Exception (" House Ġrepository Ġis Ġnot Ġset ") ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġroom Repo Prod Ġ= Ġwhen Ġ( repo Prod Name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" cassandra " Ġ-> ĠRoom Repository C assandra ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey space Name Ġ= Ġc assandra Config . key space , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhosts Ġ= Ġc assandra Config . hosts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġc assandra Config . port , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġc assandra Config . user , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Ġ= Ġc assandra Config . pass , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ" in memory " Ġ-> ĠRoom Repo InMemory () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠWrong Config Exception (" Room Ġrepository Ġis Ġnot Ġset ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġflat Repo Test Ġ= Ġtest Flat Repo Ġ?: ĠFlat Repo InMemory ( ttl Ġ= Ġ 2 . to Duration ( Duration Unit . HOUR S )) ĊĠĠĠ Ġval Ġhouse Repo Test Ġ= Ġtest House Repo Ġ?: ĠHouse Repo InMemory ( ttl Ġ= Ġ 2 . to Duration ( Duration Unit . HOUR S )) ĊĠĠĠ Ġval Ġroom Repo Test Ġ= Ġtest Room Repo Ġ?: ĠRoom Repo InMemory ( ttl Ġ= Ġ 2 . to Duration ( Duration Unit . HOUR S )) ĊĠĠĠ Ġval Ġflat Crud Ġ= ĠFlat Crud ( ĊĠĠĠĠĠĠĠ Ġflat Repo Test Ġ= Ġflat Repo Test , ĊĠĠĠĠĠĠĠ Ġflat Repo Prod Ġ= Ġflat Repo Prod , ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġhouse Crud Ġ= ĠHouse Crud ( ĊĠĠĠĠĠĠĠ Ġhouse Repo Test Ġ= Ġhouse Repo Test , ĊĠĠĠĠĠĠĠ Ġhouse Repo Prod Ġ= Ġhouse Repo Prod , ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġroom Crud Ġ= ĠRoom Crud ( ĊĠĠĠĠĠĠĠ Ġroom Repo Test Ġ= Ġroom Repo Test , ĊĠĠĠĠĠĠĠ Ġroom Repo Prod Ġ= Ġroom Repo Prod , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġflat Service Ġ= ĠFlat Service ( flat Crud ) ĊĠĠĠ Ġval Ġhouse Service Ġ= ĠHouse Service ( house Crud ) ĊĠĠĠ Ġval Ġroom Service Ġ= ĠRoom Service ( room Crud ) ĊĊĠĠĠ Ġ// ĠÐŁ Ð¾Ð´ ÐºÐ»ÑİÑĩ Ð°ÐµÐ¼ ĠWeb socket ĊĠĠĠ Ġwebsocket Endpoints ( ĊĠĠĠĠĠĠĠ Ġflat Service Ġ= Ġflat Service , ĊĠĠĠĠĠĠĠ Ġhouse Service Ġ= Ġhouse Service , ĊĠĠĠĠĠĠĠ Ġroom Service Ġ= Ġroom Service , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠÐŁ Ð¾Ð´ ÐºÐ»ÑİÑĩ Ð°ÐµÐ¼ ĠRabbit MQ ĊĠĠĠ Ġval Ġrabbit Mq Endpoint Ġ= Ġenvironment . config . property OrNull (" property sale . rabbitmq . endpoint ") ?. getString () ĊĠĠĠ Ġif Ġ( rabbit Mq Endpoint Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrabbit Mq Endpoints ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrabbit Mq Endpoint Ġ= Ġrabbit Mq Endpoint , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflat Service Ġ= Ġflat Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhouse Service Ġ= Ġhouse Service , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom Service Ġ= Ġroom Service , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrouting Ġ{ ĊĠĠĠĠĠĠĠ Ġget ("/") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcall . respond Text (" HEL LO ĠW ORLD !", ĠcontentType Ġ= ĠContentType . Text . Plain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠStatic Ġfeature . ĠTry Ġto Ġaccess Ġ`/ static / ktor _ logo . svg ` ĊĠĠĠĠĠĠĠ Ġstatic ("/ static ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresources (" static ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġflat Routing ( flat Service ) ĊĠĠĠĠĠĠĠ Ġhouse Routing ( house Service ) ĊĠĠĠĠĠĠĠ Ġroom Routing ( room Service ) ĊĠĠĠ Ġ} Ċ } Ċ