package Ġcom . tam im at ta fi . p izza . android . data . repository Ċ Ċ import Ġcom . tam im at ta fi . p izza . android . data . local . IP izza Local DataSource Ċ import Ġcom . tam im at ta fi . p izza . android . data . remote . IP izza Remote DataSource Ċ import Ġcom . tam im at ta fi . p izza . domain . model . P izza Ċ import Ġcom . tam im at ta fi . p izza . domain . repository . IP izza Repository Ċ import Ġio . reactivex . rx java 3 . core . Flow able Ċ import Ġio . reactivex . rx java 3 . schedul ers . Schedulers Ċ Ċ class ĠP izza Repository ( ĊĠĠĠ Ġprivate Ġval Ġlocal : ĠIP izza Local DataSource , ĊĠĠĠ Ġprivate Ġval Ġremote : ĠIP izza Remote DataSource Ċ ) Ġ: ĠIP izza Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget ( id : ĠInt ): ĠFlow able < P izza > Ġ= ĊĠĠĠĠĠĠĠ Ġlocal . get ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sync P izza ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll (): ĠFlow able < List < P izza >> Ġ= ĊĠĠĠĠĠĠĠ Ġlocal . getAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . sync P izza List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch ( query : ĠString ?): ĠFlow able < List < P izza >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Flow Ġ= Ġif Ġ( query . isNull Or Blank ()) Ġlocal . getAll () ĊĠĠĠĠĠĠĠ Ġelse Ġlocal . search ( query ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdata Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsync P izza List () Ġ= ĊĠĠĠĠĠĠĠ Ġremote . getAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable ( local :: insert All ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĊĠĠĠ Ġprivate Ġfun Ġsync P izza ( id : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġremote . get ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Comp letable ( local :: insert ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () Ċ }