fix(cart): erro consistente nos fluxos do vendedor + migration #339#358
Conversation
…e personalização) Fluxos de usuário (foco da auditoria pré-produção): - useSellerCarts.ts: 10 mutations (addItem, removeItem, updateItemQuantity, updateItemNotes, updateItemSortOrder, deleteCart, updateCartNotes, updateCartStatus, moveItemToCart, duplicateItemToCart, restoreItems) engoliam falhas silenciosamente. Adiciona onError com toast + sanitizeError. - updateItemSortOrder: aplica em série e aborta no 1º erro (era Promise.all que engolia falhas individuais) + revalida do servidor em falha p/ desfazer ordem parcial. - duplicateItemToCart: copia sort_order (antes ficava null → posição inesperada). #339 — personalização: confirmado via banco ao vivo que 6 colunas referenciadas pelo front-end não existem. Migration aditiva idempotente redigida (IF NOT EXISTS), NÃO aplicada em produção — aguarda revisão/deploy pelo pipeline normal. Gates: build OK, baseline TSC sem regressão, testes do carrinho 8/8. https://claude.ai/code/session_01FUXFRgtPYpiR6GNx4wRXqn
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
WalkthroughA sessão 2026-05-25 endurece fluxos críticos do promo-gifts-v4: adiciona 6 colunas de personalização via migration idempotente ( ChangesHardening de fluxos de usuário - promo-gifts-v4
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Possibly related PRs
Suggested labels
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
Updates to Preview Branch (claude/project-comprehensive-audit-555Dk) ↗︎
Tasks are run on every commit but only new migration files are pushed.
❌ Branch Error • Tue, 26 May 2026 00:03:59 UTC View logs for this Workflow Run ↗︎. |
…rde)
- Usa untypedFrom(q.table) p/ as queries de tabela dinâmica em vez de
supabase.from(string) — elimina o TS2769 ("No overload matches") e o
TS2345 do forEach sobre GenericStringError[], e remove 3 casts (builder as any).
- Tipa o callback do filtro de cor com type guard (string | objeto) em vez de
Record<string,string> — elimina o TS2345 restante.
Dívida pré-existente da branch (arquivo não tocado pelo meu commit de carrinho).
Gates: TSC baseline sem regressão (drift +25), ESLint baseline sem regressão (+4).
https://claude.ai/code/session_01FUXFRgtPYpiR6GNx4wRXqn
There was a problem hiding this comment.
Pull request overview
Este PR foca em melhorar a confiabilidade dos fluxos do vendedor (especialmente carrinho), garantindo feedback consistente de erro ao usuário, e adiciona uma migration aditiva/idempotente para corrigir drift de schema relacionado ao Issue #339 (colunas de personalização ausentes).
Changes:
- Padroniza
onErrornas mutations do carrinho (toast +sanitizeError) e torna a reordenação mais segura (serial/abort on first error). - Ajusta
duplicateItemToCartpara copiarsort_order, preservando a posição do item duplicado. - Adiciona migration idempotente restaurando 6 colunas ausentes para personalização (#339) e pequenos ajustes de typecheck/robustez no
useGlobalSearch(incluindountypedFrom).
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| supabase/migrations/20260525232003_fix_339_personalization_missing_columns.sql | Migration aditiva/idempotente para repor colunas ausentes de personalização (#339). |
| STATUS.md | Atualiza o status da última sessão e registra achados/correções. |
| src/hooks/products/useSellerCarts.ts | Adiciona onError consistente nas mutations e melhora a lógica de reorder/duplicate. |
| src/components/search/useGlobalSearch.ts | Ajustes de tipagem/robustez em queries dinâmicas (uso de untypedFrom) e pequenos guards. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| onError: (err: Error) => { | ||
| toast.error('Não foi possível adicionar ao carrinho', { description: sanitizeError(err) }); | ||
| }, |
| onError: (err: Error) => { | ||
| toast.error('Não foi possível restaurar os itens', { description: sanitizeError(err) }); | ||
| }, |
| let builder = untypedFrom(q.table).select(q.select); | ||
| if (q.type === 'category') | ||
| builder = builder | ||
| .eq('is_active', true) | ||
| .or(`category_name.ilike.%${term}%,description.ilike.%${term}%`); | ||
| else if (q.type === 'collection') builder = builder.ilike('name', `%${term}%`); |
Contexto
Auditoria pré-produção solicitada como "análise exaustiva, achar falhas/gaps e corrigir para 10/10". Dado o tamanho/maturidade do sistema (~90 edge functions, ~840 migrations, ~1.010 erros TS / ~442 ESLint já aceitos como baseline, ~20 auditorias anteriores), o escopo foi bounded com o solicitante para os fluxos de usuário do vendedor (catálogo → carrinho → orçamento → kit-builder) + advisors read-only no banco de produção.
Plano aprovado:
/root/.claude/plans/com-todo-seu-conhecimento-twinkling-crown.md.O que foi corrigido
1. Carrinho — falhas silenciosas (
src/hooks/products/useSellerCarts.ts)Dos ~13 mutations, só
createCart/duplicateCarttinhamonError. As demais engoliam erros (RLS/rede/constraint) sem qualquer feedback ao usuário — o item simplesmente não aparecia/atualizava.onErrorconsistente (toast +sanitizeErrorjá existente) a:addItem,removeItem,updateItemQuantity,updateItemNotes,updateItemSortOrder,deleteCart,updateCartNotes,updateCartStatus,moveItemToCart,duplicateItemToCart,restoreItems.updateItemSortOrder: eraPromise.allque engolia falhas individuais → agora aplica em série, abortando no 1º erro e revalida do servidor em falha (desfaz a ordem parcial otimista).duplicateItemToCart: passou a copiarsort_order(antes ficavanull→ item duplicado aparecia em posição inesperada).2. Issue #339 — colunas de personalização ausentes (migration redigida, não aplicada)
Confirmado via banco de produção ao vivo (advisor read-only) que 6 colunas referenciadas pelo front-end não existem (a migration de restore de 24/05 recriou as tabelas com schema mínimo; os call-sites foram apenas anotados com
@deprecated TODO(#339)):product_component_locationsarea_image_url,max_area_cm2product_component_location_techniquesis_defaultproduct_group_locationsarea_image_urlproduct_group_componentsis_personalizableproduct_group_location_techniquesis_defaultSintoma: upload de imagem de área e toggle "definir como padrão" não persistem (write falha PGRST204 / read sempre
undefined).➡️ Migration aditiva e idempotente (
IF NOT EXISTS) redigida emsupabase/migrations/20260525232003_fix_339_personalization_missing_columns.sql. NÃO foi aplicada em produção — aguarda revisão e deploy pelo pipeline normal de migrations. (A feature foi deliberadamente deferida em 24/05; aplicar é decisão do time.)Verificação
npm run build✅ (1m11s)npm run typecheck(baseline TSC) ✅ — zero regressãotests/hooks/useSellerCarts.test.tsx+SortableCartItemExcellence(8/8)Cross-reference: advisors do banco ao vivo (read-only, nada alterado)
SECURITY DEFINERexecutável, 2 buckets públicos, 1search_pathmutável.auth_rls_initplan, 1auth_db_connections_absolute(= P0 fix(quotes): alinhar shipping_type=fob vs fob_pre em UI/RPC/dados #6 já documentado, só resolvível no Dashboard). Nenhum ERROR.Fora de escopo desta rodada (registrado, não tocado)
auth_db_connections_absolute(Dashboard), reorg de schema, reavaliação de índices,SECURITY DEFINER/buckets (foco era fluxos de usuário, não DB hardening).Test plan
https://claude.ai/code/session_01FUXFRgtPYpiR6GNx4wRXqn
Generated by Claude Code
Summary by cubic
Fixes silent failures in seller cart flows with consistent error toasts and safer item reordering, and resolves typecheck regressions in
useGlobalSearch. Adds an additive, idempotent migration to restore missing personalization columns for #339 (staged, not applied).Bug Fixes
sanitizeError(no more silent failures).duplicateItemToCartnow copiessort_orderto keep item position.untypedFromand added a color type guard, fixing typecheck regressions inuseGlobalSearch.Migration
product_component_locations(area_image_url,max_area_cm2),product_component_location_techniques(is_default),product_group_locations(area_image_url),product_group_components(is_personalizable),product_group_location_techniques(is_default).IF NOT EXISTS).Written for commit a5f848f. Summary will update on new commits. Review in cubic
Summary by CodeRabbit
Release Notes
Bug Fixes
Refactor