package Ġru . a as mc . pet finder . common . data Ċ Ċ import Ġio . reactivex . Back pressure Strategy Ċ import Ġio . reactivex . Flow able Ċ import Ġio . reactivex . Observable Ċ import Ġorg . th reet en . bp . LocalDateTime Ċ import Ġru . a as mc . pet finder . common . domain . model . animal . A do ption Status Ċ import Ġru . a as mc . pet finder . common . domain . model . animal . Animal Ċ import Ġru . a as mc . pet finder . common . domain . model . animal . Animal With Details Ċ import Ġru . a as mc . pet finder . common . domain . model . animal . Media Ċ import Ġru . a as mc . pet finder . common . domain . model . animal . details .* Ċ import Ġru . a as mc . pet finder . common . domain . model . organization . Organization Ċ import Ġru . a as mc . pet finder . common . domain . model . pagination . Pag inated Animal s Ċ import Ġru . a as mc . pet finder . common . domain . model . pagination . Pagination Ċ import Ġru . a as mc . pet finder . common . domain . model . search . Search Parameters Ċ import Ġru . a as mc . pet finder . common . domain . model . search . SearchResults Ċ import Ġru . a as mc . pet finder . common . domain . repositories . Animal Repository Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠFake Repository Ġ@ Inject Ġconstructor () Ġ: ĠAnimal Repository Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġorganization Ġ= ĠOrganization ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ" 7 9 ", ĊĠĠĠĠĠĠĠ ĠOrganization . Contact ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphone Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOrganization . Address ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress 1 Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress 2 Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcity Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost code Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġdistance Ġ= Ġ 5 0 f ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġhealth Details Ġ= ĠHealth Details ( ĊĠĠĠĠĠĠĠ Ġis Decl aw ed Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġis Sp ay ed Or Ne uter ed Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġhas Special Needs Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġsh ots Are Current Ġ= Ġtrue ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġhabit at Adapt ation Ġ= ĠH abit at Adapt ation ( ĊĠĠĠĠĠĠĠ Ġgood With C ats Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġgood With Children Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġgood With Dog s Ġ= Ġtrue ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġlocal Animal Details Ġ= ĠDetails ( ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" S ings Ġoper a ", ĊĠĠĠĠĠĠĠ Ġage Ġ= ĠAge . B AB Y , ĊĠĠĠĠĠĠĠ Ġspecies Ġ= Ġ" Dog ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= ĠB reed ( primary Ġ= Ġ" B ull dog ", Ġsecondary Ġ= Ġ""), ĊĠĠĠĠĠĠĠ Ġcolors Ġ= ĠColors ( primary Ġ= Ġ" White ", Ġsecondary Ġ= Ġ" Black ", Ġt ert i ary Ġ= Ġ""), ĊĠĠĠĠĠĠĠ Ġgender Ġ= ĠGender . M ALE , ĊĠĠĠĠĠĠĠ Ġsize Ġ= ĠSize . MEDIUM , ĊĠĠĠĠĠĠĠ Ġco at Ġ= ĠCo at . SHORT , ĊĠĠĠĠĠĠĠ Ġhealth Details Ġ= Ġhealth Details , ĊĠĠĠĠĠĠĠ Ġhabit at Adapt ation Ġ= Ġhabit at Adapt ation , ĊĠĠĠĠĠĠĠ Ġorganization Ġ= Ġorganization ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġlocal Animal Ġ= ĠAnimal With Details ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Jo e ", ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" Dog ", ĊĠĠĠĠĠĠĠ Ġdetails Ġ= Ġlocal Animal Details , ĊĠĠĠĠĠĠĠ Ġmedia Ġ= ĠMedia ( listOf (), ĠlistOf ()), ĊĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" C ute "), ĊĠĠĠĠĠĠĠ Ġa do ption Status Ġ= ĠA do ption Status . AD OP TABLE , ĊĠĠĠĠĠĠĠ Ġpublished At Ġ= ĠLocalDateTime . now () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġremote Animal Details Ġ= ĠDetails ( ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" L ov es Ġcro chet ", ĊĠĠĠĠĠĠĠ Ġage Ġ= ĠAge . S EN IOR , ĊĠĠĠĠĠĠĠ Ġspecies Ġ= Ġ" Dog ", ĊĠĠĠĠĠĠĠ Ġb reed Ġ= ĠB reed ( primary Ġ= Ġ" Ger man ĠShe ph erd ", Ġsecondary Ġ= Ġ""), ĊĠĠĠĠĠĠĠ Ġcolors Ġ= ĠColors ( primary Ġ= Ġ" Black ", Ġsecondary Ġ= Ġ" Orange ", Ġt ert i ary Ġ= Ġ" Yellow "), ĊĠĠĠĠĠĠĠ Ġgender Ġ= ĠGender . F EM ALE , ĊĠĠĠĠĠĠĠ Ġsize Ġ= ĠSize . LARGE , ĊĠĠĠĠĠĠĠ Ġco at Ġ= ĠCo at . MEDIUM , ĊĠĠĠĠĠĠĠ Ġhealth Details Ġ= Ġhealth Details , ĊĠĠĠĠĠĠĠ Ġhabit at Adapt ation Ġ= Ġhabit at Adapt ation , ĊĠĠĠĠĠĠĠ Ġorganization Ġ= Ġorganization ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġremote Animal Ġ= ĠAnimal With Details ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Fr anc is ", ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" Dog ", ĊĠĠĠĠĠĠĠ Ġdetails Ġ= Ġremote Animal Details , ĊĠĠĠĠĠĠĠ Ġmedia Ġ= ĠMedia ( listOf (), ĠlistOf ()), ĊĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" Play ful "), ĊĠĠĠĠĠĠĠ Ġa do ption Status Ġ= ĠA do ption Status . AD OP TABLE , ĊĠĠĠĠĠĠĠ Ġpublished At Ġ= ĠLocalDateTime . now () ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġval Ġrem otely Search able Animal Ġ= ĠSearch Parameters ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġremote Animal . name , ĊĠĠĠĠĠĠĠ Ġage Ġ= Ġremote Animal . details . age . name , ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġremote Animal . type ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġlocal Animal s : ĠList < Animal > Ġget () Ġ= Ġmutable Local Animal s . map Ġ{ Ġit . to Animal () Ġ} ĊĠĠĠ Ġprivate Ġval Ġmutable Local Animal s Ġ= Ġmutable ListOf ( local Animal ) ĊĊĠĠĠ Ġval Ġremote Animal s : ĠList < Animal > Ġget () Ġ= Ġmutable Remote Animal s . map Ġ{ Ġit . to Animal () Ġ} ĊĠĠĠ Ġprivate Ġval Ġmutable Remote Animal s Ġ= Ġmutable ListOf ( remote Animal ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Animal s (): ĠFlow able < List < Animal >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . just ( local Animal s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow able ( Back pressure Strategy . LATE ST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrequest More Animal s ( page To Load : ĠInt , ĠnumberOf Items : ĠInt ): ĠPag inated Animal s Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPag inated Animal s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmutable Remote Animal s , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPagination ( currentPage Ġ= Ġ 2 , Ġtotal Pages Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstore Animal s ( animal s : ĠList < Animal With Details >) Ġ{ ĊĠĠĠĠĠĠĠ Ġmutable Local Animal s . addAll ( animal s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Animal ( animal Id : ĠLong ): ĠAnimal With Details Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmutable Local Animal s . find Ġ{ Ġit . id Ġ== Ġanimal Id Ġ} !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Animal Types (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf (" dog ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Animal A ges (): ĠList < Age > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAge . values (). toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsearch Cached Animal sBy ( search Parameters : ĠSearch Parameters ): ĠFlow able < SearchResults > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( name , Ġage , Ġtype ) Ġ= Ġsearch Parameters ĊĊĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= Ġmutable Remote Animal s . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġname Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( age . isEmpty () Ġ|| Ġit . details . age . name Ġ== Ġage ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( type . isEmpty () Ġ|| Ġit . type Ġ== Ġtype ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . to Animal () Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . just ( SearchResults ( matches , Ġsearch Parameters )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Flow able ( Back pressure Strategy . LATE ST ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch Animal s Rem otely ( ĊĠĠĠĠĠĠĠ Ġpage To Load : ĠInt , ĊĠĠĠĠĠĠĠ Ġsearch Parameters : ĠSearch Parameters , ĊĠĠĠĠĠĠĠ ĠnumberOf Items : ĠInt ĊĠĠĠ Ġ): ĠPag inated Animal s Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( name , Ġage , Ġtype ) Ġ= Ġsearch Parameters ĊĊĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= Ġmutable Remote Animal s . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġname Ġ&& Ġit . details . age . name Ġ== Ġage Ġ&& Ġit . type Ġ== Ġtype ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠPag inated Animal s ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmatches , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPagination ( currentPage Ġ= Ġ 1 , Ġtotal Pages Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstore On Board ing Data ( postcode : ĠString , Ġdistance : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġno Ġneed Ġhere ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon boarding Is Complete (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAnimal With Details . to Animal (): ĠAnimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAnimal ( id , Ġname , Ġtype , Ġmedia , Ġtags , Ġa do ption Status , Ġpublished At ) ĊĠĠĠ Ġ} Ċ } ĊĊĊĊĊĊĊĊ ĊĊĊĊ ĊĊĊĊĊ