import { initContract } from '@ts-rest/core'; import { z } from 'zod'; import { errorResponseSchema } from '../schemas/common.schemas'; const c = initContract(); const barcodeProductSchema = z.object({ id: z.string().uuid(), barcode: z.string(), name: z.string(), brand: z.string().nullable(), category: z.string().nullable(), imageUrl: z.string().nullable(), }); export const shopkeeperBarcodesContract = c.router({ lookupBarcode: { method: 'GET', path: '/shopkeeper/barcodes/:barcode', pathParams: z.object({ barcode: z.string() }), responses: { 200: barcodeProductSchema.nullable(), 401: errorResponseSchema, }, summary: 'Lookup product by barcode', }, submitBarcode: { method: 'POST', path: '/shopkeeper/barcodes', body: z.object({ barcode: z.string(), name: z.string().min(1), brand: z.string().optional(), category: z.string().optional(), }), responses: { 201: barcodeProductSchema, 400: errorResponseSchema, 401: errorResponseSchema, 409: errorResponseSchema, }, summary: 'Submit new barcode→product mapping', }, });