From 84dbe50fcefc5568dec7cc2cfb565eaa15594828 Mon Sep 17 00:00:00 2001 From: killer-cf Date: Thu, 11 Dec 2025 11:50:04 -0300 Subject: [PATCH] feat: enforce order status checks for item addition in pedidos to prevent modifications in restricted states --- packages/backend/convex/pedidos.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/backend/convex/pedidos.ts b/packages/backend/convex/pedidos.ts index 3a0d976..cacf126 100644 --- a/packages/backend/convex/pedidos.ts +++ b/packages/backend/convex/pedidos.ts @@ -522,6 +522,16 @@ export const acceptOrder = mutation({ const pedido = await ctx.db.get(args.pedidoId); if (!pedido) throw new Error('Pedido não encontrado.'); + // Só é permitido adicionar itens em pedidos em rascunho, aguardando aceite ou em análise. + // Nos demais status (ex.: precisa_ajustes, concluído, cancelado etc.) a inclusão é bloqueada. + if ( + pedido.status !== 'em_rascunho' && + pedido.status !== 'aguardando_aceite' && + pedido.status !== 'em_analise' + ) { + throw new Error('Não é possível adicionar itens neste status de pedido.'); + } + if (pedido.status !== 'aguardando_aceite') { throw new Error('Este pedido não está aguardando aceite.'); } @@ -658,8 +668,10 @@ export const addItem = mutation({ // modalidade e a mesma ata (quando houver). await ensurePedidoModalidadeAtaConsistency(ctx, args.pedidoId, args.modalidade, args.ataId); - // --- CHECK ANALYSIS / ACCEPTANCE MODE --- - if (pedido.status === 'em_analise' || pedido.status === 'aguardando_aceite') { + // --- CHECK ANALYSIS MODE --- + // Em pedidos em análise, a inclusão de itens deve passar por fluxo de aprovação. + // Em rascunho ou aguardando aceite, a inclusão é direta, sem necessidade de aprovação. + if (pedido.status === 'em_analise') { await ctx.db.insert('solicitacoesItens', { pedidoId: args.pedidoId, tipo: 'adicao',