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}):
showCaseType | showCaseitems | totalItems |
|---|---|---|
1 (Store) | Lista completa dos produtos curados | Quantidade 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.mdcitaGET /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 porApiUtilsnão encontra esse caminho).- O único endpoint de produtos hoje é
ApiUtils.getShowCaseProductsSearchUrl→api/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 emApiUtils, e não coberto por nenhuma decisão do design doc.
Opções possíveis (a decidir)
- Integrar
GET /api/show-case-new/products?id={showCaseId}(com paginação própria) e tornarShowCaseAllProductsControllerAPI-driven para o caso SellerStock (ou criar um controller separado). - Reaproveitar
getShowCaseProductsSearchUrl(busca por loja) como fonte para "Todos os produtos" do SellerStock, já que semanticamente é "todo o estoque da loja". - Restringir o escopo desta task: exibir "Todos os produtos" só com os 4 itens de preview (sem paginação real), documentando a limitação.
- 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.