UNPKG

prodobit

Version:

Open-core business application development platform

145 lines (134 loc) 3.76 kB
import type { CreateSalesOrderItemRequest, CreateSalesOrderRequest, PaginatedResponse, Response, SalesOrder, SalesOrderItem, UpdateSalesOrderItemRequest, UpdateSalesOrderRequest, UpdateSalesOrderStatusRequest, } from "@prodobit/types"; import { createSalesOrderItemRequest, createSalesOrderRequest, updateSalesOrderItemRequest, updateSalesOrderRequest, updateSalesOrderStatusRequest, } from "@prodobit/types"; import type { RequestConfig, SalesOrderQuery } from "../types"; import { buildQuery } from "../utils/query-builder"; import { validateRequest } from "../utils/validation"; import { BaseClient } from "./base-client"; export class SalesClient extends BaseClient { // Sales Order Methods async getSalesOrders( filters?: Partial<SalesOrderQuery>, config?: RequestConfig ): Promise<PaginatedResponse<SalesOrder[]>> { const queryString = buildQuery(filters); const path = `/api/v1/sales-orders${queryString ? `?${queryString}` : ""}`; return this.request("GET", path, undefined, config); } async getSalesOrderById( id: string, config?: RequestConfig ): Promise<Response<SalesOrder>> { return this.request("GET", `/api/v1/sales-orders/${id}`, undefined, config); } async createSalesOrder( data: CreateSalesOrderRequest, config?: RequestConfig ): Promise<Response<SalesOrder>> { const validatedData = validateRequest(createSalesOrderRequest, data); return this.request("POST", "/api/v1/sales-orders", validatedData, config); } async updateSalesOrder( id: string, data: UpdateSalesOrderRequest, config?: RequestConfig ): Promise<Response<SalesOrder>> { const validatedData = validateRequest(updateSalesOrderRequest, data); return this.request( "PUT", `/api/v1/sales-orders/${id}`, validatedData, config ); } async updateSalesOrderStatus( id: string, data: UpdateSalesOrderStatusRequest, config?: RequestConfig ): Promise<Response<SalesOrder>> { const validatedData = validateRequest(updateSalesOrderStatusRequest, data); return this.request( "PUT", `/api/v1/sales-orders/${id}/status`, validatedData, config ); } async deleteSalesOrder( id: string, config?: RequestConfig ): Promise<Response<void>> { return this.request( "DELETE", `/api/v1/sales-orders/${id}`, undefined, config ); } // Sales Order Item Methods async addSalesOrderItem( salesOrderId: string, data: CreateSalesOrderItemRequest, config?: RequestConfig ): Promise<Response<SalesOrderItem>> { const validatedData = validateRequest(createSalesOrderItemRequest, data); return this.request( "POST", `/api/v1/sales-orders/${salesOrderId}/items`, validatedData, config ); } async updateSalesOrderItem( salesOrderId: string, itemId: string, data: UpdateSalesOrderItemRequest, config?: RequestConfig ): Promise<Response<SalesOrderItem>> { const validatedData = validateRequest(updateSalesOrderItemRequest, data); return this.request( "PUT", `/api/v1/sales-orders/${salesOrderId}/items/${itemId}`, validatedData, config ); } async removeSalesOrderItem( salesOrderId: string, itemId: string, config?: RequestConfig ): Promise<Response<void>> { return this.request( "DELETE", `/api/v1/sales-orders/${salesOrderId}/items/${itemId}`, undefined, config ); } async getSalesOrderHistory( id: string, config?: RequestConfig ): Promise<Response<any[]>> { return this.request( "GET", `/api/v1/sales-orders/${id}/history`, undefined, config ); } }