Backfill the completed acquisitions, sales, dashboard, pricing, search, public detail, worker, migration, contracts, validation, tests, and implementation-status changes into one verified application slice.
52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
import { z } from "zod";
|
|
|
|
const isoDate = /^\d{4}-\d{2}-\d{2}$/;
|
|
const currencyCode = /^[A-Za-z]{3}$/;
|
|
const saleItemSchema = z.object({
|
|
inventoryItemId: z.uuid(),
|
|
soldPriceMinor: z.int().positive(),
|
|
costBasisMinor: z.int().nonnegative(),
|
|
});
|
|
|
|
export const createSaleSchema = z
|
|
.object({
|
|
inventoryItemId: z.uuid(),
|
|
costBasisMinor: z.int().nonnegative(),
|
|
saleDate: z.string().trim().regex(isoDate),
|
|
saleLocation: z.string().trim().max(255).optional(),
|
|
soldPriceMinor: z.int().positive(),
|
|
currency: z.string().trim().regex(currencyCode).optional(),
|
|
platformFeesMinor: z.int().nonnegative().optional(),
|
|
paymentProcessingFeesMinor: z.int().nonnegative().optional(),
|
|
shippingCostMinor: z.int().nonnegative().optional(),
|
|
taxesMinor: z.int().nonnegative().optional(),
|
|
otherFeesMinor: z.int().nonnegative().optional(),
|
|
buyerName: z.string().trim().max(255).optional(),
|
|
buyerContact: z.string().trim().max(255).optional(),
|
|
notes: z.string().trim().max(10000).optional(),
|
|
})
|
|
.strict();
|
|
|
|
export const createMultiItemSaleSchema = z
|
|
.object({
|
|
items: z.array(saleItemSchema).min(2),
|
|
saleDate: z.string().trim().regex(isoDate),
|
|
saleLocation: z.string().trim().max(255).optional(),
|
|
currency: z.string().trim().regex(currencyCode).optional(),
|
|
platformFeesMinor: z.int().nonnegative().optional(),
|
|
paymentProcessingFeesMinor: z.int().nonnegative().optional(),
|
|
shippingCostMinor: z.int().nonnegative().optional(),
|
|
taxesMinor: z.int().nonnegative().optional(),
|
|
otherFeesMinor: z.int().nonnegative().optional(),
|
|
buyerName: z.string().trim().max(255).optional(),
|
|
buyerContact: z.string().trim().max(255).optional(),
|
|
notes: z.string().trim().max(10000).optional(),
|
|
})
|
|
.strict();
|
|
|
|
export const voidSaleSchema = z
|
|
.object({
|
|
reason: z.string().trim().min(3).max(1000),
|
|
})
|
|
.strict();
|