/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠSn ey der ĠAng ulo Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . sn ey der . crypto tracker . data . sync Ċ Ċ import Ġcom . sn ey der . crypto tracker . data . model . Sync Status Ċ import Ġcom . sn ey der . crypto tracker . data . repository . UserRepository Ċ import Ġdebug Ċ import Ġerror Ċ import Ġshow Values Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠTransactions Synchron izer Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuser Repository : ĠUser Repository ) Ġ{ ĊĊĠĠĠ Ġfun Ġsynchronize Transactions With Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠLaunch Ġcoroutine Ġto Ġwork Ġin Ġa Ġbackground Ġthread ĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġall Ġprice Ġalerts Ġfrom Ġthe Ġlocal Ġdatabase ĊĠĠĠĠĠĠĠ Ġval Ġtransactions Ġ= Ġuser Repository . findAll Transactions (). blocking First () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġprice Ġalerts Ġwith Ġsync Status Ġpending Ġto Ġadd ĊĠĠĠĠĠĠĠ Ġtransactions . filter Ġ{ Ġit . sync Status Ġ== ĠSync Status . PENDING _ TO _ ADD Ġ}. also Ġ{ Ġit . show Values (" transactions ĠP ENDING _ TO _ ADD ") Ġ}. forEach Ġ{ Ġtransaction ToAdd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthem Ġin Ġthe Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Transaction In Server Ġ= Ġuser Repository . add Transaction In Server ( transaction ToAdd . apply Ġ{ ĠuserId Ġ= Ġuser Repository . getUserId () Ġ}). blocking Get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" add Transaction In Server Ġ= Ġ$ add Transaction In Server ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( add Transaction In Server . successful ) Ġ{ Ġ// ĠIn Ġcase Ġthe Ġresponse Ġis Ġsuccessful , Ġinsert Ġprice Ġalert Ġwith Ġstatus Ġsynchronized Ġin Ġthe ĠDB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repository . insert Transaction ( transaction ToAdd . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync Status Ġ= ĠSync Status . SYN CH RON IZED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġuser Repository . getUserId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). blocking Await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġprice Ġalerts Ġwith Ġsync Status Ġpending Ġto Ġupdate ĊĠĠĠĠĠĠĠ Ġtransactions . filter Ġ{ Ġit . sync Status Ġ== ĠSync Status . PENDING _ TO _ UPDATE Ġ}. also Ġ{ Ġit . show Values (" transactions ĠP ENDING _ TO _ UPDATE ") Ġ}. forEach Ġ{ Ġtransaction ToUpdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthem Ġin Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Transaction In Server Ġ= Ġuser Repository . update Transaction In Server ( transaction ToUpdate ). blocking Get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" update Transaction In Server Ġ= Ġ$ update Transaction In Server ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( update Transaction In Server . successful ) Ġ{ Ġ// ĠIn Ġcase Ġthe Ġresponse Ġis Ġsuccessful , Ġinsert Ġprice Ġalert Ġwith Ġstatus Ġsynchronized Ġin Ġthe ĠDB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repository . insert Transaction ( transaction ToUpdate . apply Ġ{ Ġsync Status Ġ= ĠSync Status . SYN CH RON IZED Ġ}). blocking Await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġprice Ġalerts Ġwith Ġsync Status Ġpending Ġto Ġdelete ĊĠĠĠĠĠĠĠ Ġtransactions . filter Ġ{ Ġit . sync Status Ġ== ĠSync Status . PENDING _ TO _ DELETE Ġ}. also Ġ{ Ġit . show Values (" transactions ĠP ENDING _ TO _ DELETE ") Ġ}. forEach Ġ{ Ġtransaction Pending ToDelete Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDelete Ġthem Ġin Ġserver ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelete Transaction In Server Ġ= Ġuser Repository . delete Transaction In Server ( transaction Pending ToDelete . id ). blocking Get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug (" delete Transaction In Server Ġ= Ġ$ delete Transaction In Server ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( delete Transaction In Server . successful ) Ġ{ Ġ// ĠIn Ġcase Ġthe Ġresponse Ġis Ġsuccessful , Ġdelete Ġthe Ġprice Ġalert Ġfrom Ġthe ĠDB ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Repository . delete Transaction ( transaction Pending ToDelete . id ). blocking Await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Transactions (){ ĊĠĠĠĠĠĠĠ Ġuser Repository . refresh Transactions (). blocking Await () ĊĠĠĠ Ġ} Ċ Ċ }