package Ġcom . ser j 1 1 3 . data . repository Ċ Ċ import Ġcom . ser j 1 1 3 . data . api . Store Api Ċ import Ġcom . ser j 1 1 3 . data . api . post model . Cart Body Ċ import Ġcom . ser j 1 1 3 . data . local . Cart Product Dao Ċ import Ġcom . ser j 1 1 3 . data . local . Product Dao Ċ import Ġcom . ser j 1 1 3 . data . local . entity . Cart Product Local Ċ import Ġcom . ser j 1 1 3 . data . local . entity . to Body Ċ import Ġcom . ser j 1 1 3 . data . local . entity . to Entity Ċ import Ġcom . ser j 1 1 3 . data . local . entity . to Local Ċ import Ġcom . ser j 1 1 3 . domain . repository . Store Repository Ċ import Ġcom . ser j 1 1 3 . model . Cart Product Ċ import Ġcom . ser j 1 1 3 . model . Product Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ internal Ġclass ĠStore Repository Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġstore Api : ĠStore Api , ĊĠĠĠ Ġprivate Ġval Ġcart Product Dao : ĠCart Product Dao , ĊĠĠĠ Ġprivate Ġval Ġproduct Dao : ĠProduct Dao Ċ ) Ġ: ĠStore Repository Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Product List (): ĠList < Product > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġstore Api . get Product List () ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠlistOf < Product >() ĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ Ġproduct Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Dao . insert All ( product . to Local ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Category List (): ĠList < String > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġstore Api . get Category List () ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= ĠlistOf < String >() ĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġadd Product To Cart ( productId : ĠInt , Ġquantity : ĠInt ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct Local Ġ= Ġproduct Dao . get Product ById ( productId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart ProductId Ġ= Ġcart Product Dao . get Cart By ProductId ( productId )?. id Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( product Local . title . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cart ProductId Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Product Dao . update Cart Product ( cart ProductId , Ġquantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart Product Local Ġ= ĠCart Product Local ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠproductId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquantity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Local . category , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Local . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Local . image , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Local . price , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Local . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Product Dao . insert All ( cart Product Local ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġremove Product From Cart ( productId : ĠInt ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart Product Ġ= Ġcart Product Dao . get Cart By ProductId ( productId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcart Product ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Product Dao . delete Cart Product ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Cart (): ĠList < Cart Product > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġcart Product Dao . get Cart () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġresponse . to Entity () ĊĠĠĠĠĠĠĠ Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcheckout Cart (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart Product Body List Ġ= Ġcart Product Dao . get Cart (). to Body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Date Ġ= ĠCalendar . getInstance (). time . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcart Body Ġ= ĠCart Body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Product Body List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġstore Api . checkout Cart ( cart Body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful Ġ&& Ġresponse . body () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcart Product Dao . delete All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }