package Ġmix it . util . cache Ċ Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Zone Id Ċ import Ġmix it . blog . model . Blog Service Ċ import Ġmix it . event . handler . Admin EventHandler . Companion . TIME ZONE Ċ import Ġmix it . event . model . Event Service Ċ import Ġmix it . talk . model . Talk Service Ċ import Ġmix it . user . model . UserService Ċ import Ġmix it . util . Cache Template Ċ import Ġmix it . util . Cache Zone Ċ import Ġmix it . util . Cached Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . web . reactive . function . server . Server Request Ċ import Ġorg . springframework . web . reactive . function . server . Server Response Ċ import Ġreactor . core . publisher . Mono Ċ Ċ data Ġclass ĠCache Zone Stat ( ĊĠĠĠ Ġval Ġzone : ĠCache Zone , ĊĠĠĠ Ġval Ġentries : ĠInt , ĊĠĠĠ Ġval Ġrefresh At : ĠLocalDateTime , ĊĠĠĠ Ġval Ġtitle : ĠString Ġ= Ġ" admin . cache .${ zone . name . lowercase ()}. title ", ĊĠĠĠ Ġval Ġdesc : ĠString Ġ= Ġ" admin . cache .${ zone . name . lowercase ()}. desc " Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġ< I Ġ: ĠCached , ĠT Ġ: ĠCache Template < I >> Ġinit ( cache Service : ĠT ): ĠCache Zone Stat Ġ= ĠCache Zone Stat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Service . cache Zone , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Service . cache List . as Map (). entries . first OrNull ()?. value ?. size Ġ?: Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Service . refresh Instant . get (). at Zone ( Zone Id . of ( TIME ZONE )). to LocalDateTime () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Component Ċ class ĠCache Handler ( ĊĠĠĠ Ġprivate Ġval Ġevent Service : ĠEvent Service , ĊĠĠĠ Ġprivate Ġval Ġtalk Service : ĠTalk Service , ĊĠĠĠ Ġprivate Ġval Ġblog Service : ĠBlog Service , ĊĠĠĠ Ġprivate Ġval ĠuserService : ĠUserService Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġview ( req : ĠServer Request ): ĠMono < Server Response > Ġ= ĊĠĠĠĠĠĠĠ ĠServer Response . ok (). render ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" admin - cache ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" title ", Ġ" admin . cache . title "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" zones ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" event ", ĠCache Zone Stat . init ( event Service )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" blog ", ĠCache Zone Stat . init ( blog Service )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" talk ", ĠCache Zone Stat . init ( talk Service )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair (" user ", ĠCache Zone Stat . init ( userService )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġinvalidate ( req : ĠServer Request ): ĠMono < Server Response > Ġ= ĊĠĠĠĠĠĠĠ ĠCache Zone . valueOf ( req . path Variable (" zone ")). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Zone . T AL K Ġ-> Ġtalk Service . invalidate Cache () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Zone . B LOG Ġ-> Ġblog Service . invalidate Cache () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Zone . EVENT Ġ-> Ġevent Service . invalidate Cache () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCache Zone . USER Ġ-> ĠuserService . invalidate Cache () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ( req ) ĊĠĠĠĠĠĠĠ Ġ} Ċ }