package Ġcom . reward todo . presentation . rewards Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . reward todo . data . repo . Reward Repository Ċ import Ġcom . reward todo . data . repo . UserRepository Ċ import Ġcom . reward todo . domain . Reward Ċ import Ġcom . reward todo . domain . User Ċ import Ġcom . reward todo . global . User Manager Ċ import Ġcom . reward todo . presentation . mapper . Reward Mapper Ċ import Ġcom . reward todo . presentation . models . Reward View Ċ import Ġcom . reward todo . util . Event Ċ import Ġcom . reward todo . util . cancel If Active Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠRew ards ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Manager : ĠUser Manager , ĊĠĠĠ Ġprivate Ġval Ġuser Repo : ĠUser Repository , ĊĠĠĠ Ġprivate Ġval Ġreward Repo : ĠRew ard Repository Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġget Todo Items Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġ_ request Purchase Ġ= ĠMutable LiveData < Event < Reward >>() ĊĠĠĠ Ġval Ġon Request Purchase : ĠLive Data < Event < Reward >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ request Purchase ĊĊĠĠĠ Ġprivate Ġval Ġ_ items Ġ= ĠMutable LiveData < List < Reward View >>() ĊĠĠĠ Ġval Ġitems Ġ= Ġ_ items ĊĊĠĠĠ Ġprivate Ġval Ġ_ points Text Ġ= ĠMutable LiveData < String >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ" Rewards " ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġpoints Text : ĠLive Data < String > Ġ= Ġ_ points Text ĊĊĠĠĠ Ġvar Ġuser Ġ= ĠUser () ĊĊĠĠĠ Ġprivate Ġval Ġ_ points Ġ= ĠMutable LiveData < Int >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġ 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġpoints : ĠLive Data < Int > Ġ= Ġ_ points ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . currentUser Flow . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ForUser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate ForUser () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate Points () ĊĠĠĠĠĠĠĠ Ġget Rewards () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Points () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ points . value Ġ= Ġuser . points ĊĠĠĠĠĠĠĠ Ġ_ points Text . value Ġ= Ġ"${ user . points }" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Reward ( reward : ĠRew ard ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreward Repo . add Reward ( reward ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Rewards () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Todo Items Job ?. cancel If Active () ĊĊĠĠĠĠĠĠĠ Ġget Todo Items Job Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreward Repo . getAll Rewards ForUser ( user . id ). collect Ġ{ Ġitem List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ items . value Ġ= Ġitem List . map Ġ{ ĠRew ard Mapper . map To View ( it ) Ġ}. sorted By Ġ{ Ġit . num P urchases Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpurchase Reward ( reward : ĠRew ard ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreward . num P urchases ++ ĊĠĠĠĠĠĠĠ Ġreward Repo . update Reward ( reward ) ĊĊĠĠĠĠĠĠĠ Ġuser . points Ġ-= Ġreward . points ĊĠĠĠĠĠĠĠ Ġuser Repo . update User ( user ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Purchase ( reward : ĠRew ard ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ request Purchase . value Ġ= ĠEvent ( reward ) ĊĠĠĠ Ġ} Ċ }