import { Headers, Http, Response } from '@angular/http'; import 'rxjs/add/operator/toPromise'; export abstract class StatementBaseService { protected abstract url: string; protected headers: Headers = new Headers({'Content-Type': 'application/json'}); constructor(protected http: Http) { } getData(from: number = 0, to: number = 100, sort: string = null): Promise { let url: string = this.url; url += '?from=' + from + '&to=' + to; if (sort) { url += '&sort=' + sort; } return this.http.get(url) .toPromise() .then((response: Response) => this.parseModels(response.json())) .catch(this.handleError); } update(id: number, data: string): Promise { return this.http.post(this.url + '/update?id=' + id, data, { headers: this.headers }) .toPromise() .then((response: Response) => response.json()) .catch(this.handleError); } create(data: string): Promise { return this.http.post(this.url + '/create', data, { headers: this.headers }) .toPromise() .then((response: Response) => this.parseModel(response.json())) .catch(this.handleError); } delete(id: number): Promise { return this.http.delete(this.url + '/delete?id=' + id, { headers: this.headers }) .toPromise() .then((response: Response) => response.json()) .catch(this.handleError); } protected handleError(error: any): Promise { console.error('An error occured', error); return Promise.reject(error.message || error); } protected abstract parseModels(json: any): any[]; protected abstract parseModel(json: any): any; }