createTTLCheckHook function
Creates a hook that checks if entry expired before returning.
Runs during metaRead stage. Deletes expired entries and returns null.
Implementation
PVCacheHook createTTLCheckHook({int priority = 0}) {
return PVCacheHook(
eventString: 'ttl_check',
eventFlow: EventFlow.metaRead,
priority: priority,
actionTypes: [ActionType.get, ActionType.exists],
hookFunction: (ctx) async {
// Check if TTL metadata exists
final expiresAt = ctx.runtimeMeta['_ttl_timestamp'];
if (expiresAt == null) return; // No TTL set, skip check
final now = DateTime.now().millisecondsSinceEpoch;
// Check if expired
if (now >= expiresAt) {
// Delete the expired entry
if (ctx.resolvedKey != null) {
await ctx.entry.delete(ctx.resolvedKey!);
await ctx.meta.delete(ctx.resolvedKey!);
}
// Break the hook chain and return null
throw BreakHook('Entry expired (TTL)', BreakReturnType.none);
}
},
);
}