package Ġcom . kaz ak ago . sto ref low able . example . flow able Ċ Ċ import Ġcom . kaz ak ago . sto ref low able . Flow able Data StateManager Ċ import Ġcom . kaz ak ago . sto ref low able . Store Flow able Factory Ċ import Ġcom . kaz ak ago . sto ref low able . example . api . Github Api Ċ import Ġcom . kaz ak ago . sto ref low able . example . cache . Github Cache Ċ import Ġcom . kaz ak ago . sto ref low able . example . cache . Github Meta StateManager Ċ import Ġcom . kaz ak ago . sto ref low able . example . model . Github Meta Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDateTime Ċ Ċ class ĠGithub Meta Flow able Factory Ġ: ĠStore Flow able Factory < Unit , ĠGithub Meta > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠEX PI RED _ DURATION Ġ= ĠDuration . of Minutes ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġgithub Api Ġ= ĠGithub Api () ĊĠĠĠ Ġprivate Ġval Ġgithub Cache Ġ= ĠGithub Cache ĊĊĠĠĠ Ġoverride Ġval Ġflow able Data StateManager : ĠFlow able Data StateManager < Unit > Ġ= ĠGithub Meta StateManager ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload Data From Cache ( param : ĠUnit ): ĠGithub Meta ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgithub Cache . meta Cache ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave DataTo Cache ( new Data : ĠGithub Meta ?, Ġparam : ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgithub Cache . meta Cache Ġ= ĠnewData ĊĠĠĠĠĠĠĠ Ġgithub Cache . meta Cache CreatedAt Ġ= ĠLocalDateTime . now () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Data From Origin ( param : ĠUnit ): ĠGithub Meta Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgithub Api . get Meta () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġneed Refresh ( cached Data : ĠGithub Meta , Ġparam : ĠUnit ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠcreatedAt Ġ= Ġgithub Cache . meta Cache CreatedAt ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( createdAt Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpired At Ġ= ĠcreatedAt Ġ+ ĠEX PI RED _ DURATION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpired At Ġ< ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ