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.