b01ea9fc37
- scanNoGeometryParcels now fetches TERENURI_ACTIVE features from remote ArcGIS (lightweight, no geometry) to cross-reference with eTerra immovable list - Cross-references by both NATIONAL_CADASTRAL_REFERENCE and IMMOVABLE_ID - Works correctly regardless of whether user has synced to local DB - Renamed totalInDb -> withGeometry in NoGeomScanResult, UI, and API - Extended fetchAllLayer() to forward outFields/returnGeometry options
61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
/**
|
|
* POST /api/eterra/no-geom-scan
|
|
*
|
|
* Scans eTerra immovable list for a UAT and counts how many parcels
|
|
* exist in the eTerra database but have no geometry in the remote
|
|
* ArcGIS GIS layer (TERENURI_ACTIVE). Cross-references remotely.
|
|
*
|
|
* Body: { siruta: string }
|
|
* Returns: { totalImmovables, withGeometry, noGeomCount, samples }
|
|
*
|
|
* Requires active eTerra session.
|
|
*/
|
|
|
|
import { NextResponse } from "next/server";
|
|
import { EterraClient } from "@/modules/parcel-sync/services/eterra-client";
|
|
import { getSessionCredentials } from "@/modules/parcel-sync/services/session-store";
|
|
import { scanNoGeometryParcels } from "@/modules/parcel-sync/services/no-geom-sync";
|
|
|
|
export const runtime = "nodejs";
|
|
export const dynamic = "force-dynamic";
|
|
|
|
export async function POST(req: Request) {
|
|
try {
|
|
const body = (await req.json()) as {
|
|
siruta?: string;
|
|
workspacePk?: number;
|
|
};
|
|
const siruta = String(body.siruta ?? "").trim();
|
|
if (!/^\d+$/.test(siruta)) {
|
|
return NextResponse.json(
|
|
{ error: "SIRUTA must be numeric" },
|
|
{ status: 400 },
|
|
);
|
|
}
|
|
|
|
const session = getSessionCredentials();
|
|
const username = String(
|
|
session?.username || process.env.ETERRA_USERNAME || "",
|
|
).trim();
|
|
const password = String(
|
|
session?.password || process.env.ETERRA_PASSWORD || "",
|
|
).trim();
|
|
if (!username || !password) {
|
|
return NextResponse.json(
|
|
{ error: "Nu ești conectat la eTerra" },
|
|
{ status: 401 },
|
|
);
|
|
}
|
|
|
|
const client = await EterraClient.create(username, password);
|
|
const result = await scanNoGeometryParcels(client, siruta, {
|
|
workspacePk: body.workspacePk ?? null,
|
|
});
|
|
|
|
return NextResponse.json(result);
|
|
} catch (error) {
|
|
const message = error instanceof Error ? error.message : "Eroare server";
|
|
return NextResponse.json({ error: message }, { status: 500 });
|
|
}
|
|
}
|