V13-FE-011: finalize search list layout slice
This commit is contained in:
+25
@@ -0,0 +1,25 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user