package Ġdev . o log . bas il . data Ċ Ċ import Ġdev . o log . bas il . core . Recipe Ċ import Ġdev . o log . bas il . core . Recipe Gateway Ċ import Ġdev . o log . bas il . shared . d agger . qual ifier . Local Ċ import Ġdev . o log . bas il . shared . d agger . qual ifier . Remote Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ internal Ġclass ĠRecipe Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġ@ Local Ġprivate Ġval Ġlocal : ĠRecipe Gateway , ĊĠĠĠ Ġ@ Remote Ġprivate Ġval Ġservice : ĠRecipe Gateway Ċ ) Ġ: ĠRecipe Gateway Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll (): ĠList < Recipe > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcached Ġ= Ġlocal . getAll () ĊĠĠĠĠĠĠĠ Ġif Ġ( cached . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= Ġservice . getAll () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal . insert Group ( cached ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġcached ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget ById ( id : ĠInt ): ĠRecipe ? Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcached Ġ= Ġlocal . getById ( id ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcached Ġ= Ġservice . getById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cached Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal . insert ( cached ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġcached ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert ( recipe : ĠRecipe ) Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . insert ( recipe ) ĊĠĠĠĠĠĠĠ Ġlocal . insert ( recipe ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Group ( recipes : ĠList < Recipe >) Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . insert Group ( recipes ) ĊĠĠĠĠĠĠĠ Ġlocal . insert Group ( recipes ) ĊĠĠĠ Ġ} Ċ }