Skip to main content

Code Review — Feature flags de upsell no Firebase Remote Config

Arquivo: lib/services/firebase_remote_config_service.dart
Branch: feat/194760_upsell
Task: #193232
Alterações: +14 linhas, 0 deletadas
Data: 2026-06-03


Escopo da mudança

Adição de 2 feature flags para controle de upsell via Remote Config:

EnumChave FirebaseTipoGetter
enableUpsellRecommendationenable_upsell_recommendationbool_getBoolProperty
enableUpsellRecommendationByCodeStoreenable_upsell_recommendation_by_code_storeList<String>_getStringList

Verificação de requisitos (EARS)

RF-01 — Flag enable_upsell_recommendation

CritérioStatusEvidência
Enum enableUpsellRecommendation em FirebaseRemoteConfigKeysEnumLinha 181
Mapeamento enable_upsell_recommendation no extension .keyLinhas 283-284
Getter bool get enableUpsellRecommendation via _getBoolPropertyLinhas 406-408
Retorna false quando chave não existe no FirebaseComportamento padrão do FirebaseRemoteConfig.instance.getBool()

RF-02 — Flag enable_upsell_recommendation_by_code_store

CritérioStatusEvidência
Enum enableUpsellRecommendationByCodeStore no enumLinha 182
Mapeamento enable_upsell_recommendation_by_code_store no extension .keyLinhas 285-286
Getter List<String> get enableUpsellRecommendationByCodeStore via _getStringListLinhas 410-412
Formato com split por ;Reutiliza _getStringList() (linhas 429-434) que faz split por ';' e remove espaços
Retorna lista vazia para string vaziaComportamento padrão de "".split(';') retorna [""] — verificar se isso é aceitável (ver observação #4)

Análise

✅ O que está correto

  • Padrão consistente: Segue exatamente a estrutura de flags existentes (enableProductRecommendation, enableSpecialLink, isNPSEvaluationMandatory, etc.) — enum → key mapping → dictionary getter.
  • Nomenclatura: camelCase no Dart, snake_case no Firebase, conforme padrão do arquivo.
  • Tipagem correta: bool para flag global, List<String> para flag por loja (via _getStringList() com split por ;).
  • Ordenação alfabética: Enum values inseridos após enableConnectionDiagnostic (u > c).
  • Formatação: Indentação e espaçamento consistentes com o restante do arquivo.
  • Sem regressão: Nenhuma linha deletada, apenas adições.

Observações

#SeveridadeItem
1BaixaSem testes unitários. Nenhum teste foi adicionado para validar os novos getters do FirebaseRemoteConfigServiceDictionary. Embora sigam o padrão do arquivo (que também carece de testes para getters individuais), seria boa prática adicionar cobertura.
2BaixaNomes longos. enableUpsellRecommendationByCodeStore (38 chars) está no limite de legibilidade, mas mantém consistência com enableProductRecommendationByCodeStore (39 chars) — aceitável dentro do padrão do codebase.
3InformativoTypo pré-existente na chave enable_product_recomendation (linha 254, falta um 'm' em "recommendation"). As novas chaves estão grafadas corretamente (enable_upsell_recommendation). Bug de ortografia existente, não introduzido por esta mudança.
4Informativo_getStringList() retorna [""] para string vazia. Quando o valor no Firebase é "" (string vazia), "".split(';') retorna [""] (lista com uma string vazia), e não [] (lista vazia). Isso pode ser confundido com uma loja de código vazio em checagens do tipo list.contains(storeCode). Recomendação: validar o retorno com "" no Firebase no momento do consumo (task futura).

Veredito

✅ APPROVED

As mudanças são mínimas, corretas e seguem o padrão estabelecido do codebase. Todos os critérios de aceitação da task #193232 estão implementados. Nenhum blocker identificado.

Recomenda-se atenção ao comportamento de _getStringList() com string vazia (observação #4) no momento do consumo das flags.