package Ġio . sun land . chain pass . service . repository Ċ Ċ import Ġio . sun land . chain pass . common . repository . Chain Entity Ċ import Ġio . sun land . chain pass . common . repository . Chain Key Entity Ċ import Ġio . sun land . chain pass . common . repository . Chain Repository Ċ import Ġio . sun land . chain pass . service . Chain Table Ċ import Ġio . sun land . chain pass . service . Database Ċ import Ġorg . jetbrains . ex posed . sql . delete Where Ċ import Ġorg . jetbrains . ex posed . sql . insert AndGet Id Ċ import Ġorg . jetbrains . ex posed . sql . select Ċ import Ġorg . jetbrains . ex posed . sql . selectAll Ċ import Ġjava . security . Secure Random Ċ import Ġjava . util .* Ċ Ċ object ĠChain Data Repository Ġ: ĠChain Repository Ġ{ ĊĠĠĠ Ġprivate Ġval Ġkeys Ġ= ĠCollections . synchronized List < Chain Key Entity >( mutable ListOf ()) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate ( chain Entity : ĠChain Entity ) Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChain Table . insert AndGet Id Ġ{ Ġstatement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement [ name ] Ġ= Ġchain Entity . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatement [ key ] Ġ= Ġchain Entity . key ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġread () Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChain Table . selectAll (). map Ġ{ Ġrecord Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChain Entity ( record [ Chain Table . id ]. value , Ġrecord [ Chain Table . name ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġread ( id : ĠInt ) Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= ĠChain Table . select Ġ{ ĠChain Table . id Ġeq Ġid Ġ}. first () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠChain Entity ( record [ Chain Table . id ]. value , Ġrecord [ Chain Table . name ], Ġrecord [ Chain Table . key ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete ( chain Key Entity : ĠChain Key Entity ) Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠDatabase . execute < Unit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChain Table . delete Where Ġ{ ĠChain Table . id Ġeq Ġchain Key Entity . id Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġkey ( id : ĠInt ) Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= Ġkeys . first OrNull Ġ{ Ġkey Ġ-> Ġkey . id Ġ== Ġid Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseed Bytes Ġ= ĠByteArray ( 1 6 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSecure Random (). next Bytes ( seed Bytes ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= ĠChain Key Entity ( id , ĠBase 6 4 . get Encoder (). encode ToString ( seed Bytes )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeys . add ( key ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġkeys . remove ( key ) ĊĊĠĠĠĠĠĠĠ Ġkey ĊĠĠĠ Ġ} Ċ } Ċ