cache.ts 1.92 KiB
import { IRI, Resource } from './resource';
import { Observable } from 'rxjs';
import { HttpResponseBase } from '@angular/common/http';
import { Collection } from './collection';
/**
 * AbstractResourceCache est une classe abstraite qui définit l'interface d'un cache de ressources.
 * Elle doit être implémentée puis être fournie en provider d'un module core. Par exemple:
 *      final class ResourceCache<T extends Resource> extends AbstractResourceCache<T> {
 *        // Implémentation
 *      }
 *      providers: [
 *        [ provider: AbstractResourceCache, useClass: ResourceCache ],
 *      ]
export abstract class AbstractResourceCache {
    /**
     * Récupère une ressource par son IRI. N'exécute la requête requestFactory que si on ne dispose
     * pas d'une version en cache.
    public abstract get<R extends Resource>(
        iri: IRI<R>,
        requestFactory: () => Observable<R>,
    ): Observable<R>;
    /**
     * Met à jour une ressource existante, rafraîchit le cache local avec la réponse.
    public abstract put<R extends Resource>(
        iri: IRI<R>,
        request: Observable<R>,
    ): Observable<R>;
    /**
     * Crée une nouvelle ressource et met la ressource créée dans le cache.
    public abstract post<R extends Resource>(
        request: Observable<R>,
    ): Observable<R>;
    /**
     * Supprime une ressource en distant et dans le cache.
    public abstract delete<R extends Resource>(
        iri: IRI<R>,
        request: Observable<HttpResponseBase>,
    ): Observable<HttpResponseBase>;
    /**
     * Effectue une recherche et met en cache toutes les ressources récupérées.
    public abstract getAll<R extends Resource>(
        request: Observable<Collection<R>>,
    ): Observable<Collection<R>>;
    /**
     * Invalide une ressource en cache.
    public abstract invalidate<R extends Resource>(iri: IRI<R>): void;