/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠPaul ĠR y bits ky i , Ġpa ul . ry bits ky i . work @ gmail . com Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . paul ry bits ky i . game d ge . data . articles . use cases Ċ Ċ import Ġcom . paul ry bits ky i . game d ge . core . providers . Dispatcher Provider Ċ import Ġcom . paul ry bits ky i . game d ge . core . utils . map Result Ċ import Ġcom . paul ry bits ky i . game d ge . data . articles . data stores . Articles Data Stores Ċ import Ġcom . paul ry bits ky i . game d ge . data . articles . use cases . commons . Refresh Articles UseCase Map pers Ċ import Ġcom . paul ry bits ky i . game d ge . data . articles . use cases . commons . map To Domain Articles Ċ import Ġcom . paul ry bits ky i . game d ge . data . articles . use cases . commons . th rottling . Articles Refresh ing Th rott ler Tools Ċ import Ġcom . paul ry bits ky i . game d ge . data . commons . utils . on Each Success Ċ import Ġcom . paul ry bits ky i . game d ge . data . commons . utils . to Data Pagination Ċ import Ġcom . paul ry bits ky i . game d ge . domain . articles . entities . Article Ċ import Ġcom . paul ry bits ky i . game d ge . domain . articles . use cases . Refresh Articles UseCase Ċ import Ġcom . paul ry bits ky i . game d ge . domain . articles . use cases . Refresh Articles UseCase . Params Ċ import Ġcom . paul ry bits ky i . game d ge . domain . commons . Domain Result Ċ import Ġcom . paul ry bits ky i . h ilt binder . Bind Type Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ Ċ @ Singleton Ċ @ Bind Type Ċ internal Ġclass ĠRefresh Articles UseCase Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġarticles Data Stores : ĠArticles Data Stores , ĊĠĠĠ Ġprivate Ġval Ġdispatcher Provider : ĠDispatcher Provider , ĊĠĠĠ Ġprivate Ġval Ġth rott ler Tools : ĠArticles Refresh ing Th rott ler Tools , ĊĠĠĠ Ġprivate Ġval Ġmap pers : ĠRefresh Articles UseCase Map pers Ċ ) Ġ: ĠRefresh Articles UseCase Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġexecute ( params : ĠParams ): ĠFlow < Domain Result < List < Article >>> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġth rott ler Key Ġ= Ġth rott ler Tools . key Provider . provide Articles Key ( params . pagination ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( th rott ler Tools . th rott ler . can Refresh Articles ( th rott ler Key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( articles Data Stores . remote . get Articles ( params . pagination . to Data Pagination ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. on Each Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarticles Data Stores . local . save Articles ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġth rott ler Tools . th rott ler . update Articles Last Refresh Time ( th rott ler Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. flow On ( dispatcher Provider . main ) ĊĠĠĠĠĠĠĠ Ġ. map Result ( map pers . article :: map To Domain Articles , Ġmap pers . error :: map To Domain Error ) ĊĠĠĠĠĠĠĠ Ġ. flow On ( dispatcher Provider . computation ) ĊĠĠĠ Ġ} Ċ } Ċ