Skip to content

Commit cc0b6da

Browse files
npslaneyclaude
andcommitted
feat(api-contract): add CRUD methods to products contract
Add get, create, update, delete endpoints to products contract. Keep existing list endpoint unchanged (no pagination). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 37216cc commit cc0b6da

1 file changed

Lines changed: 37 additions & 0 deletions

File tree

src/contracts/products.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { oc } from "@orpc/contract";
22
import { z } from "zod";
33
import { CurrencySchema } from "../schemas/currency";
4+
import { ProductPriceInputSchema } from "../schemas/product-price-input";
45

56
export const ProductPriceSchema = z.object({
67
id: z.string(),
@@ -31,6 +32,42 @@ export const listProductsContract = oc
3132
.input(z.object({}).optional())
3233
.output(ListProductsOutputSchema);
3334

35+
// CRUD input schemas
36+
const CreateProductInputSchema = z.object({
37+
name: z.string().min(1),
38+
description: z.string().optional(),
39+
price: ProductPriceInputSchema,
40+
userMetadata: z.record(z.string(), z.string()).optional(),
41+
});
42+
43+
const UpdateProductInputSchema = z.object({
44+
id: z.string(),
45+
name: z.string().min(1).optional(),
46+
description: z.string().optional(),
47+
price: ProductPriceInputSchema.optional(),
48+
userMetadata: z.record(z.string(), z.string()).optional(),
49+
});
50+
51+
export const getProductContract = oc
52+
.input(z.object({ id: z.string() }))
53+
.output(ProductSchema);
54+
55+
export const createProductContract = oc
56+
.input(CreateProductInputSchema)
57+
.output(ProductSchema);
58+
59+
export const updateProductContract = oc
60+
.input(UpdateProductInputSchema)
61+
.output(ProductSchema);
62+
63+
export const deleteProductContract = oc
64+
.input(z.object({ id: z.string() }))
65+
.output(z.object({ ok: z.literal(true) }));
66+
3467
export const products = {
3568
list: listProductsContract,
69+
get: getProductContract,
70+
create: createProductContract,
71+
update: updateProductContract,
72+
delete: deleteProductContract,
3673
};

0 commit comments

Comments
 (0)