import { ORDER_API_SHARED_KEY, ORDER_API_URL } from '../lib/constants' import { Request, Response } from '@oyst/utils' import { isNil, merge } from 'ramda' import { IAmount } from '../interfaces/commun' const { ApiRequest, RequestError } = Request export interface ICreate { user: Object transaction_id: string transaction_amount: IAmount product_id: string variation_id?: string merchant_id: string shipment_amount: IAmount product_amount: IAmount quantity?: number vat: { product: number shipment: number } } export interface IShow { merchantId: string userId: string } export interface IUpdateItem { quantity: number } export class OrderAPI extends ApiRequest { constructor (init: any = {}) { super(merge({ api: 'order-api', endpoint: ORDER_API_URL, prefix: 'ORD', req: {}, sharedKey: ORDER_API_SHARED_KEY, targetApi: 'order-api', type: 'http' }, init)) } public show (opts: IShow): Promise { return new Promise(async (resolve, reject) => { try { const result = await this.makeRequest({ url: `/v2/merchants/${opts.merchantId}/orders/users/${opts.userId}` }) resolve(result.data.order) } catch (err) { reject(err) } }) } public create (opts: ICreate, version: number = 1): Promise { return new Promise(async (resolve, reject) => { try { const result = await this.makeRequest({ json: opts, method: 'POST', url: `/v${version}/orders` }) resolve(result.data) } catch (err) { reject(err) } }) } public delete (id: string, version: number = 1): Promise { return new Promise(async (resolve, reject) => { try { const result = await this.makeRequest({ method: 'DELETE', url: `/v${version}/orders/${id}` }) resolve(result.data) } catch (err) { reject(err) } }) } public updateItem (orderId: string, itemId: string, payload: IUpdateItem): Promise { return new Promise(async (resolve, reject) => { try { const result = await this.makeRequest({ json: { ...payload }, method: 'PATCH', url: `/v2/orders/${orderId}/items/${itemId}`, }) resolve(result.data) } catch (err) { reject(err) } }) } } export default new OrderAPI()