// apps/inventory/src/api/listProducts.ts
import { z } from 'zod';
import { createEndpoint } from 'zitejs/backend';
import { zite } from 'zitejs/db';
export default createEndpoint({
description: 'List products, optionally filtered by category, name search, or exact SKU',
authenticated: true,
inputSchema: z.object({
category: z.string().optional(),
search: z.string().optional(),
sku: z.string().optional(),
}),
outputSchema: z.object({
products: z.array(z.object({
id: z.string(),
name: z.string(),
sku: z.string(),
price: z.number().nullable(),
quantity: z.number().nullable(),
category: z.string().nullable(),
})),
}),
execute: async ({ input }) => {
const filter: Record<string, unknown> = {};
if (input.category) filter.category = input.category;
if (input.sku) filter.sku = input.sku;
if (input.search) filter.name = { contains: input.search };
const { records } = await zite.Products.findAll({
filter: Object.keys(filter).length ? filter : undefined,
sort: [{ field: 'name', direction: 'asc' }],
limit: 500,
});
return {
products: records.map(p => ({
id: p.id, name: p.name, sku: p.sku,
price: p.price, quantity: p.quantity, category: p.category,
})),
};
},
});