AS-IS — Fluxo de Vitrines no App (coezzion_vendas_app)
Documentação do estado atual do código em /Users/alt-zz/projetos/arezzo/coezzion_vendas_app/lib, validada em 25/06/2026.
Escopo analisado
Fluxo Minhas Vitrines (vitrine personalizada / showCaseType = 1), excluindo vitrines recomendadas por cliente e vitrines de marca.
Listagem — Minhas Vitrines
| Aspecto | Estado atual |
|---|---|
| Tela | lib/screens/show_case/my_show_case_list/my_show_case_list_screen.dart |
| Controller | lib/screens/show_case/show_case/my_show_case_controller.dart |
| Model | lib/models/show_case/show_case_response_item.dart — campos: id, name, expirationDate |
| Endpoint | GET /api/show-case-new/store/{storeId} via ApiUtils.getStoreShowCaseUrl |
| Paginação | DefaultApiController.findPagedList espera response.pagination + response.data |
| Botão criar | CRIAR VITRINE chama createFastCatalog() → navega direto para busca de produtos |
| Flag de bloqueio | Não existe parsing de hasSellerStock |
Comportamento do botão "CRIAR VITRINE"
// my_show_case_controller.dart
Future<void> createFastCatalog() async {
showCaseSearchProductsController.setCreateMode();
await Get.toNamed(AppRoutes.showCaseSearchProducts, arguments: {'title': 'Criar vitrine'});
}
Não há bottom sheet de escolha de modalidade.
Criação — Vitrine Personalizada
| Aspecto | Estado atual |
|---|---|
| Tela | lib/screens/show_case/search/show_case_search_products_screen.dart |
| Controller | lib/screens/show_case/search/show_case_search_products_controller.dart |
| Request | CreateShowCaseRequest — sem campo showCaseType |
| Endpoint | POST /api/show-case-new via ApiUtils.postShowCaseUrl |
| Fluxo | Busca e seleção manual de produtos → formulário com nome + data → POST |
Detalhe — Vitrine Personalizada
| Aspecto | Estado atual |
|---|---|
| Tela | lib/screens/show_case/show_case_detail/show_case_detail_screen.dart |
| Controller | lib/screens/show_case/show_case_detail/show_case_detail_controller.dart |
| Layout compartilhado | lib/screens/show_case/widgets/show_case_detail_layout.dart |
| Model | ShowCaseDetailResponse — sem showCaseType nem totalItems |
| Endpoint | GET /api/show-case-new/app/{id} via ApiUtils.getShowCaseDetailUrl |
| Contagem de produtos | showCaseItems.length — texto: "{n} produtos adicionados" |
| Nome | Editável via ZZTextFormField |
| Produtos | Grade com até 4 itens + link "Todos os produtos"; botão ADICIONAR PRODUTOS; ícone de remover por card |
| Atualização | UpdateShowCaseRequest — sem showCaseType; envia name, showCaseItems e dateExpiration |
| Footer | Botões ATUALIZAR VITRINE e EXCLUIR VITRINE |
Componentes reutilizáveis existentes
| Componente | Caminho | Uso potencial |
|---|---|---|
ShowCaseDetailLayout | widgets/show_case_detail_layout.dart | Estrutura de detalhe (header, grade, ações, footer) |
ShowCaseBottomSheet | show_case_bottom_sheet.dart | Ações pós-criação (Visualizar / Compartilhar / Copiar) |
ListItem | widgets/listItem.dart | Item da listagem com suporte a badge Nova |
GetxBottomSheet | shared/widgets/bottom_sheets/getx_bottom_sheet.dart | Padrão de bottom sheet do app |
Contrato de API esperado (ainda não integrado no App)
Referência: context/frontend-contract-diff.md
| Mudança | Impacto no App |
|---|---|
GET /api/show-case-new/v2/store/{storeId} | Novo endpoint; response flat com data, total, pageNumber, pageSize, hasSellerStock |
hasSellerStock | Controla bloqueio da opção "Vitrine do estoque da loja" no bottom sheet |
showCaseType em POST/PUT | 1 = Store, 4 = SellerStock |
showCaseType + totalItems em GET detail | Condiciona layout e regras de edição |
showCaseType = 4 no PUT | API ignora todos os campos exceto dateExpiration |
Lacunas identificadas (TO-BE desta task)
- Bottom sheet "Escolha uma opção" ao clicar em
CRIAR VITRINE - DTO e parsing do endpoint v2 da listagem com
hasSellerStock - Fluxo de criação da Vitrine de Estoque da Loja (
showCaseType = 4) sem seleção de produtos - Tela de detalhe/criação adaptada para
SellerStock: nome fixo, contagem viatotalItems, sem edição de produtos - Enum/model
ShowCaseTypeinexistente no App
Referências visuais
Ver context/referencias-visuais.md e imagens image.png a image-3.png.