mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-24 07:28:10 +02:00
feat: enhance diag endpoint to probe mouvements API with multiple date param variants
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
c056750ea7
commit
9e500b6650
1 file changed
+71
-52
+71
-52
@@ -4,62 +4,81 @@ import { sql } from "drizzle-orm";
|
|||||||
|
|
||||||
const FF_API_BASE = process.env.FF_API_BASE_URL ?? "https://api.ffnancy.fr";
|
const FF_API_BASE = process.env.FF_API_BASE_URL ?? "https://api.ffnancy.fr";
|
||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
async function probe(url: string) {
|
||||||
const { searchParams } = new URL(req.url);
|
try {
|
||||||
const target = searchParams.get("target") ?? "all";
|
const res = await fetch(url, { cache: "no-store" });
|
||||||
|
const text = await res.text();
|
||||||
const result: Record<string, unknown> = {
|
let parsed: unknown = null;
|
||||||
timestamp: new Date().toISOString(),
|
try { parsed = JSON.parse(text); } catch { parsed = text.slice(0, 800); }
|
||||||
env: {
|
// Résumé: nb items si tableau, ou clés si objet
|
||||||
FF_API_BASE_URL: process.env.FF_API_BASE_URL ?? "(not set — using default)",
|
let summary: unknown = parsed;
|
||||||
FF_API_BASE_resolved: FF_API_BASE,
|
if (Array.isArray(parsed)) {
|
||||||
NODE_ENV: process.env.NODE_ENV,
|
summary = { count: parsed.length, firstKeys: parsed[0] ? Object.keys(parsed[0]) : [], sample: parsed.slice(0, 2) };
|
||||||
},
|
} else if (parsed && typeof parsed === "object") {
|
||||||
};
|
const keys = Object.keys(parsed as object);
|
||||||
|
const firstArrayKey = keys.find(k => Array.isArray((parsed as Record<string, unknown>)[k]));
|
||||||
// ── Test FF Nancy API ────────────────────────────────────────────────────
|
if (firstArrayKey) {
|
||||||
if (target === "all" || target === "ff") {
|
const arr = (parsed as Record<string, unknown[]>)[firstArrayKey];
|
||||||
const ffTests: Record<string, unknown> = {};
|
summary = { wrapper: firstArrayKey, count: arr.length, firstKeys: arr[0] ? Object.keys(arr[0] as object) : [], sample: arr.slice(0, 2) };
|
||||||
|
|
||||||
// Test fournisseurs
|
|
||||||
try {
|
|
||||||
const url = `${FF_API_BASE}/api/fournisseurs?limit=5`;
|
|
||||||
const res = await fetch(url, { cache: "no-store" });
|
|
||||||
const text = await res.text();
|
|
||||||
let parsed: unknown = null;
|
|
||||||
try { parsed = JSON.parse(text); } catch { parsed = text.slice(0, 500); }
|
|
||||||
ffTests.fournisseurs = { status: res.status, url, raw: parsed };
|
|
||||||
} catch (e) {
|
|
||||||
ffTests.fournisseurs = { error: String(e) };
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test articles (avec un code fournisseur de test)
|
|
||||||
const codefou = searchParams.get("codefou");
|
|
||||||
if (codefou) {
|
|
||||||
try {
|
|
||||||
const url = `${FF_API_BASE}/api/articles?codefou=${codefou}&limit=3`;
|
|
||||||
const res = await fetch(url, { cache: "no-store" });
|
|
||||||
const text = await res.text();
|
|
||||||
let parsed: unknown = null;
|
|
||||||
try { parsed = JSON.parse(text); } catch { parsed = text.slice(0, 500); }
|
|
||||||
ffTests.articles = { status: res.status, url, raw: parsed };
|
|
||||||
} catch (e) {
|
|
||||||
ffTests.articles = { error: String(e) };
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return { status: res.status, url, summary };
|
||||||
result.ffNancyApi = ffTests;
|
} catch (e) {
|
||||||
|
return { error: String(e), url };
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// ── Test PostgreSQL ──────────────────────────────────────────────────────
|
export async function GET(req: NextRequest) {
|
||||||
if (target === "all" || target === "db") {
|
const { searchParams } = new URL(req.url);
|
||||||
try {
|
const codefou = searchParams.get("codefou") ?? "AUXENCE";
|
||||||
const countResult = await db.execute(sql`SELECT COUNT(*) as count FROM session_snapshots`);
|
|
||||||
result.postgresql = { ok: true, snapshots: Number(countResult.rows[0]?.count ?? 0) };
|
// Date range: 12 derniers mois
|
||||||
} catch (e) {
|
const now = new Date();
|
||||||
result.postgresql = { ok: false, error: String(e) };
|
const dateFin = new Date(now.getFullYear(), now.getMonth(), 0).toISOString().slice(0, 10);
|
||||||
}
|
const dateDebut = new Date(now.getFullYear(), now.getMonth() - 12, 1).toISOString().slice(0, 10);
|
||||||
|
|
||||||
|
const [
|
||||||
|
fournisseurs,
|
||||||
|
articles,
|
||||||
|
// Tester plusieurs variantes de noms de paramètres pour les mouvements
|
||||||
|
mvt_datedeb,
|
||||||
|
mvt_dateDebut,
|
||||||
|
mvt_from,
|
||||||
|
mvt_nodate,
|
||||||
|
] = await Promise.all([
|
||||||
|
probe(`${FF_API_BASE}/api/fournisseurs?limit=3`),
|
||||||
|
probe(`${FF_API_BASE}/api/articles?codefou=${codefou}&limit=3`),
|
||||||
|
probe(`${FF_API_BASE}/api/mouvements/articles?codefou=${codefou}&datedeb=${dateDebut}&datefin=${dateFin}&limit=3`),
|
||||||
|
probe(`${FF_API_BASE}/api/mouvements/articles?codefou=${codefou}&dateDebut=${dateDebut}&dateFin=${dateFin}&limit=3`),
|
||||||
|
probe(`${FF_API_BASE}/api/mouvements/articles?codefou=${codefou}&from=${dateDebut}&to=${dateFin}&limit=3`),
|
||||||
|
probe(`${FF_API_BASE}/api/mouvements/articles?codefou=${codefou}&limit=3`),
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Test PostgreSQL
|
||||||
|
let postgresql: unknown;
|
||||||
|
try {
|
||||||
|
const r = await db.execute(sql`SELECT COUNT(*) as count FROM session_snapshots`);
|
||||||
|
postgresql = { ok: true, snapshots: Number(r.rows[0]?.count ?? 0) };
|
||||||
|
} catch (e) {
|
||||||
|
postgresql = { ok: false, error: String(e) };
|
||||||
}
|
}
|
||||||
|
|
||||||
return NextResponse.json(result, { status: 200 });
|
return NextResponse.json({
|
||||||
|
timestamp: new Date().toISOString(),
|
||||||
|
env: {
|
||||||
|
FF_API_BASE_URL: process.env.FF_API_BASE_URL ?? "(not set — default used)",
|
||||||
|
FF_API_BASE_resolved: FF_API_BASE,
|
||||||
|
},
|
||||||
|
dateRange: { dateDebut, dateFin },
|
||||||
|
codefouTested: codefou,
|
||||||
|
fournisseurs,
|
||||||
|
articles,
|
||||||
|
mouvements: {
|
||||||
|
"datedeb/datefin": mvt_datedeb,
|
||||||
|
"dateDebut/dateFin": mvt_dateDebut,
|
||||||
|
"from/to": mvt_from,
|
||||||
|
"no_date": mvt_nodate,
|
||||||
|
},
|
||||||
|
postgresql,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user