Skip to main content

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

AspectoEstado atual
Telalib/screens/show_case/my_show_case_list/my_show_case_list_screen.dart
Controllerlib/screens/show_case/show_case/my_show_case_controller.dart
Modellib/models/show_case/show_case_response_item.dart — campos: id, name, expirationDate
EndpointGET /api/show-case-new/store/{storeId} via ApiUtils.getStoreShowCaseUrl
PaginaçãoDefaultApiController.findPagedList espera response.pagination + response.data
Botão criarCRIAR VITRINE chama createFastCatalog() → navega direto para busca de produtos
Flag de bloqueioNã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

AspectoEstado atual
Telalib/screens/show_case/search/show_case_search_products_screen.dart
Controllerlib/screens/show_case/search/show_case_search_products_controller.dart
RequestCreateShowCaseRequestsem campo showCaseType
EndpointPOST /api/show-case-new via ApiUtils.postShowCaseUrl
FluxoBusca e seleção manual de produtos → formulário com nome + data → POST

Detalhe — Vitrine Personalizada

AspectoEstado atual
Telalib/screens/show_case/show_case_detail/show_case_detail_screen.dart
Controllerlib/screens/show_case/show_case_detail/show_case_detail_controller.dart
Layout compartilhadolib/screens/show_case/widgets/show_case_detail_layout.dart
ModelShowCaseDetailResponsesem showCaseType nem totalItems
EndpointGET /api/show-case-new/app/{id} via ApiUtils.getShowCaseDetailUrl
Contagem de produtosshowCaseItems.length — texto: "{n} produtos adicionados"
NomeEditável via ZZTextFormField
ProdutosGrade com até 4 itens + link "Todos os produtos"; botão ADICIONAR PRODUTOS; ícone de remover por card
AtualizaçãoUpdateShowCaseRequestsem showCaseType; envia name, showCaseItems e dateExpiration
FooterBotões ATUALIZAR VITRINE e EXCLUIR VITRINE

Componentes reutilizáveis existentes

ComponenteCaminhoUso potencial
ShowCaseDetailLayoutwidgets/show_case_detail_layout.dartEstrutura de detalhe (header, grade, ações, footer)
ShowCaseBottomSheetshow_case_bottom_sheet.dartAções pós-criação (Visualizar / Compartilhar / Copiar)
ListItemwidgets/listItem.dartItem da listagem com suporte a badge Nova
GetxBottomSheetshared/widgets/bottom_sheets/getx_bottom_sheet.dartPadrão de bottom sheet do app

Contrato de API esperado (ainda não integrado no App)

Referência: context/frontend-contract-diff.md

MudançaImpacto no App
GET /api/show-case-new/v2/store/{storeId}Novo endpoint; response flat com data, total, pageNumber, pageSize, hasSellerStock
hasSellerStockControla bloqueio da opção "Vitrine do estoque da loja" no bottom sheet
showCaseType em POST/PUT1 = Store, 4 = SellerStock
showCaseType + totalItems em GET detailCondiciona layout e regras de edição
showCaseType = 4 no PUTAPI ignora todos os campos exceto dateExpiration

Lacunas identificadas (TO-BE desta task)

  1. Bottom sheet "Escolha uma opção" ao clicar em CRIAR VITRINE
  2. DTO e parsing do endpoint v2 da listagem com hasSellerStock
  3. Fluxo de criação da Vitrine de Estoque da Loja (showCaseType = 4) sem seleção de produtos
  4. Tela de detalhe/criação adaptada para SellerStock: nome fixo, contagem via totalItems, sem edição de produtos
  5. Enum/model ShowCaseType inexistente no App

Referências visuais

Ver context/referencias-visuais.md e imagens image.png a image-3.png.