import IRequest from '../interfaces/IRequest'; import * as Promise from 'bluebird'; import { CoError } from '../co-error'; export default class ServiceRequest implements IRequest { constructor(private request: IRequest, private name: string = '', private url: string = '') {} public get(url: string, data?: any): Promise { return this.getData(this.request.get(url, data)); } public post(url: string, data?: any): Promise { return this.getData(this.request.post(url, data)); } public put(url: string, data?: any): Promise { return this.getData(this.request.put(url, data)); } public patch(url: string, data?: any): Promise { return this.getData(this.request.patch(url, data)); } public delete(url: string, data?: any): Promise { return this.getData(this.request.delete(url, data)); } public download(url: string, fileName: string, data?: any): Promise { return this.request.download(url, fileName, data).catch(this.handleError.bind(this)); } private getData(request: Promise): Promise { return request.bind(this) .get('data') .catch(this.handleError); } private handleError(err: CoError): never { if (err.code === 'SERVER_ERROR' || err.code === 'SERVER_UNAVAILABLE') { throw new CoError('SERVICE_UNAVAILABLE', this.name, this.url); } if (err.code === 'NOT_FOUND' || err.code === 'METHOD_NOT_ALLOWED') { throw new CoError('SERVICE_NOT_FOUND', this.name, this.url); } throw err; } }