fix(api): supprime le plafond de 500 lignes, qui tronquait en silence

Le passage à limit=5000 du commit précédent était sans effet : queryGridRows
re-plafonnait à 500 en dur (Math.min(500, …)). Pire, la pagination était
calculée sur le limit *demandé*, donc hasMore et meta.complet annonçaient une
réponse complète alors qu'elle était tronquée — exactement la troncature
silencieuse que ces champs devaient éliminer.

- Plus aucun plafond. Sur /grid, omettre `limit` renvoie toutes les lignes du
  fournisseur : plus de pagination à dérouler, ce que les agents font mal.
- La pagination reflète le mode sans limite (une page couvrant le total), donc
  hasMore et meta.complet disent la vérité.
- Le défaut reste 100 sur les endpoints de recherche, non bornés par un
  fournisseur — mais sans maximum imposé.
- meta.avertissement explique désormais que la troncature vient du `limit`
  fourni, et qu'il suffit de l'omettre.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y26nRZxTR57K7h8yqsF675
This commit is contained in:
Claude committed 2026-08-06 11:46:32 +00:00
1 parent 73accd6d60
commit 33b30dc8bd
5 files changed
+34 -21

No files matched your search

+5 -3
View File
@@ -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}.`,
}
: {}),
},