package Ġio . the . orm . exp Ċ Ċ import Ġio . the . orm . Repository Ċ import Ġio . the . orm . Repository Impl Ċ import Ġio . the . orm . db io . Connection Provider Ċ import Ġio . the . orm . db io . Transaction Provider Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠMulti Repo ( classes : ĠList < K Class < out ĠAny >>) Ġ{ ĊĠĠĠ Ġval Ġrepos : ĠMap < K Class < out ĠAny >, ĠRepository < out ĠAny >> Ġ= ĊĠĠĠĠĠĠĠ Ġclasses . associate By ({ Ġit Ġ}, Ġ{ ĠRepository Impl ( it , Ġclasses . toSet ()) Ġ}) ĊĊĠĠĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġcreate ( connection Provider : ĠConnection Provider , Ġentity : ĠT ): ĠT Ġ= ĊĠĠĠĠĠĠĠ Ġget Repo ( T :: class ). create ( connection Provider , Ġentity ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġget Repo ( k Class : ĠK Class < T >) Ġ= Ġrepos [ k Class ] Ġas ĠRepository < T > ĊĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġquery Factory () Ġ= Ġget Repo ( T :: class ). query Factory Ċ Ċ } Ċ Ċ open Ġclass ĠConnected Multi Repo Ġinternal Ġconstructor ( ĊĠĠĠ Ġopen Ġval Ġconnection Provider : ĠConnection Provider , ĊĠĠĠ Ġval Ġrepo : ĠMulti Repo Ċ ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġsuspend Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠAny > Ġcreate ( entity : ĠT ): ĠT Ġ= Ġrepo . create ( connection Provider , Ġentity ) Ċ } Ċ Ċ class ĠTransaction al Multi Repo ( ĊĠĠĠ Ġoverride Ġval Ġconnection Provider : ĠTransaction Provider , ĊĠĠĠ Ġrepo : ĠMulti Repo Ċ ) Ġ: ĠConnected Multi Repo ( connection Provider , Ġrepo ) Ġ{ ĊĠĠĠ Ġconstructor ( connection Provider : ĠTransaction Provider , Ġclasses : ĠList < K Class < out ĠAny >>) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠ Ġconnection Provider , ĊĠĠĠĠĠĠĠ ĠMulti Repo ( classes ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġsuspend Ġfun Ġ< R > Ġtransaction ( function : Ġsuspend Ġ( Connected Multi Repo ) Ġ-> ĠR ): ĠR Ġ= ĊĠĠĠĠĠĠĠ Ġconnection Provider . transaction Ġ{ Ġtransaction Connection Provider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfunction ( Connected Multi Repo ( transaction Connection Provider , Ġrepo )) ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ } Ċ