Cache

CacheStrategyFactory

Factory statica per la creazione di tutte le strategie di cache. Espone metodi specifici, create(type, config?) dinamico e createWithFallback() con auto-fallback IndexedDB → SessionStorage → LocalStorage → Memory.

Cosa fa

CacheStrategyFactory applica il Factory Pattern per centralizzare l'instanziazione delle cinque strategie di cache. Espone tre tipologie di API:

  1. Metodi specificicreateIndexedDBStrategy, createLocalStorageStrategy, ecc.
  2. Metodo dinamicocreate(type, config?) per selezione runtime
  3. Auto-fallbackcreateWithFallback() che testa la disponibilita degli storage e ritorna il migliore disponibile

Enum CacheStrategyType

enum CacheStrategyType {
  INDEXEDDB = 'indexeddb',
  LOCALSTORAGE = 'localstorage',
  SESSIONSTORAGE = 'sessionstorage',
  MEMORY = 'memory',
  NONE = 'none',
}

CacheStrategyConfig

interface CacheStrategyConfig {
  dbName?: string        // IndexedDB
  storeName?: string     // IndexedDB
  prefix?: string        // LocalStorage / SessionStorage
}
CampoTipoDefaultUsato da
dbNamestring'pzeta_cache_db'IndexedDB
storeNamestring'cache_store'IndexedDB
prefixstring'pzeta_cache_' / 'pzeta_session_cache_'LocalStorage / SessionStorage

Metodi specifici

static createIndexedDBStrategy(config?: CacheStrategyConfig): ICacheStrategy
static createLocalStorageStrategy(config?: CacheStrategyConfig): ICacheStrategy
static createSessionStorageStrategy(config?: CacheStrategyConfig): ICacheStrategy
static createMemoryStrategy(): ICacheStrategy
static createNoCacheStrategy(): ICacheStrategy

Ognuno instanzia la strategy corrispondente con la config (dove rilevante).

Metodo dinamico create(type, config?)

static create(type: CacheStrategyType, config?: CacheStrategyConfig): ICacheStrategy

Seleziona la strategy in base al tipo. Throw se type non riconosciuto.

import { CacheStrategyFactory, CacheStrategyType } from '@pzeta/postgrest'

const strategy = CacheStrategyFactory.create(CacheStrategyType.INDEXEDDB, {
  dbName: 'my_app_cache',
})

Auto-fallback createWithFallback()

static createWithFallback(): ICacheStrategy
Modalita consigliata in produzione. Verifica in ordine la disponibilita degli storage e ritorna il migliore disponibile:
  1. IndexedDB (se typeof indexedDB !== 'undefined')
  2. SessionStorage (se typeof sessionStorage !== 'undefined')
  3. LocalStorage (se typeof localStorage !== 'undefined')
  4. Memory — ultimo fallback garantito
Ad ogni step intercetta eventuali errori (es. modalita private che disabilita storage) e passa al fallback successivo, loggando in debug.

Esempi

Auto-fallback (consigliato)

import { CacheStrategyFactory, CacheService } from '@pzeta/postgrest'

const strategy = CacheStrategyFactory.createWithFallback()
const cache = CacheService.getInstance(httpClient, strategy)

Selezione esplicita

const strategy = CacheStrategyFactory.createIndexedDBStrategy({
  dbName: 'crm_cache',
  storeName: 'orders',
})

Dinamica da env

const type = (process.env.CACHE_STRATEGY ?? 'indexeddb') as CacheStrategyType
const strategy = CacheStrategyFactory.create(type)

Disabilita cache in test

import { CacheStrategyFactory } from '@pzeta/postgrest'

const strategy = process.env.NODE_ENV === 'test'
  ? CacheStrategyFactory.createMemoryStrategy()
  : CacheStrategyFactory.createWithFallback()

Ordine di fallback — razionale

L'ordine IndexedDB → SessionStorage → LocalStorage → Memory e progettato per:

  1. Massimizzare capacita — IndexedDB ha capacita di ordini di grandezza superiore
  2. Minimizzare residui cross-sessione — SessionStorage preferito a LocalStorage tra i Web Storage (cache pulita alla chiusura tab)
  3. Garantire sempre un'opzione funzionante — Memory non puo fallire

Vedi anche