Repositories

Repository Pattern type-safe per PostgREST — classi CRUD generiche, wrapper semplificati, factory con preset e utility runtime per errori, path e type guards.

Il layer Repository

Il package @pzeta/postgrest implementa il Repository Pattern come strato di astrazione tra le facade applicative (PostgRESTClient, BasePostgrestService) e il client HTTP. I repository sono type-safe, generici sui type parameter <T, K> e gestiscono nativamente cache, schema PostgreSQL multipli e operazioni bulk/RPC.

import {
  PostgRESTRepository,
  EnhancedPostgRESTRepository,
  BaseEnhancedRepository,
  CrudRepositoryBase,
  RepositoryFactory,
  RepositoryUtils,
  RestError,
} from '@pzeta/postgrest'

Panoramica classi

Classe / UtilityRuoloQuando usarla
PostgRESTRepositoryRepository CRUD core — implementa tutte le operazioni HTTP verso PostgRESTPath multipli sulla stessa istanza, full control su schema/cache/auth
EnhancedPostgRESTRepositoryWrapper semplificato con path e keyName fissiUna sola tabella/entità per istanza (caso più frequente)
BaseEnhancedRepositoryClasse base astratta dietro EnhancedPostgRESTRepositoryEstendere con metodi custom (findByEmail, query specifiche)
CrudRepositoryBaseContratto astratto ICrudRepositoryImplementare backend non-PostgREST mantenendo l'API CRUD
RepositoryFactoryFactory statica con preset (Public, JWT, Cookie, Cached, Realtime)Setup veloce DRY, scelta semantica del preset
RepositoryUtilsUtility statiche: gestione errori, parsing path, cache key, RestErrorTry/catch tipizzati su RestError, normalizzazione URL
TypeGuardsType guards runtime per validazione sicuraNarrowing TypeScript su unknown, error handling difensivo

Architettura

         ┌──────────────────────────────┐
         │   RepositoryFactory          │  ← create() / createPublic() / createWithJwt() ...
         └──────────────┬───────────────┘
                        │ istanzia
                        ▼
         ┌──────────────────────────────┐
         │ EnhancedPostgRESTRepository  │  ← API semplificata per singola entità
         │   extends                    │
         │ BaseEnhancedRepository<T,K>  │
         └──────────────┬───────────────┘
                        │ delega a
                        ▼
         ┌──────────────────────────────┐
         │   PostgRESTRepository        │  ← implementazione concreta CRUD/RPC
         │   extends CrudRepositoryBase │
         │   implements ICrudRepository │
         └──────────────────────────────┘
Per il 90% dei casi usa RepositoryFactory.create<T, K>(...) — ottieni un EnhancedPostgRESTRepository già configurato con preset enterprise (cache 1h, JWT, background refresh). Estendi BaseEnhancedRepository solo quando devi aggiungere metodi custom di dominio.

Sotto-pagine