package Ġio . horizontal systems . market kit . storage Ċ Ċ import Ġandroidx . sqlite . db . Simple SQLite Query Ċ import Ġio . horizontal systems . market kit . models .* Ċ Ċ class ĠCoin Storage ( market Database : ĠMarket Database ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcoin Dao Ġ= Ġmarket Database . coin Dao () ĊĊĠĠĠ Ġfun Ġcoin ( coin Uid : ĠString ): ĠCoin ? Ġ= ĊĠĠĠĠĠĠĠ Ġcoin Dao . getC oin ( coin Uid ) ĊĊĠĠĠ Ġfun Ġcoins ( coin U ids : ĠList < String >): ĠList < Coin > Ġ= ĊĠĠĠĠĠĠĠ Ġcoin Dao . getC oin s ( coin U ids ) ĊĊĠĠĠ Ġfun Ġfull Coins ( filter : ĠString , Ġlimit : ĠInt ): ĠList < Full Coin > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM ĠCoin ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE Ġname ĠLIKE Ġ'% $ filter %' ĠOR Ġcode ĠLIKE Ġ'% $ filter %' ĊĠĠĠĠĠĠĠĠĠĠĠ ĠORDER ĠBY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCASE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN Ġ` coin `.` code ` ĠLIKE Ġ'$ filter ' ĠTHEN Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN Ġ` coin `.` code ` ĠLIKE Ġ'$ filter %' ĠTHEN Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN Ġ` coin `.` name ` ĠLIKE Ġ'$ filter %' ĠTHEN Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠELSE Ġ 4 ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCASE ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWHEN Ġ` coin `.` market Cap Rank ` ĠIS ĠNULL ĠTHEN Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠELSE Ġ 0 ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` coin `.` market Cap Rank ` ĠASC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` coin `.` name ` ĠASC ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLIMIT Ġ$ limit ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcoin Dao . getFull Coins ( Simple SQLite Query ( sql )). map Ġ{ Ġit . full Coin Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfull Coin ( uid : ĠString ): ĠFull Coin ? Ġ= ĊĠĠĠĠĠĠĠ Ġcoin Dao . getFull Coin ( uid )?. full Coin ĊĊĠĠĠ Ġfun Ġfull Coins ( uid s : ĠList < String >): ĠList < Full Coin > Ġ= ĊĠĠĠĠĠĠĠ Ġcoin Dao . getFull Coins ( uid s ). map Ġ{ Ġit . full Coin Ġ} ĊĊĠĠĠ Ġfun ĠgetToken ( query : ĠToken Query ): ĠToken ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" SELECT Ġ* ĠFROM ĠToken Entity ĠWHERE Ġ${ filter By Token Query ( query )} ĠLIMIT Ġ 1 " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcoin Dao . getToken ( Simple SQLite Query ( sql )) ?. token ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tokens ( queries : ĠList < Token Query >): ĠList < Token > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueries Str Ġ= Ġqueries . toSet (). toList (). map Ġ{ Ġfilter By Token Query ( it ) Ġ}. join ToString (" ĠOR Ġ") ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" SELECT Ġ* ĠFROM ĠToken Entity ĠWHERE Ġ$ queries Str " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcoin Dao . get Tokens ( Simple SQLite Query ( sql )). map Ġ{ Ġit . token Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tokens ( reference : ĠString ): ĠList < Token > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġqueries Str Ġ= Ġ"` Token Entity `.` reference ` ĠLIKE Ġ'% $ reference '" ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ" SELECT Ġ* ĠFROM ĠToken Entity ĠWHERE Ġ$ queries Str " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcoin Dao . get Tokens ( Simple SQLite Query ( sql )). map Ġ{ Ġit . token Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Tokens ( blockchain Type : ĠBlock chain Type , Ġfilter : ĠString , Ġlimit : ĠInt ): ĠList < Token > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsql Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ* ĠFROM ĠToken Entity ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWHERE ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` Token Entity `.` blockchain Uid ` Ġ= Ġ'${ blockchain Type . uid }' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAND Ġcoin Uid ĠIN Ġ( SELECT Ġuid ĠFROM ĠCoin ĠWHERE Ġname ĠLIKE Ġ'% $ filter %' ĠOR Ġcode ĠLIKE Ġ'% $ filter % ') ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLIMIT Ġ$ limit ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcoin Dao . get Tokens ( Simple SQLite Query ( sql )). map Ġ{ Ġit . token Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Blockchain ( uid : ĠString ): ĠBlock chain ? Ġ= ĊĠĠĠĠĠĠĠ Ġcoin Dao . getBlock chain ( uid )?. blockchain ĊĊĠĠĠ Ġfun Ġget Block chains ( uid s : ĠList < String >): ĠList < Blockchain > Ġ= ĊĠĠĠĠĠĠĠ Ġcoin Dao . getBlock chains ( uid s ). map Ġ{ Ġit . blockchain Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfilter By Token Query ( query : ĠToken Query ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( type , Ġreference ) Ġ= Ġquery . token Type . values ĊĊĠĠĠĠĠĠĠ Ġval Ġconditions Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"` Token Entity `.` blockchain Uid ` Ġ= Ġ'${ query . blockchain Type . uid }' ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"` Token Entity `.` type ` Ġ= Ġ'$ type '" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reference Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconditions . add (" ` Token Entity `.` reference ` ĠLIKE Ġ'% $ reference '") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġconditions . join ToString (" ĠAND Ġ", Ġ" (", Ġ") ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate ( coins : ĠList < Coin >, Ġblockchain Entities : ĠList < Blockchain Entity >, Ġtoken Entities : ĠList < Token Entity >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcoin Dao . delete All Coins () ĊĠĠĠĠĠĠĠ Ġcoin Dao . delete All Block chains () ĊĠĠĠĠĠĠĠ Ġcoin Dao . delete All Tokens () ĊĠĠĠĠĠĠĠ Ġcoins . forEach Ġ{ Ġcoin Dao . insert ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġblockchain Entities . forEach Ġ{ Ġcoin Dao . insert ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġtoken Entities . forEach Ġ{ Ġcoin Dao . insert ( it ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ