feat: enforce order status checks for item addition in pedidos to prevent modifications in restricted states

This commit is contained in:
2025-12-11 11:50:04 -03:00
parent 3aa1e49ddb
commit 84dbe50fce

View File

@@ -522,6 +522,16 @@ export const acceptOrder = mutation({
const pedido = await ctx.db.get(args.pedidoId); const pedido = await ctx.db.get(args.pedidoId);
if (!pedido) throw new Error('Pedido não encontrado.'); 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') { if (pedido.status !== 'aguardando_aceite') {
throw new Error('Este pedido não está 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). // modalidade e a mesma ata (quando houver).
await ensurePedidoModalidadeAtaConsistency(ctx, args.pedidoId, args.modalidade, args.ataId); await ensurePedidoModalidadeAtaConsistency(ctx, args.pedidoId, args.modalidade, args.ataId);
// --- CHECK ANALYSIS / ACCEPTANCE MODE --- // --- CHECK ANALYSIS MODE ---
if (pedido.status === 'em_analise' || pedido.status === 'aguardando_aceite') { // 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', { await ctx.db.insert('solicitacoesItens', {
pedidoId: args.pedidoId, pedidoId: args.pedidoId,
tipo: 'adicao', tipo: 'adicao',