package Ġcom . im ma . rest Ċ Ċ import Ġcom . im ma . auth . Roles Ċ import Ġcom . im ma . model . admin . User Ċ import Ġcom . im ma . model . admin . User For Holder Ċ import Ġcom . im ma . model . page . Page able Ċ import Ġcom . im ma . service . Services Ċ import Ġio . ktor . application .* Ċ import Ġio . ktor . auth .* Ċ import Ġio . ktor . request .* Ċ import Ġio . ktor . response .* Ċ import Ġio . ktor . routing .* Ċ import Ġkotlin . contracts . Experimental Contracts Ċ Ċ @ Experimental Contracts Ċ fun ĠRoute . save User Route () Ġ{ Ċ ĉ post ( Route Constants . USER _ SAVE ) Ġ{ Ċĉ ĉ val Ġuser Ġ= Ġcall . receive < User >() Ċĉ ĉ Services (). use Ġ{ Ġit . user Ġ{ Ġsave User ( user ) Ġ} Ġ} Ċĉ ĉ call . respond ( user ) Ċ ĉ } Ċ } Ċ Ċ fun ĠRoute . find User ById Route () Ġ{ Ċ ĉ get ( Route Constants . USER _ FIND _ BY _ ID ) Ġ{ Ċĉ ĉ val ĠuserId : ĠString ? Ġ= Ġcall . request . query Parameters [" user _ id "] Ċĉ ĉ if Ġ( userId Ġ== Ġnull Ġ|| ĠuserId . isBlank ()) Ġ{ Ċĉĉ ĉ // ĠTODO Ġa Ġempty Ġobject Ċĉĉ ĉ call . respond ( map Of < String , ĠString >()) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ val Ġuser Ġ= ĠServices (). use Ġ{ Ġit . user Ġ{ Ġfind User ById ( userId ) Ġ} Ġ} Ċĉĉ ĉ if Ġ( user Ġ== Ġnull ) Ġ{ Ċĉĉĉ ĉ // ĠTODO Ġa Ġempty Ġobject Ċĉĉĉ ĉ call . respond ( map Of < String , ĠString >()) Ċĉĉ ĉ } Ġelse Ġ{ Ċĉĉĉ ĉ call . respond ( user ) Ċĉĉ ĉ } Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ /** Ċ Ġ* ĠTODO Ġit Ġis Ġnot Ġcompatible Ġwith Ġfrontend Ġresponse Ġformat , Ġto Ġbe Ġcontinued ... Ċ Ġ*/ Ċ fun ĠRoute . list Users ByName Route () Ġ{ Ċ ĉ post ( Route Constants . USER _ LIST _ BY _ NAME ) Ġ{ Ċĉ ĉ val Ġpage able Ġ= Ġcall . receive < Page able >() Ċĉ ĉ val Ġname : ĠString ? Ġ= Ġcall . request . query Parameters [" query _ name "] Ċĉ ĉ val Ġpage Ġ= ĠServices (). use Ġ{ Ġit . user Ġ{ Ġfind Users ByName ( name , Ġpage able ) Ġ} Ġ} Ċĉ ĉ call . respond ( page ) Ċ ĉ } Ċ } Ċ Ċ fun ĠRoute . list Users ByName For Holder Route () Ġ{ Ċ ĉ get ( Route Constants . USER _ LIST _ BY _ NAME _ FOR _ HOLDER ) Ġ{ Ċĉ ĉ val Ġname : ĠString ? Ġ= Ġcall . request . query Parameters [" query _ name "] Ċĉ ĉ val Ġusers Ġ= ĠServices (). use Ġ{ Ġit . user Ġ{ Ġfind Users ByName For Holder ( name ) Ġ} Ġ} Ċĉ ĉ call . respond ( users ) Ċ ĉ } Ċ } Ċ Ċ fun ĠRoute . list Users ById s For Holder Route () Ġ{ Ċ ĉ post ( Route Constants . USER _ LIST _ BY _ IDS _ FOR _ HOLDER ) Ġ{ Ċĉ ĉ val Ġuser Ids Ġ= Ġcall . receive < List < String >>() Ċĉ ĉ if Ġ( user Ids . isEmpty ()) Ġ{ Ċĉĉ ĉ call . respond ( listOf < User For Holder >()) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ val Ġusers Ġ= ĠServices (). use Ġ{ Ġit . user Ġ{ Ġfind Users ById s For Holder ( user Ids ) Ġ} Ġ} Ċĉĉ ĉ call . respond ( users ) Ċĉ ĉ } Ċ ĉ } Ċ } Ċ Ċ @ Experimental Contracts Ċ fun ĠApplication . user Routes () Ġ{ Ċ ĉ routing Ġ{ Ċĉ ĉ authenticate ( Roles . ADMIN . ROLE ) Ġ{ Ċĉĉ ĉ save User Route () Ċĉĉ ĉ find User ById Route () Ċĉĉ ĉ list Users ByName Route () Ċĉĉ ĉ list Users ByName For Holder Route () Ċĉĉ ĉ list Users ById s For Holder Route () Ċĉ ĉ } Ċ ĉ } Ċ }