package Ġcom . che ise _ proj . e _ commerce . ui . product Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . che ise _ proj . e _ commerce . data . db . entity . Cart Entity Ċ import Ġcom . che ise _ proj . e _ commerce . data . db . entity . Favorite Entity Ċ import Ġcom . che ise _ proj . e _ commerce . data . repository . IC art Repository Ċ import Ġcom . che ise _ proj . e _ commerce . data . repository . IF avorite Repository Ċ import Ġcom . che ise _ proj . e _ commerce . data . repository . I Product Repository Ċ import Ġcom . che ise _ proj . e _ commerce . di . IO Dispatcher Ċ import Ġcom . che ise _ proj . e _ commerce . extension . onError Ċ import Ġcom . che ise _ proj . e _ commerce . extension . on Success Ċ import Ġcom . che ise _ proj . e _ commerce . model . Category Ċ import Ġcom . che ise _ proj . e _ commerce . model . Product Ċ import Ġcom . che ise _ proj . e _ commerce . ui . Base ViewModel Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠProduct ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġproduct Repository : ĠI Product Repository , ĊĠĠĠ Ġprivate Ġval Ġfavorite Repository : ĠIF avorite Repository , ĊĠĠĠ Ġprivate Ġval Ġcart Repository : ĠI Cart Repository , ĊĠĠĠ Ġ@ IO Dispatcher Ġprivate Ġval Ġdispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĊĠĠĠ ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ product Category : ĠMutable LiveData < List < Category >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġ_ product : ĠMutable LiveData < Product > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġ_ products : ĠMutable LiveData < List < Product >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġval Ġproduct Category : ĠLive Data < List < Category >> Ġ= Ġ_ product Category ĊĠĠĠ Ġval Ġproduct : ĠLive Data < Product > Ġ= Ġ_ product ĊĠĠĠ Ġval Ġproducts : ĠLive Data < List < Product >> Ġ= Ġ_ products ĊĊĊĠĠĠ Ġfun Ġget Product ( identifier : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Product ( identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġproduct Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" product : Ġ$ product ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ product . post Value ( product ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. onError Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" error : Ġ${ error . message }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error Msg . post Value ( error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget May Like Products () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Repository ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Products () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġproducts Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" product : Ġ$ products ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselect Ġ= Ġproducts . size Ġ/ Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnewData Ġ= Ġproducts . take ( select ). sh uffled () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ products . post Value ( new Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. onError Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" error : Ġ${ error . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error Msg . post Value ( error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Product Categories () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Repository . get Product Categories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġcategory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" category : Ġ$ category ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ product Category . post Value ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" error : Ġ${ error . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error Msg . post Value ( error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Categories () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Repository . get Product Categories () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġcategory Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" category : Ġ$ category ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ product Category . post Value ( category ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . i (" error : Ġ${ error . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ loading State . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error Msg . post Value ( error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠaddTo Favorite ( identifier : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfavorite Entity Ġ= ĠF avorite Entity () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Entity . productId Ġ= Ġidentifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfavorite Repository . add Favorite ( favorite Entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠaddTo Cart ( cart Entity : ĠCart Entity ){ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcart Repository . addTo Cart ( cart Entity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }