package Ġhu . sz to mek . wh eres my buddy . domain . use case čĊč Ċ import Ġhu . sz to mek . wh eres my buddy . domain . ID at as ource č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . action . Action č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . common . App Schedulers č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . common . Result č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . model .* č Ċ import Ġio . reactivex . Observable č Ċ import Ġio . reactivex . Single č Ċ import Ġio . reactivex . functions . Bi Function č Ċ import Ġjavax . inject . Inject čĊč Ċ class ĠSearch UseCase Ġ@ Inject Ġconstructor ( private Ġval Ġapp Schedulers : ĠApp Schedulers , Ġprivate Ġval Ġdatasource : ĠID at as ource ) Ġ{ čĊčĊĠĠĠ Ġ// ĠTODO Ġoptimize Ġ: | čĊĠĠĠ Ġfun Ġexecute ( action : ĠAction . Search Action ): ĠSingle < Result > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġdb Models Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action . last Id Ġ!= Ġnull Ġ&& Ġ! action . from Last Id ) Ġdatasource . search All Until ( action . key Word , Ġaction . last Id ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġdatasource . search From ( action . key Word , Ġaction . last Id , Ġaction . limit Ġ?: Ġ 1 0 ) čĊĠĠĠĠĠĠĠ Ġval Ġmapped Users Observable Ġ= Ġdb Models . to Observable () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Iterable Ġ{ Ġit Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġactive UserId Observable Ġ= Ġdatasource . getActive User () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . id Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġfake Connection Request Ġ= ĠConnection Request Model ( null , Ġnull , Ġnull , Ġnull ) čĊĠĠĠĠĠĠĠ Ġval Ġfake Connection Ġ= ĠConnection Model ( null , Ġnull , Ġnull , Ġnull ) čĊĠĠĠĠĠĠĠ Ġreturn Ġmapped Users Observable čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Latest From ( active UserId Observable , ĠBi Function Ġ{ Ġmodel : ĠUser Model , Ġid : ĠString ? Ġ-> ĠPair ( model , Ġid ) Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( app Schedulers . io ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . zip ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatasource . getConnection Request Between ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first . id !! , Ġ// Ġif Ġthere Ġuser Model . id Ġis Ġnull , Ġthat Ġmeans Ġi Ġdid Ġsomething Ġwrong Ġduring Ġconversion Ġ-> Ġjust Ġdie čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second !! Ġ// Ġif Ġthere Ġis Ġno Ġactive Ġuser , Ġthere 's Ġno Ġpoint Ġto Ġcontinue Ġthis Ġ-> Ġjust Ġdie čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). default If Empty ( fake Connection Request ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatasource . getConnection Between ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second !! , Ġ// Ġif Ġthere Ġuser Model . id Ġis Ġnull , Ġthat Ġmeans Ġi Ġdid Ġsomething Ġwrong Ġduring Ġconversion Ġ-> Ġjust Ġdie čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first . id !! Ġ// Ġif Ġthere Ġis Ġno Ġactive Ġuser , Ġthere 's Ġno Ġpoint Ġto Ġcontinue Ġthis Ġ-> Ġjust Ġdie čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). default If Empty ( fake Connection ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function Ġ{ Ġconnection Request : ĠConnection Request Model , Ġconnection : ĠConnection Model Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Result Item Model ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connection Ġ=== Ġfake Connection ) Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġconnection , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( connection Request Ġ=== Ġfake Connection Request ) Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġconnection Request čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( app Schedulers . io ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sorted ({ Ġitem 1 , Ġitem 2 Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( item 1 . user . displayName Ġ?: Ġ" N / A "). compareTo ( item 2 . user . displayName Ġ?: Ġ" N / A ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠResult . complete ( action , ĠSearch Result Model ( it )) Ġ} čĊĠĠĠ Ġ} čĊč Ċ }