package Ġio . ze ko . model Ċ Ċ import Ġio . ze ko . db . sql . utilities . to Camel Case Ċ import Ġkotlinx . datetime . LocalDate Ċ import Ġkotlinx . datetime . LocalDateTime Ċ Ċ abstract Ġclass ĠEntity Ġ{ ĊĠĠĠ Ġprotected Ġvar Ġmap : ĠMutable Map < String , ĠAny ?> ĊĊĠĠĠ Ġconstructor ( map : ĠMap < String , ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcamel Case Map Ġ= Ġmutable Map Of < String , ĠAny ?> () ĊĠĠĠĠĠĠĠ Ġval Ġmappings Ġ= Ġprop Type Mapping () ĊĠĠĠĠĠĠĠ Ġfor Ġ(( k , Ġv ) Ġin Ġmap ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( v Ġ== Ġnull ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprop Ġ= Ġk . to Camel Case () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mappings Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamel Case Map [ prop ] Ġ= Ġmap Prop Value ( mappings , Ġprop , Ġv ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcamel Case Map [ prop ] Ġ= Ġv ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . map Ġ= Ġcamel Case Map . with Default Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( var arg Ġprops : ĠPair < String , ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . map Ġ= Ġmutable Map Of (* props ). with Default Ġ{ Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun ĠtableName (): ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġopen Ġfun Ġdata Map (): ĠMutable Map < String , ĠAny ?> Ġ= Ġmap ĊĊĠĠĠ Ġopen Ġfun Ġprop Type Mapping (): ĠMap < String , ĠType >? Ġ= Ġnull ĊĊĠĠĠ Ġopen Ġfun Ġmap Prop Value ( mappings : ĠMap < String , ĠType >, Ġprop : ĠString , Ġvalue : ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( mappings . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! mappings . containsKey ( prop )) Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconvert Type Ġ= Ġmappings [ prop ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( convert Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġconvert Value To Type ( value , Ġconvert Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġconvert Value To Type ( value : ĠAny , Ġtype : ĠType ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconverted Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// tiny ( 1 ) Ġh ikari Ġreturns Ġb oole am , Ġj async Ġreturns Ġbyte ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . BOOL Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByte Ġ-> Ġvalue . toInt () Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . INT Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByte Ġ-> Ġvalue . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . LONG Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByte Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . DOUBLE Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByte Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . FLOAT Ġ-> Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠByte Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . DATETIME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ! is ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdate Str Ġ= Ġvalue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . parse ( date Str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . parse ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠType . DATE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠLocalDate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( value . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġconverted ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġto Params ( value Handler : Ġ(( String , ĠAny ?) Ġ-> ĠAny ? )? Ġ= Ġnull ): ĠList < Any ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġdata Map (). entries ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġarray ListOf < Any ?> () ĊĠĠĠĠĠĠĠ Ġentries . forEach Ġ{ Ġprop Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Handler Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . add ( value Handler ( prop . key , Ġprop . value )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( prop . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEnum < *> Ġ-> Ġparams . add (( prop . value Ġas ĠEnum < *> ). name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġparams . add ( prop . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġparams ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġthis . tableName () Ġ+ Ġ" Ġ{ Ġ" ĊĠĠĠĠĠĠĠ Ġdata Map (). entries . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstr Ġ+= Ġ"${ it . key }-> Ġ${ it . value }, Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstr . remove Suffix (", Ġ") Ġ+ Ġ" Ġ}" ĊĠĠĠ Ġ} Ċ } Ċ