@simpleapps-com/augur-api
Version:
TypeScript client library for Augur microservices API endpoints
241 lines • 9.44 kB
JavaScript
import { z } from 'zod';
import { BaseResponseSchema } from '../../../core/schemas';
import { mysqlDatetimeSchema } from '../../../core/schema-utils';
// Extended sort params for items service
export const SortParamsSchema = z.object({
orderBy: z.string().optional(),
sortBy: z.string().optional(),
sortOrder: z.enum(['asc', 'desc']).optional(),
});
// Core product schemas based on InvMast.json
export const ProductSchema = z.object({
invMastUid: z.coerce.number(),
itemId: z.string().max(40),
itemDesc: z.string().max(255),
upc: z.string().nullable().optional(),
unitOfMeasure: z.string().max(10).optional(),
listPrice: z.number().optional(),
stdPrice: z.number().optional(),
statusCd: z.number(),
onlineCd: z.coerce.number().optional(),
displayOnWebFlag: z.string().max(1).optional(),
deleteFlag: z.string().max(1).optional(),
dateCreated: mysqlDatetimeSchema().optional(),
dateLastModified: mysqlDatetimeSchema().optional(),
createdBy: z.string().max(255).optional(),
lastMaintainedBy: z.string().max(255).optional(),
updateCd: z.number().optional(),
processCd: z.number().optional(),
typeCd: z.number().optional(),
brandName: z.string().max(255).nullable().optional(),
brandId: z.string().max(255).nullable().optional(),
brandsUid: z.number().nullable().optional(),
weight: z.number().nullable().optional(),
weightUnitOfMeasure: z.string().max(10).nullable().optional(),
length: z.number().nullable().optional(),
width: z.number().nullable().optional(),
height: z.number().nullable().optional(),
dimensionUnitOfMeasure: z.string().max(10).nullable().optional(),
categories: z
.array(z.object({
categoryUid: z.number(),
categoryDesc: z.string(),
}))
.optional(),
attributes: z
.array(z.object({
attributeId: z.string(),
value: z.string(),
}))
.optional(),
images: z
.array(z.object({
imageUid: z.number(),
imagePath: z.string(),
}))
.optional(),
accessories: z.array(z.unknown()).optional(),
alternateCode: z.array(z.unknown()).optional(),
});
// Product detail schema for detailed responses
export const ProductDetailSchema = z.object({
invMastUid: z.coerce.number(),
itemId: z.string().max(40),
itemDesc: z.string().max(255),
upc: z.string().nullable().optional(),
unitOfMeasure: z.string().max(10).nullable().optional(),
listPrice: z.number().nullable().optional(),
stdPrice: z.number().nullable().optional(),
statusCd: z.number(),
onlineCd: z.number(),
displayOnWebFlag: z.string().max(1),
deleteFlag: z.string().max(1),
dateCreated: mysqlDatetimeSchema(),
dateLastModified: mysqlDatetimeSchema(),
createdBy: z.string().max(255),
lastMaintainedBy: z.string().max(255),
updateCd: z.number(),
processCd: z.number(),
typeCd: z.number(),
brandName: z.string().max(255).nullable().optional(),
brandId: z.string().max(255).nullable().optional(),
brandsUid: z.number().nullable().optional(),
weight: z.number().nullable().optional(),
weightUnitOfMeasure: z.string().max(10).nullable().optional(),
length: z.number().nullable().optional(),
width: z.number().nullable().optional(),
height: z.number().nullable().optional(),
dimensionUnitOfMeasure: z.string().max(10).nullable().optional(),
itemType: z.string().max(50).nullable().optional(),
lotControlled: z.string().max(1).nullable().optional(),
serialControlled: z.string().max(1).nullable().optional(),
shelfLife: z.number().nullable().optional(),
shelfLifeUnitOfMeasure: z.string().max(10).nullable().optional(),
hazardous: z.string().max(1).nullable().optional(),
fragile: z.string().max(1).nullable().optional(),
temperatureControlled: z.string().max(1).nullable().optional(),
minOrderQuantity: z.number().nullable().optional(),
maxOrderQuantity: z.number().nullable().optional(),
orderMultiple: z.number().nullable().optional(),
leadTime: z.number().nullable().optional(),
leadTimeUnitOfMeasure: z.string().max(10).nullable().optional(),
categories: z
.array(z.object({
categoryUid: z.number(),
categoryDesc: z.string(),
}))
.optional(),
attributes: z
.array(z.object({
attributeId: z.string(),
value: z.string(),
}))
.optional(),
images: z
.array(z.object({
imageUid: z.number(),
imagePath: z.string(),
}))
.optional(),
accessories: z.array(z.unknown()).optional(),
alternateCode: z.array(z.unknown()).optional(),
});
// Product lookup schema for simple lookups
export const ProductLookupSchema = z.object({
invMastUid: z.coerce.number(),
itemId: z.string().max(40),
itemDesc: z.string().max(255),
upc: z.string().nullable().optional(),
unitOfMeasure: z.string().max(10).nullable().optional(),
listPrice: z.number().nullable().optional(),
stdPrice: z.number().nullable().optional(),
statusCd: z.number(),
onlineCd: z.number(),
displayOnWebFlag: z.string().max(1),
deleteFlag: z.string().max(1),
brandName: z.string().max(255).nullable().optional(),
brandId: z.string().max(255).nullable().optional(),
brandsUid: z.number().nullable().optional(),
});
// Parameter schemas for product endpoints
export const ProductSearchParamsSchema = z.object({
q: z.string(),
limit: z.coerce.number().int().positive().optional(),
offset: z.coerce.number().int().min(0).optional(),
statusCd: z.coerce.number().optional(),
onlineCd: z.coerce.number().optional(),
orderBy: z.string().optional(),
displayOnWebFlag: z.string().optional(),
brandId: z.string().optional(),
categoryPath: z.string().optional(),
minPrice: z.coerce.number().optional(),
maxPrice: z.coerce.number().optional(),
inStock: z.boolean().optional(),
});
export const ProductListParamsSchema = z.object({
limit: z.coerce.number().int().positive().optional(),
offset: z.coerce.number().int().min(0).optional(),
statusCd: z.coerce.number().optional(),
onlineCd: z.coerce.number().optional(),
orderBy: z.string().optional(),
displayOnWebFlag: z.string().optional(),
q: z.string().optional(),
brandId: z.string().optional(),
categoryPath: z.string().optional(),
minPrice: z.coerce.number().optional(),
maxPrice: z.coerce.number().optional(),
inStock: z.boolean().optional(),
});
export const ProductDetailParamsSchema = z.object({
invMastUid: z.coerce.number(),
includeCategories: z.boolean().optional(),
includeAttributes: z.boolean().optional(),
includeImages: z.boolean().optional(),
includeAccessories: z.boolean().optional(),
includeAlternateCodes: z.boolean().optional(),
includeStock: z.boolean().optional(),
});
export const ProductLookupParamsSchema = z.object({
q: z.string().optional(),
limit: z.coerce.number().int().positive().optional(),
offset: z.coerce.number().int().min(0).optional(),
statusCd: z.coerce.number().optional(),
onlineCd: z.coerce.number().optional(),
displayOnWebFlag: z.string().optional(),
brandId: z.string().optional(),
});
export const ProductPreCacheParamsSchema = z.object({
invMastUid: z.coerce.number(),
});
// Alternate Code schemas
export const AlternateCodeSchema = z.object({
alternateCodeUid: z.number(),
codeType: z.string(),
codeValue: z.string(),
description: z.string().optional(),
});
// Accessory schemas
export const AccessorySchema = z.object({
accessoryUid: z.number(),
invMastUid: z.coerce.number(),
accessoryInvMastUid: z.number(),
accessoryType: z.string().optional(),
quantity: z.number().optional(),
itemId: z.string(),
itemDesc: z.string(),
});
// Stock/Inventory schemas
export const BinInfoSchema = z.object({
locationId: z.string(),
bin: z.string(),
qtyOnHand: z.number().optional(),
qtyAllocated: z.number().optional(),
qtyAvailable: z.number().optional(),
});
export const StockLocationSchema = z.object({
locationId: z.string(),
qtyOnHand: z.number(),
qtyAllocated: z.number(),
qtyAvailable: z.number(),
qtyBackordered: z.number().optional(),
qtyOnOrder: z.number().optional(),
});
export const StockSummarySchema = z.object({
totalQtyOnHand: z.number(),
totalQtyAvailable: z.number(),
totalQtyAllocated: z.number(),
});
export const StockDetailsSchema = z.object({
stocks: z.array(StockLocationSchema),
companySummary: StockSummarySchema,
});
// Response schemas using BaseResponseSchema (8-field format)
export const ProductResponseSchema = BaseResponseSchema(ProductSchema);
export const ProductDetailResponseSchema = BaseResponseSchema(ProductDetailSchema);
export const ProductListResponseSchema = BaseResponseSchema(z.array(ProductSchema));
export const ProductLookupResponseSchema = BaseResponseSchema(z.array(ProductLookupSchema));
export const ProductPreCacheResponseSchema = BaseResponseSchema(z.boolean());
export const AccessoryListResponseSchema = BaseResponseSchema(z.array(AccessorySchema));
export const BinInfoListResponseSchema = BaseResponseSchema(z.array(BinInfoSchema));
export const StockDetailsResponseSchema = BaseResponseSchema(StockDetailsSchema);
//# sourceMappingURL=products.js.map