Skip to main content

Code Review - diff develop...feat/194760_upsell_v1

Data: 2026-06-10

Escopo analisado

  • Comparacao de branches: develop...feat/194760_upsell_v1
  • Commits da feature:
    • d72d3ca3 feat(#194760): adiciona feature flags de upsell no remote config
    • 796fdba6 feat(#194760): adiciona step recomendar no stepper de venda
    • 952e4b12 feat(#194760): implementa tela e logica de recomendacao upsell
    • 73952f3c refactor(#194760): migracao de icones/refactor bottom bar
    • ed58687c fix(#194760): ajuste de referencias de icone
    • ba14bece feat(#194760): integra recomendados no checkout

Resumo do diff

  • 43 arquivos alterados.
  • Principais blocos:
    • fluxo novo de upsell (UpsellRecommendationController, UpsellRecommendationScreen, widgets)
    • nova rota AppRoutes.upsellRecommendation
    • atualizacao de stepper com etapa SteppSell.recomendar
    • integracao no checkout com secao de recomendados (CheckSellRecommended)
    • persistencia em CartDTO.recommendedItems
    • novos testes unitarios e widget tests para upsell

Cobertura de testes

Comando executado em ambas as branches:

flutter test --coverage
BranchLFLHCobertura (%)Diferenca vs develop
develop4508824235.370.00 p.p.
feat/194760_upsell_v14571327926.11+0.74 p.p.

Diferenca relativa de cobertura (feature vs develop): +13.78%.

Arquivos de cobertura salvos em:

  • /Users/alt-zz/projetos/arezzo/USs/194760/review/cover-develop
  • /Users/alt-zz/projetos/arezzo/USs/194760/review/cover-feat-194760_upsell_v1

Code review

Achados

  1. [Medio] Risco de recomendacao stale entre carrinhos elegiveis

    • Arquivo: lib/controllers/sell/new_sell/upsell_recommendation_controller.dart
    • Pontos: onInit, _onCartChanged, hasLoadedRecommendations, needFetchRecommendations
    • Problema: quando o carrinho muda de um carrinho elegivel para outro carrinho tambem elegivel, o estado nao e resetado. Como hasLoadedRecommendations pode permanecer true, um novo fetch pode nao ocorrer, reaproveitando recomendacoes do carrinho anterior.
    • Impacto: recomendacoes inconsistentes para cliente/carrinho atual.
    • Sugestao: resetar estado ao detectar troca de carrinho (ex.: idLocal, customerId, hash de itens) e disparar novo fetch.
  2. [Baixo] Ausencia de observabilidade em erro de fetch

    • Arquivo: lib/controllers/sell/new_sell/upsell_recommendation_controller.dart
    • Ponto: bloco catch em fetchRecommendations()
    • Problema: a excecao e suprimida sem log/telemetria.
    • Impacto: diagnostico mais dificil em producao.
    • Sugestao: adicionar log estruturado (mensagem + stacktrace) e evento de erro.
  3. [Baixo] Uso de force unwrap em recommendedItems

    • Arquivo: lib/controllers/cart/cart_controller.dart
    • Pontos: removeRecommendedItem() e applyRecommendedItemDiscount()
    • Problema: cart.recommendedItems! assume lista nao nula.
    • Impacto: baixo no fluxo atual (UI protege), mas aumenta fragilidade para chamadas futuras.
    • Sugestao: proteger com guard clause (if (cart.recommendedItems == null) return cart;).

Pontos positivos

  • Boa separacao de responsabilidades (controller/provider/screen/widgets).
  • Feature flag por Remote Config implementada com escopo por loja.
  • Cobertura adicional de testes para controller/model/widgets de upsell.
  • Integracao com checkout preserva fluxo existente e adiciona secao dedicada para recomendados.

Conclusao

  • Status recomendado: aprovado com ajustes.
  • Bloqueadores criticos: nenhum identificado.
  • Ajustes recomendados antes de merge: tratar reset de estado entre carrinhos no UpsellRecommendationController.