File

libs/core/src/lib/dataset-api/api-mapping.service.ts

Index

Properties
Methods

Constructor

constructor(http: HttpClient)
Parameters :
Name Type Optional
http HttpClient No

Methods

Private confirmVersion
confirmVersion(observer: Observer, version: DatasetApiVersion)
Parameters :
Name Type Optional
observer Observer<DatasetApiVersion> No
version DatasetApiVersion No
Returns : void
Public getApiVersion
getApiVersion(apiUrl: string)
Parameters :
Name Type Optional
apiUrl string No

Properties

Private cache
Type : Map<string | DatasetApiVersion>
Default value : new Map<string, DatasetApiVersion>()
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, Observer } from 'rxjs';

export enum DatasetApiVersion {
    V1,
    V2
}

@Injectable()
export class DatasetApiMapping {

    private cache: Map<string, DatasetApiVersion> = new Map<string, DatasetApiVersion>();

    constructor(
        protected http: HttpClient
    ) { }

    public getApiVersion(apiUrl: string): Observable<DatasetApiVersion> {
        return new Observable<DatasetApiVersion>((observer: Observer<DatasetApiVersion>) => {
            if (this.cache.has(apiUrl)) {
                this.confirmVersion(observer, this.cache.get(apiUrl));
            } else {
                this.http.get<any[]>(apiUrl).subscribe((result) => {
                    let version = DatasetApiVersion.V1;
                    if (result instanceof Array) {
                        result.forEach((entry) => {
                            if (entry.id === 'platforms') {
                                version = DatasetApiVersion.V2;
                            }
                        });
                    }
                    this.cache.set(apiUrl, version);
                    this.confirmVersion(observer, version);
                });
            }
        });
    }

    private confirmVersion(observer: Observer<DatasetApiVersion>, version: DatasetApiVersion) {
        observer.next(version);
        observer.complete();
    }

}

result-matching ""

    No results matching ""