package Ġn inja . jw illis . models Ċ Ċ import Ġio . reactivex . Observable Ċ import Ġio . vertx . core . json . JsonArray Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġio . vertx . kotlin . core . json . json Ċ import Ġio . vertx . kotlin . core . json . obj Ċ import Ġio . vertx . reactivex . pg client . Pg Pool Ċ import Ġio . vertx . reactivex . sql client . Row Ċ import Ġio . vertx . reactivex . sql client . Tuple ĊĊ Ċ abstract Ġclass ĠModel ( val Ġpool : ĠP g Pool , Ġval Ġtable : ĠString ) Ġ{ ĊĊĠĠĠ Ġfun Ġall () Ġ= Ġpool . rx Begin (). flatMap Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠ Ġconnection . rx Prepare (" select Ġ* Ġfrom Ġ$ table ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ Ġprepared Query Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Stream Ġ= Ġprepared Query . create Stream ( 5 0 , ĠTuple . tuple ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Stream . to Observable (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Row ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toJson Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind ( id : ĠString ) Ġ= Ġpool . rx Prepared Query (" select Ġ* Ġfrom Ġ$ table Ġwhere Ġid Ġ= Ġ$ 1 ", ĠTuple . of ( id )). flatMap Observable Ġ{ ĊĠĠĠĠĠĠĠ ĠObservable . from Iterable ( it . as Iterable ()) ĊĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Row ( it ) ĊĠĠĠ Ġ}. single Or Error () ĊĊĠĠĠ Ġfun ĠfindBy ( query : ĠString , Ġparams : ĠTuple ) Ġ= Ġpool . rx Prepared Query ( query , Ġparams ). flatMap Observable Ġ{ ĊĠĠĠĠĠĠĠ ĠObservable . from Iterable ( it . as Iterable ()) ĊĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Row ( it ) ĊĠĠĠ Ġ}. single Or Error () ĊĊĠĠĠ Ġfun Ġdelete ( id : ĠString ) Ġ= Ġpool . rx Prepared Query (" delete Ġfrom Ġ$ table Ġwhere Ġid Ġ= Ġ$ 1 ", ĠTuple . of ( id )). flatMap Observable Ġ{ ĊĠĠĠĠĠĠĠ ĠObservable . from Iterable ( it . as Iterable ()) ĊĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠ Ġjson Row ( it ) ĊĠĠĠ Ġ}. single Or Error () ĊĊĠĠĠ Ġfun Ġwhere ( query : ĠString , Ġparams : ĠTuple ) Ġ= Ġpool . rx Begin (). flatMap Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠ Ġconnection . rx Prepare ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Observable Ġ{ Ġprepared Query Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Stream Ġ= Ġprepared Query . create Stream ( 5 0 , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Stream . to Observable (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson Row ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toJson Array () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġjson Row ( row : ĠRow ) Ġ: ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġbuild Out Json Row ( row , Ġjson Ġ{ Ġobj () Ġ}, Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Out Json Row ( db Row : ĠRow , Ġcurrent Json : ĠJsonObject , Ġcurrent Column : ĠInt ) Ġ: ĠJsonObject Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( db Row . size ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Column Ġ-> Ġcurrent Json ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnName Ġ= Ġdb Row . get ColumnName ( current Column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Row Value Ġ= Ġdb Row . getValue ( columnName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Json Row Ġ: ĠJsonObject Ġ= Ġif Ġ( columnName Ġ== Ġ" data ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Json String Ġ= Ġdb Row . getString (" data ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJsonObject ( data Json String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson . copy (). map . put All ( current Json . map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjson ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Json . put ( columnName , Ġdb Row Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Out Json Row ( db Row , Ġnew Json Row , Ġcurrent Column Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠObservable < T >. toJson Array () Ġ= Ġthis . toList (). map Ġ{ ĠJson Array ( it ) Ġ} Ċ }