Files
KArtSell.Aegis/docs/Design/kbx-foundation-v52-fe-operational-navigation-screen-anatomy/backend/Shared/ExternalData/KbxExternalDataFreshnessPolicy.cs
T
kjh2064 c41e5063b7 chore: remove kbx-foundation-v36 reference (superseded by v4 implementation)
Removed entire kbx-foundation-v36 directory as it's been replaced by
the new KBX Foundation v4 patterns implemented in this session:
- Registry-driven screen definitions
- Density-aware UI adapter components
- Feature module templates (ShadowRun, Models)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-12 01:39:58 +09:00

26 lines
1.3 KiB
C#

using Kbx.Shared.ExternalData.Generated;
namespace Kbx.Shared.ExternalData;
public static class KbxExternalDataFreshnessPolicy
{
public static KbxExternalDataState Evaluate(KbxExternalDataDatasetDefinition dataset, DateTimeOffset now, DateTimeOffset? freshUntil, DateTimeOffset? usableUntil)
{
if (freshUntil is null && dataset.FreshnessMode == "provider-defined") return KbxExternalDataState.Unavailable;
if (freshUntil is not null && now <= freshUntil.Value) return KbxExternalDataState.Fresh;
if (dataset.FreshnessMode == "strict") return KbxExternalDataState.Expired;
if (usableUntil is not null && now <= usableUntil.Value) return KbxExternalDataState.Stale;
return KbxExternalDataState.Expired;
}
public static (DateTimeOffset? FreshUntil, DateTimeOffset? UsableUntil) Window(KbxExternalDataDatasetDefinition dataset, DateTimeOffset receivedAt)
{
if (dataset.FreshForSeconds is null) return (null, null);
var fresh = receivedAt.AddSeconds(dataset.FreshForSeconds.Value);
var usable = dataset.FreshnessMode == "stale-while-revalidate" && dataset.MaxStaleSeconds is > 0
? fresh.AddSeconds(dataset.MaxStaleSeconds.Value)
: fresh;
return (fresh, usable);
}
}