package Ġderive an . rest . root . user . endpoint Ċ Ċ import Ġderive an . rest . common . Fetch Attribute Ċ import Ġderive an . rest . root . Abstract Fetch Endpoint Ċ import Ġderive an . storage . entities . Attribute Entity Ċ import Ġderive an . storage . entities . User Entity Ċ import Ġderive an . storage . repository . User Hero Repository Ċ import Ġderive an . storage . repository . UserRepository Ċ import Ġio . ktor . routing .* Ċ import Ġio . ktor . util .* Ċ import Ġle ight . container . I Container Ċ import Ġle ight . mapper . Abstract Mapper Ċ import Ġle ight . storage . Entity UUID Ċ import Ġorg . jetbrains . ex posed . sql . Sized Collection Ċ import Ġorg . jetbrains . ex posed . sql . Sized Iterable Ċ Ċ @ K tor Experimental API Ċ class ĠFetch Endpoint ( container : ĠI Container ) Ġ: ĠAbstract Fetch Endpoint ( container ) Ġ{ Ċ ĉ private Ġval Ġfetch Mapper : ĠFetch Mapper Ġby Ġcontainer . lazy () Ċ ĉ private Ġval Ġuser Repository : ĠUser Repository Ġby Ġcontainer . lazy () ĊĊ ĉ override Ġfun Ġinstall ( routing : ĠRouting ) Ġ= Ġfetch ( Ċĉ ĉ routing , Ċĉ ĉ "/ api / root / user ", Ċĉ ĉ " root . user ", Ċĉ ĉ fetch Mapper , Ċĉ ĉ user Repository , Ċ ĉ ) Ċ } Ċ Ċ class ĠFetch Mapper ( container : ĠI Container ) Ġ: ĠAbstract Mapper < User Entity , ĠFetch Mapper . Fetch >( container ) Ġ{ Ċ ĉ private Ġval Ġuser Hero Repository : ĠUser Hero Repository Ġby Ġcontainer . lazy () ĊĊ ĉ override Ġfun Ġmap ( item : ĠUser Entity ) Ġ= ĠFetch . build Ġ{ Ċĉ ĉ this . id Ġ= Ġitem . id Ċĉ ĉ this . name Ġ= Ġitem . name Ċĉ ĉ this . login Ġ= Ġitem . login Ċĉ ĉ this . site Ġ= Ġitem . site Ċĉ ĉ item . ticket ?. let Ġ{ Ġthis . ticket Ġ= Ġit . toString () Ġ} Ċĉ ĉ this . stats Ġ= ĠStats ( Ċĉĉ ĉ item . king dom s . count (), Ċĉĉ ĉ user Hero Repository . total ( item . id . value ), Ċĉ ĉ ) Ċĉ ĉ this . attributes Ġ= Ġitem . attributes Ċ ĉ } ĊĊ ĉ data Ġclass ĠFetch ( Ċĉ ĉ val Ġid : ĠString , Ċĉ ĉ val Ġname : ĠString , Ċĉ ĉ val Ġlogin : ĠString , Ċĉ ĉ val Ġticket : ĠString ?, Ċĉ ĉ val Ġsite : ĠString ?, Ċĉ ĉ val Ġstats : ĠStats , Ċĉ ĉ val Ġattributes : ĠList < Fetch Attribute >, Ċ ĉ ) Ġ{ Ċĉ ĉ comp anion Ġobject Ġ{ Ċĉĉ ĉ inline Ġfun Ġbuild ( block : ĠBuilder . () Ġ-> ĠUnit ) Ġ= ĠBuilder (). apply ( block ). build () Ċĉ ĉ } ĊĊĉ ĉ class ĠBuilder Ġ{ Ċĉĉ ĉ late init Ġvar Ġid : ĠEntity UUID Ċĉĉ ĉ late init Ġvar Ġname : ĠString Ċĉĉ ĉ late init Ġvar Ġlogin : ĠString Ċĉĉ ĉ var Ġticket : ĠString ? Ġ= Ġnull Ċĉĉ ĉ var Ġsite : ĠString ? Ġ= Ġnull Ċĉĉ ĉ late init Ġvar Ġstats : ĠStats Ċĉĉ ĉ var Ġattributes : ĠSized Iterable < Attribute Entity > Ġ= ĠSized Collection () ĊĊĉĉ ĉ fun Ġbuild () Ġ= ĠFetch ( Ċĉĉĉ ĉ id . toString (), Ċĉĉĉ ĉ name , Ċĉĉĉ ĉ login , Ċĉĉĉ ĉ ticket , Ċĉĉĉ ĉ site , Ċĉĉĉ ĉ stats , Ċĉĉĉ ĉ attributes . map Ġ{ ĠFetch Attribute . build ( it ) Ġ}, Ċĉĉ ĉ ) Ċĉ ĉ } Ċ ĉ } ĊĊ ĉ data Ġclass ĠStats ( Ċĉ ĉ val Ġking dom s : ĠLong , Ċĉ ĉ val Ġhero es : ĠLong , Ċ ĉ ) Ċ } Ċ