package Ġcom . jam ie ad k ins . gw ent . data . deck . repository Ċ Ċ import Ġcom . jam ie ad k ins . gw ent . card . data . Faction Mapper Ċ import Ġcom . jam ie ad k ins . gw ent . database . Gw ent Database Ċ import Ġcom . jam ie ad k ins . gw ent . database . entity . Deck Card Entity Ċ import Ġcom . jam ie ad k ins . gw ent . database . entity . Deck Entity Ċ import Ġcom . jam ie ad k ins . gw ent . database . entity . Deck With Cards Entity Ċ import Ġcom . jam ie ad k ins . gw ent . domain . Gw ent Faction Ċ import Ġcom . jam ie ad k ins . gw ent . domain . card . model . Gw ent Card Ċ import Ġcom . jam ie ad k ins . gw ent . domain . card . repository . Card Repository Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . Deck Constants . BASE _ PROV ISION _ ALLOW ANCE Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . model . Gw ent Deck Ċ import Ġcom . jam ie ad k ins . gw ent . domain . deck . repository . Deck Repository Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠUser Deck Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġdatabase : ĠG w ent Database , ĊĠĠĠ Ġprivate Ġval Ġf action Mapper : ĠF action Mapper , ĊĠĠĠ Ġprivate Ġval Ġcard Repository : ĠCard Repository ) Ġ: ĠDeck Repository Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget De cks (): ĠObservable < List < Gw ent Deck >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdatabase . deck Dao (). get De cks () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeck Ġ= ĠDeck With Cards Entity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . deck Ġ= Ġit . deck ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . cards Ġ= Ġit . cards . filter Ġ{ Ġit . count Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeck ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ Ġde cks Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . from Iterable ( de cks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Single Ġ{ Ġdeck With Cards Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle . zip ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Repository . get Card ( deck With Cards . deck . leader Id ). first Or Error (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Repository . get Cards ( deck With Cards . cards . map Ġ{ Ġit . card Id Ġ}). first Or Error (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġleader : ĠG w ent Card , Ġcards : ĠList < Gw ent Card > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Gw ent Deck ( deck With Cards , Ġleader , Ġcards ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Deck ( deck Id : ĠString ): ĠObservable < Gw ent Deck > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdatabase . deck Dao (). get Deck ( deck Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeck Ġ= ĠDeck With Cards Entity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . deck Ġ= Ġit . deck ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . cards Ġ= Ġit . cards . filter Ġ{ Ġit . count Ġ> Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdeck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. switch Map Ġ{ Ġdeck With Cards Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Repository . get Card ( deck With Cards . deck . leader Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcard Repository . get Cards ( deck With Cards . cards . map Ġ{ Ġit . card Id Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġleader : ĠG w ent Card , Ġcards : ĠList < Gw ent Card > Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Gw ent Deck ( deck With Cards , Ġleader , Ġcards ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Deck Once ( deck Id : ĠString ): ĠSingle < Gw ent Deck > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Deck ( deck Id ). first Or Error () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate New Deck ( name : ĠString , Ġf action : ĠG w ent Faction ): ĠSingle < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSingle . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Leader Id Ġ= Ġwhen Ġ( faction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . NOR THER N _ REAL MS Ġ-> Ġ" 2 0 0 1 6 8 " Ġ// ĠFol test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . MON STER Ġ-> Ġ" 1 3 1 1 0 1 " Ġ// ĠE red in ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . SK ELL IG E Ġ-> Ġ" 2 0 0 1 6 0 " Ġ// ĠCr ach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . SCO I ATA EL Ġ-> Ġ" 2 0 1 5 8 9 " Ġ// ĠFil av and rel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . NIL F GA ARD Ġ-> Ġ" 2 0 0 1 6 2 " Ġ// ĠEm hy r ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . SY ND ICATE Ġ-> Ġ" 2 0 2 3 7 3 " Ġ// ĠG ud run ĠB jor ns dot t ir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Un re cogn ised ĠF action Ġ$ faction ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeck Ġ= ĠDeck Entity ( name , Ġf action To Faction Id ( faction ), Ġdefault Leader Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . deck Dao (). insert Deck ( deck ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Card Count ( deck Id : ĠString , Ġcard Id : ĠString , Ġcount : ĠInt ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . deck Card Dao (). insert ( Deck Card Entity ( deck Id , Ġcard Id , Ġcount )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Leader ( deck Id : ĠString , Ġleader Id : ĠString ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . deck Dao (). change Deck Leader ( deck Id , Ġleader Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrename Deck ( deck Id : ĠString , ĠnewName : ĠString ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . deck Dao (). change Deck Name ( deck Id , ĠnewName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdelete Deck ( deck Id : ĠString ): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠComp letable . from Callable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . deck Dao (). delete Deck ( deck Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Deck Faction ( deck Id : ĠString ): ĠSingle < Gw ent Faction > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdatabase . deck Dao (). get Deck Once ( deck Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġf action Mapper . map ( it . deck . faction Id ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġf action To Faction Id ( faction : ĠG w ent Faction ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( faction ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . MON STER Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . MON ST ERS _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . NOR THER N _ REAL MS Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . NOR THER N _ REAL MS _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . SCO I ATA EL Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . SCO I ATA EL _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . SK ELL IG E Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . SK ELL IG E _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . NIL F GA ARD Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . NIL F GA ARD _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . NE UT R AL Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . NE UT R AL _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG w ent Faction . SY ND ICATE Ġ-> Ġcom . jam ie ad k ins . gw ent . card . data . model . Faction . SY ND ICATE _ ID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠException (" Faction Ġnot Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Gw ent Deck ( deck : ĠDeck With Cards Entity , Ġleader : ĠG w ent Card , Ġcards : ĠList < Gw ent Card >): ĠG w ent Deck Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠG w ent Deck ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . deck . id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . deck . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf action Mapper . map ( deck . deck . faction Id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . deck . created , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcards . map Ġ{ ĠPair ( it . id , Ġit ) Ġ}. toMap (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeck . cards ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠPair ( it . card Id , Ġit . count ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toMap (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBASE _ PROV ISION _ ALLOW ANCE Ġ+ Ġleader . extra Pro visions ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }