import { Injectable } from '@angular/core'; import { JsonApiDatastore, JsonApiDatastoreConfig, JsonApiModel, ModelType } from “ng-jsonapi”; import { User, Organization } from './models'; import { Http, Headers, RequestOptions } from “@angular/http”; import { Observable } from “rxjs/Observable”; import “rxjs/add/observable/forkJoin”;
@Injectable() @JsonApiDatastoreConfig({
baseUrl: 'http://localhost:9393/api/', models: { users: User, organizations: Organization }
}) export class IngesterApiService extends JsonApiDatastore {
private myHttp: Http; constructor(http: Http) { super(http); this.myHttp = http; const headers = new Headers(); headers.append('Accept', 'application/vnd.api+json'); headers.append('Content-Type', 'application/json'); this.headers = headers; } getObjectList<T extends JsonApiModel>(modelType: ModelType<T>): Observable<T[]> { return this.query(modelType).map((collection) => collection.data); } getObject<T extends JsonApiModel>(modelType: ModelType<T>, id: string): Observable<T> { return this.findRecord(modelType, id).map((document) => document.data); } saveObject<T extends JsonApiModel>(data: any, obj: T) { return this.saveRecord(data, obj).map((document) => document.data); } deleteObject<T extends JsonApiModel>(modelType: ModelType<T>, obj: T): Observable<boolean> { return this.deleteRecord(modelType, obj.id).map((res) => res == null); } getHasMany<T extends JsonApiModel>(modelType: ModelType<T>, url: string): Observable<T[]> { return this.hasManyLink(modelType, url).map((collection) => collection.data); } getBelongsTo<T extends JsonApiModel>(modelType: ModelType<T>, url: string): Observable<T> { return this.belongsToLink(modelType, url).map((document) => document.data); } authenticate(user: string, password: string): Observable<{ok: boolean, message?: string, detail?: string}> { localStorage.removeItem('teneoJWT'); let headers = new Headers(); headers.set('Accept', 'application/json'); headers.set('Content-Type', 'application/json'); return this.myHttp .post(this.getBaseUrl() + 'auth', {name: user, password: password}, this.getOptions(headers)) .map( (res) => { console.log(`Reply: ${res}`); if (!res.ok) { return {ok: false, message: res.statusText, detail: res.json().error}; } localStorage.setItem('isLoggedin', 'true'); localStorage.setItem('teneoJWT', res.json().message); return {ok: true, message: res.json().message}; }); }
}