import { Injectable } from '@angular/core'; import { Product } from './product'; import { ApiProvider } from '../../services/api/api.provider'; import 'rxjs/add/operator/map'; import * as _ from 'lodash'; // Generated class for the ProductsService provider. // See https://angular.io/docs/ts/latest/guide/dependency-injection.html // for more info on providers and Angular 2 DI. @Injectable() export class ProductsProvider { data: Product[]; constructor(public apiProvider: ApiProvider) { this.data = null; } create(productParameters: any ) { let payload = productParameters; let promise = new Promise((resolve, reject) => { this.apiProvider.api('POST', `/v1/product` , payload) .then((response: any) => { if (response.id) { // cast to class? resolve(response); // } else { reject(); } }, (err) => { // catch error // @todo: We should check for errors ?!? reject(err); }); }); return promise; } // http://139.91.230.7:5000/v1/products/57b673c6c2d8c14c72748273?tenantId=57b540a3d4c62844f361a893 retrieve(tenantId: string, storeId: string) { let payload: any = {}; payload.tenantId = tenantId; let promise = new Promise((resolve, reject) => { // check data // if (this.data) { resolve(this.data); // }else { if (this.data === null){ this.apiProvider.api('GET', `/v1/products/${storeId}`, payload) .then((response: any) => { this.data = this.deserializeProducts(response); resolve(this.data); // cast }, (err) => { // catch error // @todo: We should check for errors ?!? reject(err); }); // uncomment with if // } } else resolve(this.data); }); return promise; } deserializeProducts(incoming: any) { let products: Product[] = _.map((_.values(incoming)), Product.fromJson); return products; } getProduct(productId: string) { let product: Product = _.find(this.data, function(obj) { return obj.id === productId; } ); return product; } retrieveBySKU(tenantId: string, storeId: string, SKU: string) { let promise = new Promise ((resolve, reject) => { let product: Product = _.find(this.data, function(obj) { return obj.getSKU() === SKU; } ); if(_.isUndefined(product)){ let payload: any = {}; payload.tenantId = tenantId; payload.sku = SKU; this.apiProvider.api('GET', `/v1/products/${storeId}`, payload).then( (response: Product) => { if (response.id) { // this.carts[response._id] = response; // this.cartState(response); // const cart = Cart.fromJson(response); let product: Product = Product.fromJson(response); this.data.push(product) resolve(product); } else { reject(); } }, (err) => { // catch error // @todo: We should check for errors ?!? reject(err); // }) }); } else{ resolve(product); } }); return promise; } }