Passed
Push — master ( dc03f9...e0c6dc )
by Miloš
03:58
created

AuthStorageProvider.getUserNonCached   A

Complexity

Conditions 2

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 9
rs 10
c 0
b 0
f 0
cc 2
1
import { Injectable } from "@angular/core";
2
import { Cacheable } from "ngx-cacheable";
3
import { Observable } from "rxjs";
4
import { UniFirebaseLoginConfig } from "../config/uni-firebase-login-config";
5
import { UserModel } from "../model/user-model";
6
import { FirebaseStorage } from "./firebase-storage";
7
import { IStorageProvider } from "./i-storage-provider";
8
import { InMemoryStorage } from "./in-memory-storage.service";
9
10
@Injectable({
11
    providedIn: "root",
12
})
13
export class AuthStorageProvider<User extends UserModel = UserModel> {
14
    public constructor(
15
        protected firebaseStorage: FirebaseStorage<User>,
16
        protected inMemoryStorage: InMemoryStorage<User>,
17
        protected config: UniFirebaseLoginConfig,
18
    ) {}
19
20
    /**
21
     * Get user from cache if possible or from a storage
22
     */
23
    @Cacheable()
24
    public getUser(): Observable<User | null> {
25
        return this.getUserNonCached();
26
    }
27
28
    public getUserNonCached(): Observable<User | null> {
29
        const storageProvider = this.getProvider();
30
31
        if (storageProvider !== null) {
32
            return storageProvider.subscribeUser();
33
        }
34
35
        throw new Error("No storage provider found.");
36
    }
37
38
    public getProvider(): IStorageProvider<User> {
39
        return this.getProviderById(this.config.storage);
40
    }
41
42
    protected getProviderById(
43
        providerId: false | "firestore",
44
    ): IStorageProvider<User> {
45
        let provider;
46
        switch (providerId) {
47
            case "firestore":
48
                provider = this.firebaseStorage;
49
                break;
50
            case false:
51
                provider = this.inMemoryStorage;
52
                break;
53
        }
54
55
        if (provider !== undefined) {
56
            return provider;
57
        }
58
59
        throw new Error(`Provider ${providerId} not supported.`);
60
    }
61
}
62