package Ġco . there 4 . hex agon Ċ Ċ import Ġco . there 4 . hex agon . repository . Mongo Id Repository Ċ import Ġco . there 4 . hex agon . repository . mongo Collection Ċ import Ġjava . lang . System . getenv Ċ Ċ import Ġco . there 4 . hex agon . settings . Settings Manager . setting Ċ import Ġco . there 4 . hex agon . repository . mongo Database Ċ import Ġco . there 4 . hex agon . util . err Ċ import Ġjava . io . Closeable Ċ import Ġkotlin . reflect . K Property 1 Ċ Ċ internal Ġval ĠDB _ ROWS Ġ= Ġ 1 0 0 0 0 Ċ Ċ private Ġval ĠDB _ HOST Ġ= Ġgetenv (" DB HOST ") Ġ?: Ġ" localhost " Ċ private Ġval ĠDB Ġ= Ġsetting < String >(" database ") Ġ?: Ġ" hello _ world " Ċ private Ġval ĠW ORLD : ĠString Ġ= Ġsetting < String >(" world Collection ") Ġ?: Ġ" world " Ċ private Ġval ĠF ORT UNE : ĠString Ġ= Ġsetting < String >(" fort une Collection ") Ġ?: Ġ" fort une " Ċ Ċ internal Ġfun Ġcreate Store ( engine : ĠString ): ĠRepository Ġ= Ġwhen Ġ( engine ) Ġ{ ĊĠĠĠ Ġ" mongodb " Ġ-> ĠMongo Db Repository () ĊĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġdatabase ") Ċ } Ċ Ċ internal Ġinterface ĠRepository Ġ{ ĊĠĠĠ Ġfun Ġfind Fort unes (): ĠList < Fort une > ĊĠĠĠ Ġfun Ġfind World s ( queries : ĠInt ): ĠList < World > ĊĠĠĠ Ġfun Ġreplace World s ( queries : ĠInt ): ĠList < World > Ċ } Ċ Ċ internal Ġclass ĠMongo Db Repository Ġ: ĠRepository Ġ{ ĊĠĠĠ Ġprivate Ġval Ġdatabase Ġ= Ġmongo Database (" mongodb :// $ DB _ HOST /$ DB ") ĊĊĠĠĠ Ġinternal Ġval Ġworld Repository Ġ= Ġrepository ( WORLD , ĠWorld ::_ id ) ĊĠĠĠ Ġinternal Ġval Ġfort une Repository Ġ= Ġrepository ( F ORT UNE , ĠFort une ::_ id ) ĊĊĠĠĠ Ġ// ĠTODO ĠFind Ġout Ġwhy Ġit Ġfails Ġwhen Ġcreating Ġindex Ġ'_ id ' Ġwith Ġbackground : Ġtrue ĊĠĠĠ Ġprivate Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġrepository ( name : ĠString , Ġkey : ĠK Property 1 < T , ĠInt >) Ġ= ĊĠĠĠĠĠĠĠ ĠMongo Id Repository ( T :: class , Ġmongo Collection ( name , Ġdatabase ), Ġkey , Ġindex Order Ġ= Ġnull ) ĊĊĠĠĠ Ġoverride Ġfun Ġfind Fort unes () Ġ= Ġfort une Repository . find Objects (). toList () ĊĊĠĠĠ Ġoverride Ġfun Ġfind World s ( queries : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġ( 1 .. queries ). map Ġ{ Ġworld Repository . find ( rnd ()) Ġ}. filter NotNull () ĊĊĠĠĠ Ġoverride Ġfun Ġreplace World s ( queries : ĠInt ) Ġ= Ġ( 1 .. queries ). map Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġrnd () ĊĠĠĠĠĠĠĠ Ġval Ġnew World Ġ= ĠWorld ( id , Ġid ) ĊĠĠĠĠĠĠĠ Ġworld Repository . replace Object ( new World ) ĊĠĠĠĠĠĠĠ Ġnew World ĊĠĠĠ Ġ} Ċ } Ċ