Skip to content

refactor(compare): unifica subsistema de comparação ao tipo Product de product-catalog (-24 erros baseline)#197

Merged
adm01-debug merged 2 commits into
mainfrom
claude/unify-compare-product-types
May 24, 2026
Merged

refactor(compare): unifica subsistema de comparação ao tipo Product de product-catalog (-24 erros baseline)#197
adm01-debug merged 2 commits into
mainfrom
claude/unify-compare-product-types

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 24, 2026

Resumo

Continuação do #177 (já mergeado). Unifica os 7 arquivos restantes do subsistema de comparação ao tipo correto @/types/product-catalog, eliminando 24 erros de baseline TSC com zero regressão e zero mudança de runtime.

Causa-raiz

Existem 3 tipos Product no projeto. O shape de runtime dos produtos que chegam à comparação (via getProductsByIdsmapPromobrindToProduct) é camelCase (@/types/product-catalog: minQuantity, stockStatus, colors, images, supplier/category aninhados não-nulos).

Estes 7 arquivos liam corretamente os campos camelCase em runtime, mas estavam tipados como @/types/product (snake_case). Resultado: eram runtime-corretos porém type-inválidos — cada acesso camelCase gerava TS2551/TS2339 no baseline.

Mudança (puro swap de import, sem lógica)

6 componentes-irmãos — troca de import @/types/product@/types/product-catalog:
AIComparisonAdvisor, ComparisonDuelView, ComparisonMobileView, ComparisonPresentationLauncher, ComparisonRadarChart, FloatingCompareBar.

ComparePage.tsx — troca de import + limpeza do call-site: removida a asserção as unknown as CompareEntry[] e o comentário de débito técnico que o #177 havia introduzido (agora desnecessários, pois página e CompareTableView compartilham o mesmo tipo).

Os 3 filhos que ainda tipam Record<string, unknown>[] (ComparisonScoreCard, ExportComparisonButton, SimilarProductsRail) foram deixados intactos — ver follow-up.

Validação (same-env, container)

  • TSC: 1273 → 1249 = −24 erros, zero regressão. Por arquivo: AIComparisonAdvisor −2, ComparisonDuelView −3, ComparisonMobileView −4, ComparisonPresentationLauncher −3, ComparisonRadarChart −2, FloatingCompareBar −3, ComparePage −7.
  • Regressão (comm -13): o único item é ComparePage(388) — o mesmo erro pré-existente do SimilarProductsRail (boundary com filho Record[]), deslocado de 394→388 pela remoção do comentário de 6 linhas. ComparePage caiu de 10→3 erros; os 3 restantes (213/243/388) são exatamente os boundaries pré-existentes com os 3 filhos não migrados.
  • Build de produção: vite build exit 0.
  • ESLint: apenas 2 itens (Minus/ref não usados), ambos já presentes no .eslint-baseline.json e em linhas não tocadas pelo diff (pré-existentes).
  • Fidelidade: os 7 blobs validados por SHA-1 (git hash-object local == árvore remota).
  • Baseline (.tsc-baseline.json) deixado intacto de propósito (rastreia código→contagem por arquivo; reduções passam no gate sem update; o CI pode regenerar).

Follow-up (fora de escopo)

Os 3 filhos Record<string, unknown>[] (ComparisonScoreCard, ExportComparisonButton, SimilarProductsRail) consomem tipos de retorno de hooks (useComparisonScore, useProducts) que são eles próprios quebrados no baseline. Migrá-los agora introduz erros novos (medido: +2 líquido). Pertencem a um refactor mais profundo dedicado a esses hooks.


Summary by cubic

Unifica o subsistema de comparação ao tipo Product de @/types/product-catalog, alinhando o shape camelCase de runtime e removendo casts inseguros. Sem mudanças de lógica; elimina 24 erros do baseline do TSC.

  • Refactors
    • Swap de import em 6 componentes: @/types/product@/types/product-catalog.
    • ComparePage.tsx: migra para product-catalog e remove a asserção as unknown as CompareEntry[].
    • Três filhos que ainda usam Record<string, unknown>[] permanecem; migração virá com o refactor dos hooks.

Written for commit 1a479c5. Summary will update on new commits. Review in cubic

…alog\n\nMigra ComparePage de @/types/product (snake_case) para\n@/types/product-catalog (camelCase), que casa com o shape de runtime vindo\nde getProductsByIds -> mapPromobrindToProduct. Remove a asser\u00e7\u00e3o\n'as unknown as CompareEntry[]' e o coment\u00e1rio de d\u00e9bito t\u00e9cnico do PR #177,\nagora desnecess\u00e1rios. Elimina 7 erros TSC reais.
…de product-catalog\n\nMigra AIComparisonAdvisor, ComparisonDuelView, ComparisonMobileView,\nComparisonPresentationLauncher, ComparisonRadarChart e FloatingCompareBar\nde @/types/product (snake_case) para @/types/product-catalog (camelCase).\nTodos j\u00e1 liam campos camelCase em runtime (minQuantity/stockStatus/colors/\nimages/supplier) \u2014 eram runtime-corretos mas type-inv\u00e1lidos. Swap puro de\nimport, sem mudan\u00e7a de l\u00f3gica. Elimina 17 erros TSC (TS2551/TS2339) reais.\nValidado same-env: 1273 -> 1249 (-24 com a ComparePage), zero regress\u00e3o.
Copilot AI review requested due to automatic review settings May 24, 2026 00:01
@vercel
Copy link
Copy Markdown

vercel Bot commented May 24, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
we-dream-big Ready Ready Preview, Comment May 24, 2026 12:01am

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 24, 2026

Warning

Review limit reached

@adm01-debug, we couldn't start this review because you've used your available PR reviews for now.

Your plan currently allows 1 review/hour. Refill in 42 minutes and 36 seconds.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more review capacity refills, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 56da7ec2-8e46-4e2b-81e8-8b2b0980c099

📥 Commits

Reviewing files that changed from the base of the PR and between aa9ba01 and 1a479c5.

📒 Files selected for processing (7)
  • src/components/compare/AIComparisonAdvisor.tsx
  • src/components/compare/ComparisonDuelView.tsx
  • src/components/compare/ComparisonMobileView.tsx
  • src/components/compare/ComparisonPresentationLauncher.tsx
  • src/components/compare/ComparisonRadarChart.tsx
  • src/components/compare/FloatingCompareBar.tsx
  • src/pages/products/ComparePage.tsx
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/unify-compare-product-types

Comment @coderabbitai help to get the list of available commands and usage tips.

@supabase
Copy link
Copy Markdown

supabase Bot commented May 24, 2026

This pull request has been ignored for the connected project doufsxqlfjyuvxuezpln because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@adm01-debug adm01-debug merged commit 514dcd8 into main May 24, 2026
21 of 24 checks passed
@adm01-debug adm01-debug deleted the claude/unify-compare-product-types branch May 24, 2026 00:03
@adm01-debug adm01-debug review requested due to automatic review settings May 24, 2026 00:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant