Skip to main content

Achado — "Todos os produtos" não tem de onde buscar os itens de uma vitrine SellerStock

Severidade: Alto (funcionalidade incompleta / requisito não implementável como está) Decisão do design doc afetada: #4 — Detalhe Condicional por showCaseType Requisito relacionado: RF-04 AC6 Status: Em aberto — aguardando decisão do usuário

Comportamento atual (Store / showCaseType = 1)

ShowCaseAllProductsScreen / ShowCaseAllProductsController (lib/screens/show_case/show_case_all_products/) são 100% locais — não fazem nenhuma chamada de API própria. Recebem a lista completa de produtos via argumento e apenas a exibem:

class ShowCaseAllProductsController extends GetxController {
final products = <ProductShowCase>[].obs;

void onInit() {
arguments = Get.arguments as ShowCaseAllProductsArgs;
products.assignAll(arguments.products); // só usa o que já veio por argumento
}
}

Isso funciona para Store porque, pelo contrato (ver tabela abaixo), showCaseitems no GET de detalhe já retorna a lista completa dos produtos curados — não há nada a buscar depois.

Por que quebra para SellerStock

Contrato (context/frontend-contract-diff.md, GET /api/show-case-new/app/{showCaseId}):

showCaseTypeshowCaseitemstotalItems
1 (Store)Lista completa dos produtos curadosQuantidade da lista
4 (SellerStock)4 primeiros produtos (preview)Count total do estoque da loja no ES

Para SellerStock, o app nunca recebe os demais totalItems - 4 produtos em nenhuma chamada existente. Se o vendedor tocar em "Todos os produtos" numa vitrine com totalItems = 87, a tela só teria os mesmos 4 itens do preview para exibir — o link ficaria funcionalmente inútil, mesmo que RF-04 AC6 exija exibi-lo quando totalItems > 4 (implicitamente, para ver os demais produtos).

Pistas investigadas

  • frontend-contract-diff.md cita GET /api/show-case-new/products?id={showCaseId} como "sem alteração de contrato" — mas esse endpoint não é chamado em nenhum lugar do app hoje (busca por ApiUtils não encontra esse caminho).
  • O único endpoint de produtos hoje é ApiUtils.getShowCaseProductsSearchUrlapi/show-case-new/products/app/{storeId}/{pageNumber}/{pageSize}/{orderBy}, usado na busca/seleção de produtos ao criar vitrine personalizada. Filtra por loja (storeId), não por vitrine (showCaseId), e tem formato de URL diferente do citado acima — não é o mesmo endpoint.
  • Conclusão: GET /api/show-case-new/products?id= parece ser um endpoint realmente novo para o app, ainda não mapeado em ApiUtils, e não coberto por nenhuma decisão do design doc.

Opções possíveis (a decidir)

  1. Integrar GET /api/show-case-new/products?id={showCaseId} (com paginação própria) e tornar ShowCaseAllProductsController API-driven para o caso SellerStock (ou criar um controller separado).
  2. Reaproveitar getShowCaseProductsSearchUrl (busca por loja) como fonte para "Todos os produtos" do SellerStock, já que semanticamente é "todo o estoque da loja".
  3. Restringir o escopo desta task: exibir "Todos os produtos" só com os 4 itens de preview (sem paginação real), documentando a limitação.
  4. Não exibir o link "Todos os produtos" para SellerStock nesta task (ajustar RF-04 AC6), empurrando a experiência completa para uma task futura.

Resolução

Decisão: para showCaseType = 4 (SellerStock), o link "Todos os produtos" não existe — a grid mostra sempre no máximo os 4 itens de preview, sem opção de ver a lista completa. Não é necessário integrar GET /api/show-case-new/products?id= nem reaproveitar getShowCaseProductsSearchUrl para este fim. Confirmado com o usuário na sessão de grilling.

Consequência: isso contradiz o texto atual de RF-04 AC6 ("...e link Todos os produtos quando totalItems for maior que 4"), que precisa ser atualizado no documento de requisitos (task-197313-front-app-ajuste-de-layout-nova-vitrine-requisitos.md) para refletir essa decisão.