package Ġstores Ċ Ċ import ĠDatabase Factory Ċ import Ġio . ktor . http . Parameters Ċ import Ġmodels . Channel Ċ import Ġmodels . Channel Subscription Ċ import Ġmodels . User Ċ import Ġorg . jetbrains . ex posed . sql . insert Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . selectAll Ċ import Ġorg . joda . time . DateTime Ċ import Ġjava . util .* Ċ Ċ data Ġclass ĠUser Small Obj ( ĊĠĠĠĠĠĠĠ Ġval Ġusername : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ) Ċ Ċ data Ġclass ĠChannel Users ( ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġval ĠUser : ĠUser Small Obj Ċ ) Ċ Ċ data Ġclass ĠChannel Subscription Obj ( ĊĠĠĠĠĠĠĠ Ġvar ĠuserId : ĠString , ĊĠĠĠĠĠĠĠ Ġvar Ġchannel Id : ĠString , ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠString , ĊĠĠĠĠĠĠĠ Ġvar ĠcreatedAt : ĠString , ĊĠĠĠĠĠĠĠ Ġvar Ġupdate At : ĠString Ċ ) Ċ Ċ object ĠChannel Subscription Store Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Channel Subscription ( params : ĠParameters ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuuid Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ ĠDatabase Factory . db Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġ( Channel Subscription . insert Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ userId ] Ġ= Ġparams [" userId "] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ channelId ] Ġ= Ġparams [" channelId "] !! ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ id ] Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ createdAt ] Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ update At ] Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġget ĠChannel Subscription . id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġuuid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Channel Subscription ( uuid : ĠString ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDatabase Factory . db Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Subscription . select Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Subscription . id . eq ( uuid !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. take If Ġ{ Ġ! it . empty () Ġ} ?. map Ġ{ Ġit [ Channel Subscription . id ] Ġ} ?. get ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll Channel Sub cri ptions (): ĠList < Channel Subscription Obj > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDatabase Factory . db Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Subscription . selectAll (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠChannel Subscription Obj ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel Subscription . userId ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel Subscription . channelId ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel Subscription . id ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel Subscription . createdAt ]. toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel Subscription . update At ]. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Users In Channel ( uuid : ĠString ): ĠList < Channel Users >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDatabase Factory . db Query Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( User Ġinner Join ĠChannel Subscription Ġinner Join ĠChannel ). slice ( User . username , ĠUser . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel Subscription . id , ĠChannel Subscription . userId , ĠChannel Subscription . channelId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChannel . id , ĠChannel . name , ĠChannel . creator Id ). select Ġ{ ĠChannel Subscription . channelId . eq ( uuid !! ) Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map ĠChannel Users ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel . name ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ Channel . id ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Small Obj ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ User . username ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit [ User . id ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }