package Ġcom . example . crypto tracker . domain . use case Ċ Ċ import Ġcom . example . crypto tracker . data . repository . List Local Repository Ċ import Ġcom . example . crypto tracker . data . repository . Search Repository Ċ import Ġcom . example . crypto tracker . exception . Database Exception Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSearch UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġsearch Repository : ĠSearch Repository , ĊĠĠĠ Ġprivate Ġval Ġlist Repository : ĠList Local Repository Ċ ) Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġget History (): ĠList < String > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn @ with Context Ġsearch Repository . get History () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Pop ular (): ĠList < String > Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġsearch Repository . get Pop ular () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠDatabase Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnames Ġ= Ġlist Repository . get Names () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Repository . first Load ( names ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnames . sh uffled (). take ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Repository . add Pop ular List ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context Ġsearch Repository . get Pop ular () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġset F avour ite ( name : ĠString , Ġis F avour ite : ĠBoolean ) Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Repository . update F avour ite ( name , Ġis F avour ite ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun ĠaddTo History ( name : ĠString ) Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Repository . add Request ( name ) ĊĠĠĠ Ġ} Ċ } Ċ