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:
d72d3ca3feat(#194760): adiciona feature flags de upsell no remote config796fdba6feat(#194760): adiciona step recomendar no stepper de venda952e4b12feat(#194760): implementa tela e logica de recomendacao upsell73952f3crefactor(#194760): migracao de icones/refactor bottom bared58687cfix(#194760): ajuste de referencias de iconeba14becefeat(#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
- fluxo novo de upsell (
Cobertura de testes
Comando executado em ambas as branches:
flutter test --coverage
| Branch | LF | LH | Cobertura (%) | Diferenca vs develop |
|---|---|---|---|---|
develop | 45088 | 2423 | 5.37 | 0.00 p.p. |
feat/194760_upsell_v1 | 45713 | 2792 | 6.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
-
[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
hasLoadedRecommendationspode permanecertrue, 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.
- Arquivo:
-
[Baixo] Ausencia de observabilidade em erro de fetch
- Arquivo:
lib/controllers/sell/new_sell/upsell_recommendation_controller.dart - Ponto: bloco
catchemfetchRecommendations() - Problema: a excecao e suprimida sem log/telemetria.
- Impacto: diagnostico mais dificil em producao.
- Sugestao: adicionar log estruturado (mensagem + stacktrace) e evento de erro.
- Arquivo:
-
[Baixo] Uso de force unwrap em recommendedItems
- Arquivo:
lib/controllers/cart/cart_controller.dart - Pontos:
removeRecommendedItem()eapplyRecommendedItemDiscount() - 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;).
- Arquivo:
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.