feat(catalog): filtro de preço e seletor de pauta
- Catálogo só mostra produtos com preço preenchido (vl_preco1 > 0) por default - Novo endpoint GET /catalog/pautas — retorna as 6 pautas do representante logado - GET /catalog?idPauta=N — usa preço da pauta selecionada (vw_pauta_produtos) - CatalogPage: dropdown "Selecionar pauta de preços" com as pautas do rep - product.contract: adiciona PautaSchema e idPauta no ProdutoListQuerySchema Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,7 @@ export const ProdutoSummarySchema = z.object({
|
||||
codigo: z.string(),
|
||||
descricao: z.string(),
|
||||
unidade: z.string().nullable(),
|
||||
vlPreco1: z.string(),
|
||||
vlPreco1: z.string(), // preço base (vw_produtos) ou preço da pauta selecionada
|
||||
codGrupo: z.number().int().nullable(),
|
||||
grupo: z.string().nullable(),
|
||||
codSubgrupo: z.number().int().nullable(),
|
||||
@@ -21,6 +21,13 @@ export const ProdutoSummarySchema = z.object({
|
||||
qtdEstoque: z.string().nullable(),
|
||||
listaParauta: z.number().int().nullable(),
|
||||
});
|
||||
|
||||
export const PautaSchema = z.object({
|
||||
idPauta: z.number().int(),
|
||||
codigo: z.number().int(),
|
||||
descricao: z.string(),
|
||||
});
|
||||
export type Pauta = z.infer<typeof PautaSchema>;
|
||||
export type ProdutoSummary = z.infer<typeof ProdutoSummarySchema>;
|
||||
|
||||
// ─── Produto Detail ───────────────────────────────────────────────────────────
|
||||
@@ -44,6 +51,7 @@ export type ProdutoDetail = z.infer<typeof ProdutoDetailSchema>;
|
||||
export const ProdutoListQuerySchema = z.object({
|
||||
q: z.string().optional(),
|
||||
codGrupo: z.coerce.number().int().optional(),
|
||||
idPauta: z.coerce.number().int().optional(),
|
||||
page: z.coerce.number().int().positive().default(1),
|
||||
limit: z.coerce.number().int().min(1).max(200).default(50),
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user