/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠF ab rice ĠTh il aw Ġ(@ th il aw fab ) Ċ Ġ* Ċ Ġ* Ġ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 . th il aw fab rice . inventory app . repository Ċ Ċ import ĠApi Empty Response Ċ import ĠApi ErrorResponse Ċ import ĠApiResponse Ċ import ĠApi Success Response Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . th il aw fab rice . inventory app . models . Product Ċ import Ġcom . th il aw fab rice . inventory app . models . to Product Details Ċ import Ġcom . th il aw fab rice . inventory app . repository . api . Api Controller Ċ import Ġcom . th il aw fab rice . inventory app . repository . api . Food Details Ċ import Ġcom . th il aw fab rice . inventory app . repository . api . Open Food Fact Ċ Ċ /** Ċ Ġ* Ġ ĠRepresents Ġthe Ġunique Ġsource Ġof Ġtrue Ġdata Ċ Ġ* Ġ Ġthe ĠViewModel Ġwill Ġinteract Ġwith Ġfor Ġretrieving Ġand Ġinserting Ġdata Ċ Ġ*/ Ċ class ĠRepository ( private Ġval Ġlocal DB : ĠLocal Database ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġapi Controller Ġ= ĠApi Controller () ĊĠĠĠ Ġfun Ġload Saved Products () Ġ= Ġlocal DB . products Dao (). getAll Products () ĊĠĠĠ Ġsuspend Ġfun Ġsave ( product : ĠProduct ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlocal DB . products Dao (). insert Products ( set Of ( product )) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġresolve Product Details ( code : ĠString ): ĠLive Data < Food Details ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġraw Response Ġ= Ġapi Controller . api . get Product Details ( code ) ĊĠĠĠĠĠĠĠ Ġval Ġlive Data Ġ= ĠMutable LiveData < Food Details ?> () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġapi Response Ġ= ĠApiResponse . create ( raw Response )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApi ErrorResponse < Open Food Fact > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSo Ġthere Ġwas Ġserver Ġerror Ġor Ġbad Ġrequest , Ġetc .. ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApi Empty Response < Open Food Fact > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġserver Ġreturned Ġno Ġuseful Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠApi Success Response < Open Food Fact > Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġare Ġfine ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data . post Value ( api Response . body . to Product Details ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlive Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Product ( code : ĠString ) Ġ= Ġlocal DB . products Dao (). find Products ( code ) Ċ Ċ }