Skip to main content

Achado — Decisões menores de limpeza e DTOs

Status: Resolvido

1. ApiUtils.getStoreShowCaseUrl (v1) fica sem uso após a migração

api_utils.dart:226-232 define getStoreShowCaseUrl (v1). Busca no código confirma que é chamado apenas dentro de MyShowCaseController._getUrl() (my_show_case_controller.dart:113) — nenhum outro controller/tela usa esse helper.

Depois que MyShowCaseController migrar para getStoreShowCaseV2Url, o método v1 fica órfão (código morto).

Resolução: remover ApiUtils.getStoreShowCaseUrl (v1) como parte desta task.

2. showCaseType obrigatório (sem default) em CreateShowCaseRequest/UpdateShowCaseRequest

O design doc original propunha showCaseType com default 1 nesses dois DTOs. Como agora dois fluxos diferentes constroem CreateShowCaseRequest (ShowCaseSearchProductsController.postFastCatalog() para Store, e o novo método em MyShowCaseController para SellerStock), um default silencioso esconde a intenção em cada call site.

Resolução: showCaseType vira campo obrigatório (sem default) em CreateShowCaseRequest e UpdateShowCaseRequest. Cada call site declara explicitamente showCaseType: ShowCaseType.store.value ou showCaseType: ShowCaseType.sellerStock.value. ShowCaseSearchProductsController.postFastCatalog()/putFastCatalog() precisam ser ajustados para passar showCaseType: ShowCaseType.store.value explicitamente (hoje não passam esse campo, pois ele ainda não existe no DTO).

3. Limite de data de expiração é diferente para SellerStock (30 dias, não 31)

Ao revisar context/image-3.png (referência visual do Figma), o painel de anotações do design diz explicitamente: "a data de expiração poderá ser alterada respeitando as regras já existentes do produto (máximo de 30 dias)" — mesmo texto da US 196053 (CA-3). Já o código atual (show_case_detail_screen.dart, campo ZZDateFormField em _HeaderContent) usa 31 dias (DateTime.now().add(const Duration(days: 31))), hoje fixo para todos os tipos (só existe o tipo Store).

Resolução: confirmado — é uma regra de negócio diferente para SellerStock, não uma imprecisão de texto. finalDateRange do campo de data passa a ser condicional por showCaseType:

finalDateRange: (detail.value?.showCaseType == ShowCaseType.sellerStock.value)
? DateTime.now().add(const Duration(days: 30))
: DateTime.now().add(const Duration(days: 31)),

O mesmo limite de 30 dias vale para o dateExpiration inicial enviado no POST de criação (ver fluxo-pos-criacao-e-dependencia-rewards.md).

4. Badge "Nova" do bottom sheet precisa de um novo tema em ZzTag

Ao revisar context/image-1.png/image-2.png, o badge "Nova" da opção "Vitrine do estoque da loja" é um pill com fundo verde sólido e texto branco — diferente do badge "Nova" já usado em ListItem (vitrines de marca), que usa ZzTag(theme: ZzTagTheme.success): fundo verde pastel (ZZColors.successLightest) + texto verde médio (ZZColors.successMedium). Nenhum dos 4 temas existentes de ZzTagTheme (primary, red, yellow, success) tem essa combinação de cores sólidas.

Resolução: confirmado reaproveitar o componente ZzTag (consistência estrutural), adicionando um novo valor de enum: backgroundColor: ZZColors.successMedium, foregroundColor: ZZColors.neutralLightest. Nome escolhido: newFeature (não pode ser new — palavra reservada em Dart, ZzTagTheme.new não compila).

Todos os 4 pontos confirmados com o usuário na sessão de grilling.