package Ġcom . foobar ust . domain . use cases . order Ċ Ċ import Ġcom . foobar ust . domain . common . UseCase Exceptions . ERROR _ USER _ NOT _ SIGNED _ IN Ċ import Ġcom . foobar ust . domain . di . Io Dispatcher Ċ import Ġcom . foobar ust . domain . models . order . Order Basic Ċ import Ġcom . foobar ust . domain . repositories . Auth Repository Ċ import Ġcom . foobar ust . domain . repositories . Order Repository Ċ import Ġcom . foobar ust . domain . states . Resource Ċ import Ġcom . foobar ust . domain . use cases . Auth State Ċ import Ġcom . foobar ust . domain . use cases . Flow UseCase Ċ import Ġcom . foobar ust . domain . utils . cancel If Active Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels . Producer Scope Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . channel Flow Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġke vin Ġon Ġ 1 / 2 9 / 2 1 Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" Get Recent Orders UseCase " Ċ Ċ class ĠGet Recent Orders UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġauth Repository : ĠAuth Repository , ĊĠĠĠ Ġprivate Ġval Ġorder Repository : ĠOrder Repository , ĊĠĠĠ Ġ@ Io Dispatcher Ġprivate Ġval Ġcoroutine Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠFlow UseCase < Unit , ĠList < Order Basic >>( coroutine Dispatcher ) Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġobserve Recent Orders Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġshared Result : ĠFlow < Resource < List < Order Basic >>> Ġ= Ġchannel Flow Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoroutine Scope Ġ= ĠCor outine Scope ( current Coroutine Context ()) ĊĊĠĠĠĠĠĠĠ Ġauth Repository . auth Profile Observable . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Ob serve Recent Orders () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAuth State . Authenticated Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" [$ TAG ]: ĠUser Ġis Ġsigned Ġin . ĠStart Ġobserve Ġrecent Ġorder Ġitems .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ob serve Recent Orders ( coroutine Scope , Ġit . data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth State . Un authenticated Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" [$ TAG ]: ĠUser Ġis Ġsigned Ġout .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . offer ( Resource . Success ( emptyList ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . offer ( Resource . Error ( ERROR _ USER _ NOT _ SIGNED _ IN )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAuth State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" [$ TAG ]: ĠLoading Ġauth Ġprofile ...") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . offer ( Resource . Loading ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( parameters : ĠUnit ): ĠFlow < Resource < List < Order Basic >>> Ġ= Ġshared Result ĊĊĠĠĠ Ġprivate Ġfun ĠsortBy Order State ( order Basics : ĠList < Order Basic >): ĠList < Order Basic > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġorder Basics . sorted By Descending Ġ{ Ġit . state . pre cedence Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProducer Scope < Resource < List < Order Basic >> >. start Ob serve Recent Orders ( ĊĠĠĠĠĠĠĠ Ġcoroutine Scope : ĠCor outine Scope , ĊĠĠĠĠĠĠĠ ĠuserId : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve Recent Orders Job Ġ= Ġcoroutine Scope . launch ( coroutine Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Repository . getActive Order Items Observable ( userId ). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" [$ TAG ]: ĠOffer ed Ġrecent Ġorder Ġitems .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . offer ( Resource . Success ( sortBy Order State ( it . data ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFailed Ġto Ġreceive Ġorder Ġitems ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" [$ TAG ]: ĠFailed Ġto Ġreceive Ġorder Ġitems : Ġ${ it . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . offer ( Resource . Error ( it . message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . offer ( Resource . Loading ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstop Ob serve Recent Orders () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" [$ TAG ]: ĠStop Ġob serving Ġrecent Ġorder Ġitems .") ĊĠĠĠĠĠĠĠ Ġobserve Recent Orders Job . cancel If Active () ĊĠĠĠ Ġ} Ċ }