package Ġcom . world sn as . domain . repo . search . keywords Ċ Ċ import Ġarrow . core . Either Ċ import Ġcom . world sn as . core . Error Holder Ċ import Ġcom . world sn as . domain . helpers . either Error Ċ import Ġcom . world sn as . domain . model . rep om odel . Keyword Repo Model Ċ import Ġcom . world sn as . domain . model . server models . Keyword Server Model Ċ import Ġcom . world sn as . domain . model . server models . Results Server Model Ċ import Ġcom . world sn as . domain . repo . search . movie . model . Search RequestParam Ċ import Ġcom . world sn as . pan ther . Mapper Ċ import Ġcom . world sn as . pan ther . R Fetcher Ċ import Ġio . reactivex . Single Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSearch Keywords Repo Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġfetch er : ĠR Fetcher < Search RequestParam , ĠResults Server Model < Keyword Server Model >>, ĊĠĠĠ Ġprivate Ġval Ġmapper : ĠMapper < Keyword Server Model , ĠKeyword Repo Model > Ċ ) Ġ: ĠSearch Keywords Repo Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġquery Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġnext Page : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġvar Ġkeywords : ĠMutable List < Keyword Repo Model > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġoverride Ġfun Ġkeywords For ( param : ĠSearch Keyword Repo Param Model ): ĠSingle < Either < Error Holder , ĠList < Keyword Repo Model >>> Ġ= ĊĠĠĠĠĠĠĠ Ġfetch er . fetch ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch RequestParam ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . query , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparam . page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). either Error Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . list . map Ġ{ Ġkeyword Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper . map ( keyword ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Ġ!= Ġparam . query Ġ|| Ġ( query Ġ== Ġparam . query Ġ&& Ġparam . page Ġ== Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeywords Ġ= Ġit . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( query Ġ== Ġparam . query Ġ&& Ġparam . page Ġ!= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeywords . addAll ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page Ġ= Ġparam . page Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġparam . query ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnext Page (): ĠSingle < Either < Error Holder , ĠList < Keyword Repo Model >>> Ġ= ĊĠĠĠĠĠĠĠ Ġkeywords For ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Keyword Repo Param Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġcached Keywords (): ĠSingle < List < Keyword Repo Model >> Ġ= ĊĠĠĠĠĠĠĠ ĠSingle . just ( keywords ) Ċ }