createTTLCheckHook function

PVCacheHook createTTLCheckHook({
  1. int priority = 0,
})

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);
      }
    },
  );
}