package Ġcz . leader board . app . domain . board Ċ Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcz . leader board . app . data . model . User Ċ import Ġcz . leader board . app . domain . Leader board Repository Ċ import Ġcz . leader board . app . domain . common . Post Execution Thread Ċ import Ġcz . leader board . app . domain . common . Thread Executor Ċ import Ġcz . leader board . app . domain . common . UseCase Ċ import Ġio . reactivex . Flow able Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġsemantic er Ġon Ġ 1 8 . 0 6 . 2 0 1 7 . Ċ Ġ*/ Ċ class ĠAdd User UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠFirebase User , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġleader board Repository : ĠLeader board Repository , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Executor : ĠThread Executor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Execution Thread : ĠPost Execution Thread ) ĊĠĠĠ Ġ: ĠUse Case < User , ĠAdd User UseCase . Params >( thread Executor , Ġpost Execution Thread ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġbuild UseCase Observable ( params : ĠParams ): ĠFlow able < User > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġreturn Ġleader board Repository . add User ( user . uid , Ġparams . username , Ġparams . board Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġnew UserId Ġ-> Ġleader board Repository . getUser ( new UserId , Ġparams . board Id ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first Element (). to Flow able () ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠParams ( val Ġboard Id : ĠString , Ġval Ġusername : ĠString ) Ċ }