package Ġcom . ki wi . data . di Ċ Ċ import Ġandroid . app . Application Ċ import Ġcom . dropbox . android . external . store 4 . Fetcher Ċ import Ġcom . dropbox . android . external . store 4 . Source Of Truth Ċ import Ġcom . dropbox . android . external . store 4 . Store Ċ import Ġcom . dropbox . android . external . store 4 . Store Builder Ċ import Ġcom . ki wi . data . Data Json Parser Ċ import Ġcom . ki wi . data . api . C ock tail Api Ċ import Ġcom . ki wi . data . db . Category Dao Ċ import Ġcom . ki wi . data . db . C ock tail Dao Ċ import Ġcom . ki wi . data . db . Ingredient Dao Ċ import Ġcom . ki wi . data . entities . Base Li qu or Ċ import Ġcom . ki wi . data . entities . Category Entity Ċ import Ġcom . ki wi . data . entities . Full Dr ink Entity Ċ import Ġcom . ki wi . data . entities . Full Ingredient Entity Ċ import Ġcom . ki wi . data . entities . IB AC ock tail Ċ import Ġcom . ki wi . data . entities . Simple Dr ink Dto Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġdagger . h ilt . Install In Ċ import Ġdagger . h ilt . components . Singleton Component Ċ import Ġjavax . inject . Named Ċ import Ġjavax . inject . Singleton Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġok io . buffer Ċ import Ġok io . source Ċ Ċ @ Install In ( Singleton Component :: class ) Ċ @ Module Ċ object ĠStore Module Ġ{ ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide C ock tail Store ( ĊĠĠĠĠĠĠĠ Ġc ock tail Dao : ĠC ock tail Dao , ĊĠĠĠĠĠĠĠ Ġc ock tail Api : ĠC ock tail Api , ĊĠĠĠĠĠĠĠ Ġ@ Io Dispatcher Ġio Dispatcher : ĠCor outine Dispatcher , ĊĠĠĠ Ġ): ĠStore < String , ĠFull Dr ink Entity > Ġ= ĠStore Builder . from ( ĊĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ Ġid : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc ock tail Api . lookup Full C ock tail Details ById ( id ). dr inks . first () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġsource Of Truth Ġ= ĠSource Of Truth . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnon Flow Reader Ġ= Ġ{ Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ Ġc ock tail Dao . getC ock tail ById ( id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġ_, Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ Ġc ock tail Dao . insert C ock t ails ( data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Ingredient Store ( ĊĠĠĠĠĠĠĠ Ġingredient Dao : ĠIng redient Dao , ĊĠĠĠĠĠĠĠ Ġc ock tail Api : ĠC ock tail Api , ĊĠĠĠĠĠĠĠ Ġ@ Io Dispatcher Ġio Dispatcher : ĠCor outine Dispatcher , ĊĠĠĠ Ġ): ĠStore < String , ĠFull Ingredient Entity > Ġ= ĊĠĠĠĠĠĠĠ ĠStore Builder . from < String , ĠFull Ingredient Entity , ĠFull Ingredient Entity >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ock tail Api . search Ingredient ByName ( name ). ingredients . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Of Truth Ġ= ĠSource Of Truth . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon Flow Reader Ġ= Ġ{ Ġname Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ Ġingredient Dao . get Ingredient ByName ( name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġ_, Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ Ġingredient Dao . insert Ing redients ( data ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Category Store ( ĊĠĠĠĠĠĠĠ Ġcategory Dao : ĠCategory Dao , ĊĠĠĠĠĠĠĠ Ġc ock tail Api : ĠC ock tail Api , ĊĠĠĠĠĠĠĠ Ġ@ Io Dispatcher Ġio Dispatcher : ĠCor outine Dispatcher , ĊĠĠĠ Ġ): ĠStore < Unit , ĠList < Category Entity >> Ġ= ĊĠĠĠĠĠĠĠ ĠStore Builder . from < Unit , ĠList < Category Entity >, ĠList < Category Entity >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ock tail Api . list Categories (). dr inks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Of Truth Ġ= ĠSource Of Truth . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon Flow Reader Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Dao . getAll C ock tail Category (). if Empty Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġ_, Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Dao . insert Categories (* data . to Typed Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Base Li qu ors Store ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠ Ġ): ĠStore < Unit , ĠList < Base Li qu or >> Ġ= ĠStore Builder . from < Unit , ĠList < Base Li qu or >>( ĊĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . assets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. open ( BASE _ LI QU ORS _ FILENAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĠData Json Parser . parse Base Li qu or Data ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide IB AC ock t ails Store ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication , ĊĠĠĠ Ġ): ĠStore < Unit , ĠList < IB AC ock tail >> Ġ= ĠStore Builder . from < Unit , ĠList < IB AC ock tail >>( ĊĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . assets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. open ( IB A _ CO CK TAIL S _ LI QU ORS _ FILENAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. source () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. buffer () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ ĠData Json Parser . parse IB AC ock tail Data ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Named (" Search By Ingredient ") ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Search C ock tail By Ingredient Store ( ĊĠĠĠĠĠĠĠ Ġc ock tail Api : ĠC ock tail Api , ĊĠĠĠ Ġ): ĠStore < String , ĠList < Simple Dr ink Dto >> Ġ= ĊĠĠĠĠĠĠĠ ĠStore Builder . from < String , ĠList < Simple Dr ink Dto >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ock tail Api . search C ock tail By Ingredient ( it ). dr inks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Named (" Filter By Category ") ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Filter By Category Store ( ĊĠĠĠĠĠĠĠ Ġc ock tail Api : ĠC ock tail Api , ĊĠĠĠ Ġ): ĠStore < String , ĠList < Simple Dr ink Dto >> Ġ= ĊĠĠĠĠĠĠĠ ĠStore Builder . from < String , ĠList < Simple Dr ink Dto >>( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ock tail Api . filter By Category ( it ). dr inks ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ). build () Ċ } Ċ Ċ private Ġconst Ġval ĠBASE _ LI QU ORS _ FILENAME Ġ= Ġ" base _ li qu ors . json " Ċ private Ġconst Ġval ĠI BA _ CO CK TAIL S _ LI QU ORS _ FILENAME Ġ= Ġ" iba _ cock t ails . json " Ċ