@phasesdk/api-client-for-economic
Version:
e-conomic REST API Library for Node.js is a powerful tool designed to simplify integration with the e-conomic platform for developers building Node.js applications. With this library, developers can effortlessly leverage the full functionality of the e-co
156 lines (143 loc) • 3.93 kB
text/typescript
import { DepartmentalDistribution } from "./DepartmentalDistribution";
import { InvoiceEndpoints } from "./Invoices";
import { ProductGroup } from "./ProductGroups";
import {
AuthToken,
InvoiceResponse,
Pagination,
} from "../../types/Economic.type";
import { HttpResponse } from "../../types/Http.type";
import RestApi from "../../modules/RestApi";
export type Product = {
barCode: string;
barred: boolean;
costPrice: number;
departmentalDistribution: DepartmentalDistribution;
description: string;
inventory: Inventory;
invoices: Pick<InvoiceEndpoints, "booked" | "drafts">;
lastUpdated: string;
name: string;
productGroup: ProductGroup;
productNumber: string;
recommendedPrice: number;
salesPrice: number;
unit: Unit;
self: string;
};
type Unit = {
name: string;
self: string;
unitNumber: number;
};
type Inventory = {
available: number;
grossWeight: number;
inStock: number;
inventoryLastUpdated: string;
netWeight: number;
orderedByCustomers: number;
orderedFromSuppliers: number;
packageVolume: number;
recommendedCostPrice: number;
};
export type ProductInfo = Pick<Product, "productNumber" | "self">;
export type CreateProduct = {
barCode: string;
barred: boolean;
costPrice: number;
description: string;
name: string;
productGroup: { productGroupNumber: number };
productNumber: string;
recommendedPrice: number;
salesPrice: number;
unit: { unitNumber: number };
};
export type UpdateProduct = Partial<CreateProduct>;
export default class Products extends RestApi {
/**
* @constructor
*/
constructor(props: AuthToken) {
super(props);
}
/**
* Get collection of products.
* @see https://restdocs.e-conomic.com/#get-products
*
* @param {number} offset
* @param {number} limit
* @returns {Promise<HttpResponse>}
*/
get(
skipPages: number = 0,
limit: number = 100
): Promise<HttpResponse<InvoiceResponse<Product[], Pagination>>> {
const requestObj = {
method: "get",
url: `/products?skippages=${skipPages}&pagesize=${limit}`,
};
return this._httpRequest<InvoiceResponse<Product[], Pagination>>(
requestObj
);
}
/**
* Get a specific product.
* @see https://restdocs.e-conomic.com/#get-products-productnumber
* @param {string} productNumber
* @returns {Promise<HttpResponse>}
*/
getFor(productNumber: string): Promise<HttpResponse<Product>> {
const requestObj = {
method: "get",
url: `/products/${productNumber}`,
};
return this._httpRequest<Product>(requestObj);
}
/**
* Create a new product.
* @see https://restdocs.e-conomic.com/#post-products
* @param {CreateProduct} product
* @returns {Promise<HttpResponse<Product>>}
*/
createProduct(product: CreateProduct): Promise<HttpResponse<Product>> {
const requestObj = {
method: "post",
url: `/products`,
data: product,
};
return this._httpRequest<Product>(requestObj);
}
/**
* Update an existing product.
* @see https://restdocs.e-conomic.com/#put-products-productnumber
* @param {number} productNumber
* @param {UpdateProduct} product
* @returns {Promise<HttpResponse<Product>>}
*/
updateProduct(
productNumber: number,
product: UpdateProduct
): Promise<HttpResponse<Product>> {
const requestObj = {
method: "put",
url: `/products/${productNumber}`,
data: product,
};
return this._httpRequest<Product>(requestObj);
}
/**
* Delete an existing product.
* @see https://restdocs.e-conomic.com/#delete-products-productnumber
* @param {number} productNumber
* @returns {Promise<HttpResponse<void>>}
*/
deleteProduct(productNumber: number): Promise<HttpResponse<void>> {
const requestObj = {
method: "delete",
url: `/products/${productNumber}`,
};
return this._httpRequest<void>(requestObj);
}
}