Skip to main content

Achado — Endpoint v2 não tem campo hasNext; cálculo de paginação infinita precisa ser criado do zero

Decisão do design doc afetada: #2 — Endpoint v2 e Flag hasSellerStock Status: Em aberto — aguardando confirmação do usuário

Estrutura v1 (atual) vs v2 (nova)

DefaultApiController.findPagedList() (lib/controllers/default_controller/default_api_controller.dart:89-129) espera a resposta em:

{ "pagination": { "totalCount": 1, "pageSize": 10, "hasNext": true, ... }, "data": [...] }

E MyShowCaseController._load() hoje usa isso diretamente: pagedList.pagination.hasNext ?? false.

O contrato v2 (frontend-contract-diff.md) é plano, sem objeto pagination aninhado e sem campo hasNext:

{ "data": [...], "total": 1, "pageNumber": 1, "pageSize": 10, "hasSellerStock": true }

O que falta

Nenhum lugar do app hoje calcula "existe próxima página" a partir de total + pageNumber + pageSize (confirmado por busca no código — não há precedente). O modelo ShowCaseListV2Response (novo) proposto no design doc expõe total, pageNumber, pageSize, mas não expõe um hasNext (nem getter computado). Sem isso, MyShowCaseController._hasNextPage (usado pelo PagingController do infinite_scroll_pagination) não tem como ser preenchido corretamente após a migração para v2.

Recomendação

Adicionar um getter computado em ShowCaseListV2Response (ou calcular direto em _load()), por exemplo:

bool get hasNext => (pageNumber * pageSize) < total;

Resolução

Decisão: o backend vai expor o campo hasNext diretamente na resposta v2 (não é necessário calcular no client). ShowCaseListV2Response deve parsear hasNext (bool) como mais um campo do payload plano, junto com data, total, pageNumber, pageSize, hasSellerStock. Contrato (context/frontend-contract-diff.md) atualizado para refletir isso. Confirmado com o usuário na sessão de grilling.