package Ġcom . foobar ust . domain . use cases . cart Ċ Ċ 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 . cart . Add User Cart Item Ċ import Ġcom . foobar ust . domain . repositories . Auth Repository Ċ import Ġcom . foobar ust . domain . repositories . Cart Repository Ċ import Ġcom . foobar ust . domain . states . Resource Ċ import Ġcom . foobar ust . domain . use cases . Flow UseCase Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġke vin Ġon Ġ 1 2 / 1 / 2 0 Ċ Ġ*/ Ċ Ċ const Ġval ĠINVALID _ SE LLER _ ERROR Ġ= Ġ" Attempt Ġto Ġadd Ġitems Ġfrom Ġmultiple Ġsell er ." Ċ Ċ class ĠAdd User Cart Item UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġauth Repository : ĠAuth Repository , ĊĠĠĠ Ġprivate Ġval Ġcart Repository : ĠCart Repository , ĊĠĠĠ Ġ@ Io Dispatcher Ġcoroutine Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠFlow UseCase < Add User Cart Item Parameters , ĠUnit >( coroutine Dispatcher ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( parameters : ĠAdd User Cart Item Parameters ): ĠFlow < Resource < Unit >> Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! auth Repository . is User Signed In ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( ERROR _ USER _ NOT _ SIGNED _ IN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthe Ġuser Ġadd Ġitem Ġfrom Ġone Ġsell er Ġonly ĊĠĠĠĠĠĠĠ Ġval Ġcart S eller Id Ġ= Ġparameters . cart S eller Id ĊĠĠĠĠĠĠĠ Ġval Ġitem S eller Id Ġ= Ġparameters . item S eller Id ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cart S eller Id Ġ!= Ġnull Ġ&& Ġcart S eller Id Ġ!= Ġitem S eller Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( INVALID _ SE LLER _ ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġid Token Ġ= Ġauth Repository . getUserId Token () ĊĊĠĠĠĠĠĠĠ Ġparameters . add User Cart Items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcart Repository . add User Cart Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Token Ġ= Ġid Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd User Cart Item Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġemit ( Resource . Success ( Unit )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠAdd User Cart Item Parameters ( ĊĠĠĠ Ġval Ġadd User Cart Items : ĠList < Add User Cart Item >, ĊĠĠĠ Ġval Ġitem S eller Id : ĠString , ĊĠĠĠ Ġval Ġcart S eller Id : ĠString ? Ġ= Ġnull Ġ// ĠNull Ġwhen Ġthere Ġis Ġno Ġitem Ġin Ġcart Ċ )