diff --git a/src/app/api/v1/grid/route.ts b/src/app/api/v1/grid/route.ts
index a60a0c7..93b96ac 100644
--- a/src/app/api/v1/grid/route.ts
+++ b/src/app/api/v1/grid/route.ts
@@ -93,7 +93,9 @@ export async function GET(req: NextRequest) {
// Métriques Qlik et gamme serveur relues au moment de l'appel (voir api-enrich).
const rows = q.enrich === "1" ? await enrichRows(result.rows) : result.rows;
- const pagination = buildPagination(q.page, q.limit, result.total);
+ // Sans `limit`, tout a été renvoyé : la pagination doit le refléter (une seule
+ // page couvrant le total), sinon `hasMore` mentirait.
+ const pagination = buildPagination(q.page, q.limit ?? Math.max(1, result.total), result.total);
return ok(
rows.map((r) => pickFields(r, q.fields)),
@@ -117,8 +119,8 @@ export async function GET(req: NextRequest) {
...(pagination.hasMore
? {
avertissement:
- `Réponse partielle : ${rows.length} lignes sur ${result.total}. `
- + `Relancez avec page=${q.page + 1}, ou augmentez limit (5000 au maximum) pour tout obtenir en un appel.`,
+ `Réponse partielle : ${rows.length} lignes sur ${result.total}, parce que « limit » a été précisé. `
+ + `Retirez « limit » pour obtenir tout le fournisseur en un appel, ou passez à page=${q.page + 1}.`,
}
: {}),
},
diff --git a/src/app/api/v1/openapi.json/route.ts b/src/app/api/v1/openapi.json/route.ts
index 1286104..72467d1 100644
--- a/src/app/api/v1/openapi.json/route.ts
+++ b/src/app/api/v1/openapi.json/route.ts
@@ -22,7 +22,7 @@ export async function GET(req: NextRequest) {
const paginationParams = [
{ name: "page", in: "query", schema: { type: "integer", minimum: 1, default: 1 }, description: "Numéro de page." },
- { name: "limit", in: "query", schema: { type: "integer", minimum: 1, maximum: 5000, default: 100 }, description: "Lignes par page. Jusqu'à 5000 sur /grid : un seul appel suffit pour un fournisseur entier. 500 maximum sur les autres endpoints." },
+ { name: "limit", in: "query", schema: { type: "integer", minimum: 1 }, description: "Lignes par page, sans plafond. Sur /grid, OMETTRE ce paramètre renvoie toutes les lignes du fournisseur en un seul appel — c'est le mode recommandé. Sur les autres endpoints, le défaut est 100." },
];
const sortParams = [
{ name: "sort", in: "query", schema: { type: "string", enum: GRID_SORT_KEYS }, description: "Colonne de tri." },
diff --git a/src/features/admin/components/api-connection-info.tsx b/src/features/admin/components/api-connection-info.tsx
index c7617d3..a8e9db0 100644
--- a/src/features/admin/components/api-connection-info.tsx
+++ b/src/features/admin/components/api-connection-info.tsx
@@ -50,7 +50,7 @@ const ENDPOINTS: Array<{ method: string; path: string; desc: string }> = [
];
const PARAMS: Array<{ name: string; desc: string }> = [
- { name: "page, limit", desc: "Pagination. limit ≤ 5000 sur /grid — un seul appel suffit donc pour un fournisseur entier ; ≤ 500 ailleurs" },
+ { name: "page, limit", desc: "Pagination, sans plafond. Sur /grid, omettre limit renvoie TOUT le fournisseur en un appel ; ailleurs le défaut est 100" },
{ name: "sort, order", desc: "Tri, ex. sort=totalCa&order=desc" },
{ name: "search", desc: "Libellé, codein, GTIN, référence ou code centrale" },
{ name: "gamme, code1..code3", desc: "Filtres sur la gamme et la nomenclature" },
@@ -123,10 +123,10 @@ export function ApiConnectionInfo() {
- Tout un fournisseur en un seul appel — meta.complet confirme
- qu'il ne reste rien à lire :
+ Tout un fournisseur en un seul appel — il suffit d'omettre limit,
+ et meta.complet confirme qu'il ne reste rien à lire :