feat(parcel-sync): add diagnostic endpoint for county debugging
GET /api/eterra/uats/test-counties returns raw eTerra nomenclature response structure — shows exact field names and data format for fetchCounties() and fetchAdminUnitsByCounty(). Temporary diagnostic to fix county population issue. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,139 @@
|
|||||||
|
import { NextResponse } from "next/server";
|
||||||
|
import { EterraClient } from "@/modules/parcel-sync/services/eterra-client";
|
||||||
|
import { getSessionCredentials } from "@/modules/parcel-sync/services/session-store";
|
||||||
|
|
||||||
|
export const runtime = "nodejs";
|
||||||
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GET /api/eterra/uats/test-counties
|
||||||
|
*
|
||||||
|
* Diagnostic endpoint: tests eTerra nomenclature API and returns
|
||||||
|
* raw results. Hit this from your browser to see exactly what
|
||||||
|
* fetchCounties() and fetchAdminUnitsByCounty() return.
|
||||||
|
*
|
||||||
|
* Requires active eTerra session.
|
||||||
|
*/
|
||||||
|
export async function GET() {
|
||||||
|
try {
|
||||||
|
const session = getSessionCredentials();
|
||||||
|
if (!session) {
|
||||||
|
return NextResponse.json({
|
||||||
|
error: "Nu ești conectat la eTerra.",
|
||||||
|
step: "credentials",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const client = await EterraClient.create(session.username, session.password);
|
||||||
|
|
||||||
|
// Step 1: Fetch counties
|
||||||
|
let rawCounties: unknown;
|
||||||
|
try {
|
||||||
|
rawCounties = await client.fetchCounties();
|
||||||
|
} catch (err) {
|
||||||
|
return NextResponse.json({
|
||||||
|
error: "fetchCounties() a eșuat",
|
||||||
|
step: "fetchCounties",
|
||||||
|
message: err instanceof Error ? err.message : String(err),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const isArray = Array.isArray(rawCounties);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const countiesArr: any[] = isArray
|
||||||
|
? rawCounties
|
||||||
|
: // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
Array.isArray((rawCounties as any)?.content)
|
||||||
|
? // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
(rawCounties as any).content
|
||||||
|
: [];
|
||||||
|
|
||||||
|
const countySummary = {
|
||||||
|
rawType: typeof rawCounties,
|
||||||
|
isArray,
|
||||||
|
unwrappedLength: countiesArr.length,
|
||||||
|
topLevelKeys:
|
||||||
|
rawCounties && typeof rawCounties === "object" && !isArray
|
||||||
|
? Object.keys(rawCounties)
|
||||||
|
: null,
|
||||||
|
firstCounty: countiesArr[0]
|
||||||
|
? {
|
||||||
|
allKeys: Object.keys(countiesArr[0]),
|
||||||
|
raw: countiesArr[0],
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
// Show first 5 counties
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
first5: countiesArr.slice(0, 5).map((c: any) => ({
|
||||||
|
nomenPk: c?.nomenPk,
|
||||||
|
name: c?.name,
|
||||||
|
nomenName: c?.nomenName,
|
||||||
|
label: c?.label,
|
||||||
|
code: c?.code,
|
||||||
|
allKeys: Object.keys(c ?? {}),
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Step 2: Test fetchAdminUnitsByCounty with first county
|
||||||
|
let uatSample = null;
|
||||||
|
if (countiesArr.length > 0) {
|
||||||
|
const firstCountyPk = countiesArr[0]?.nomenPk;
|
||||||
|
if (firstCountyPk) {
|
||||||
|
try {
|
||||||
|
const rawUats =
|
||||||
|
await client.fetchAdminUnitsByCounty(firstCountyPk);
|
||||||
|
const uatsArr = Array.isArray(rawUats)
|
||||||
|
? rawUats
|
||||||
|
: // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
Array.isArray((rawUats as any)?.content)
|
||||||
|
? // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
(rawUats as any).content
|
||||||
|
: [];
|
||||||
|
|
||||||
|
uatSample = {
|
||||||
|
countyPk: firstCountyPk,
|
||||||
|
countyName: countiesArr[0]?.name,
|
||||||
|
rawType: typeof rawUats,
|
||||||
|
isArray: Array.isArray(rawUats),
|
||||||
|
unwrappedLength: uatsArr.length,
|
||||||
|
topLevelKeys:
|
||||||
|
rawUats && typeof rawUats === "object" && !Array.isArray(rawUats)
|
||||||
|
? Object.keys(rawUats)
|
||||||
|
: null,
|
||||||
|
firstUat: uatsArr[0]
|
||||||
|
? {
|
||||||
|
allKeys: Object.keys(uatsArr[0]),
|
||||||
|
raw: uatsArr[0],
|
||||||
|
}
|
||||||
|
: null,
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
first5: uatsArr.slice(0, 5).map((u: any) => ({
|
||||||
|
nomenPk: u?.nomenPk,
|
||||||
|
name: u?.name,
|
||||||
|
nomenName: u?.nomenName,
|
||||||
|
code: u?.code,
|
||||||
|
sirutaCode: u?.sirutaCode,
|
||||||
|
allKeys: Object.keys(u ?? {}),
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
} catch (err) {
|
||||||
|
uatSample = {
|
||||||
|
error: "fetchAdminUnitsByCounty() a eșuat",
|
||||||
|
message: err instanceof Error ? err.message : String(err),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NextResponse.json({
|
||||||
|
status: "ok",
|
||||||
|
counties: countySummary,
|
||||||
|
uatSample,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
return NextResponse.json({
|
||||||
|
error: "Eroare generală",
|
||||||
|
message: error instanceof Error ? error.message : String(error),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user