package Ġcom . h oly gun ner . discover _ me als . repository Ċ Ċ import Ġandroid . R . id Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġcom . h oly gun ner . discover _ me als . models . Ingredient Ċ import Ġcom . h oly gun ner . discover _ me als . models . Me al Ċ import Ġcom . h oly gun ner . discover _ me als . models . User Selection Ċ import Ġio . realm . Realm Ċ import Ġio . realm . Realm Configuration Ċ import Ġio . realm . Realm Query Ċ import Ġio . realm . Realm Results Ċ import Ġio . realm . kotlin . createObject Ċ import Ġio . realm . kotlin . execute Transaction Await Ċ import Ġio . realm . kotlin . to Flow Ċ import Ġio . realm . kotlin . where Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠDb Wrapper Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġval Ġrealm : ĠRealm Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġstore User Selection ( user Selection : ĠUser Selection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( user Selection . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( user Selection ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetUser Selection (): ĠUser Selection Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . where ( User Selection :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Filled Ing redients (): ĠList < Ingredient > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. where < Ingredient >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" is Fill ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcopy OrUpdate Me al 2 ( meal : ĠMe al , Ġis Fav : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( meal ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcopy OrUpdate Me al ( meal Id : ĠInt , Ġis Fav : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstored Me al : ĠMe al ? Ġ= Ġrealm . where ( Me al :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" id ", Ġme al Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠ Ġstored Me al ?. load () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stored Me al Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġrealm . copyFrom Realm ( stored Me al ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy . is Fav Ġ= Ġis Fav ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( copy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcopy OrUpdate Me al ( meal : ĠMe al , Ġis Fav : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstored Me al : ĠMe al ? Ġ= Ġrealm . where ( Me al :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" id ", Ġme al . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst () ĊĠĠĠĠĠĠĠ Ġstored Me al ?. load () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( stored Me al Ġ!= Ġnull Ġ&& Ġme al . isValid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= Ġrealm . copyFrom Realm ( stored Me al ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy . is Fav Ġ= Ġis Fav ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( copy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġme al . is Fav Ġ= Ġis Fav ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( meal ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġstore In gr sWith Associated Me als ( ingredient : ĠIng redient ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( ingredient ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Ing redients (): ĠLive Data < List < Ingredient >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . where ( Ingredient :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġemit ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Me al LD ( id : ĠInt ): ĠLive Data < List < Me al >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . where < Me al >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" id ", Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġemit ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fav Me als LD (): ĠLive Data < List < Me al >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . where < Me al >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" is Fav ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġemit ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġfun ĠgetAll Ing redients Async (): ĠRealm Results < Ingredient > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . where ( Ingredient :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll F etched Ing redients Async (): ĠRealm Results < Ingredient > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . where < Ingredient >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" is F etched ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Me al Async ( id : ĠInt ): ĠMe al Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . where < Me al >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" id ", Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findFirst Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġstore Me als ( me als : ĠMutable List < Me al >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( me als ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcopy Stored Me al ( meal : ĠMe al ) Ġ: ĠMe al Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . copyFrom Realm ( meal ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġup d Stored Me al ( meal : ĠMe al ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstored Ġ= Ġrealm . copyFrom Realm ( meal ) ĊĠĠĠĠĠĠĠ Ġrealm . execute Transaction Await Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . insert OrUpdate ( stored ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠgetAll Me als Async (): ĠList < Me al > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . where ( Me al :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetAll Me als (): ĠLive Data < List < Me al >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . where ( Me al :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġemit ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fav Me als (): ĠLive Data < List < Me al >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrealm . where < Me al >(). equalTo (" is Fav ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ Ġemit ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Fav Me als Async (): ĠList < Me al > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrealm . where < Me al >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. equalTo (" is Fav ", Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findAll Async () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Stored Fav Me als (): ĠRealm Query < Me al > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfav Me als Ġ= Ġrealm . where ( Me al :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfav Me als ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Realm Instance (): ĠRealm Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠRealm . getDefaultInstance () ĊĠĠĠ Ġ} Ċ }