cache.ts 1.92 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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.
     */
Guillaume Perréal's avatar
Guillaume Perréal committed
25
26
27
28
    public abstract get<R extends Resource>(
        iri: IRI<R>,
        requestFactory: () => Observable<R>,
    ): Observable<R>;
29
30
31
32

    /**
     * Met à jour une ressource existante, rafraîchit le cache local avec la réponse.
     */
Guillaume Perréal's avatar
Guillaume Perréal committed
33
34
35
36
    public abstract put<R extends Resource>(
        iri: IRI<R>,
        request: Observable<R>,
    ): Observable<R>;
37
38
39
40

    /**
     * Crée une nouvelle ressource et met la ressource créée dans le cache.
     */
Guillaume Perréal's avatar
Guillaume Perréal committed
41
42
43
    public abstract post<R extends Resource>(
        request: Observable<R>,
    ): Observable<R>;
44
45
46
47
48
49
50
51
52
53
54
55

    /**
     * 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.
     */
Guillaume Perréal's avatar
Guillaume Perréal committed
56
57
58
    public abstract getAll<R extends Resource>(
        request: Observable<Collection<R>>,
    ): Observable<Collection<R>>;
59
60
61
62
63
64

    /**
     * Invalide une ressource en cache.
     */
    public abstract invalidate<R extends Resource>(iri: IRI<R>): void;
}