diff --git a/src/app/api/geoportal/enrich/route.ts b/src/app/api/geoportal/enrich/route.ts index 8b724fc..e3a0780 100644 --- a/src/app/api/geoportal/enrich/route.ts +++ b/src/app/api/geoportal/enrich/route.ts @@ -2,10 +2,10 @@ * POST /api/geoportal/enrich * * Enriches parcels for a given SIRUTA. Skips already-enriched features. - * Uses existing eTerra session or env credentials. + * Tries: 1) Active eTerra session, 2) Env credentials, 3) Returns clear error. * Enrichment data is PERSISTED in GisFeature.enrichment column. * - * Body: { siruta: string } or { ids: string[] } (feature UUIDs) + * Body: { siruta: string } */ import { NextResponse } from "next/server"; import { EterraClient } from "@/modules/parcel-sync/services/eterra-client"; @@ -24,19 +24,29 @@ export async function POST(req: Request) { return NextResponse.json({ error: "SIRUTA obligatoriu" }, { status: 400 }); } - // Get credentials: session first, then env + // Try multiple credential sources const session = getSessionCredentials(); const username = session?.username || process.env.ETERRA_USERNAME || ""; const password = session?.password || process.env.ETERRA_PASSWORD || ""; if (!username || !password) { return NextResponse.json( - { error: "Credentiale eTerra lipsa. Logheaza-te in eTerra Parcele mai intai." }, + { error: "Credentiale eTerra indisponibile. Deschide eTerra Parcele si logheaza-te mai intai, apoi revino aici." }, + { status: 401 } + ); + } + + let client: EterraClient; + try { + client = await EterraClient.create(username, password); + } catch (loginErr) { + const loginMsg = loginErr instanceof Error ? loginErr.message : "Login esuat"; + return NextResponse.json( + { error: `Login eTerra esuat: ${loginMsg}. Verifica credentialele in eTerra Parcele.` }, { status: 401 } ); } - const client = await EterraClient.create(username, password); const result = await enrichFeatures(client, siruta); return NextResponse.json({ @@ -49,6 +59,13 @@ export async function POST(req: Request) { }); } catch (error) { const msg = error instanceof Error ? error.message : "Eroare la enrichment"; + // Provide actionable error messages + if (msg.includes("timeout") || msg.includes("ETIMEDOUT")) { + return NextResponse.json({ error: "eTerra nu raspunde (timeout). Incearca mai tarziu." }, { status: 504 }); + } + if (msg.includes("maintenance") || msg.includes("Mentenan")) { + return NextResponse.json({ error: "eTerra este in mentenanta. Incearca mai tarziu." }, { status: 503 }); + } return NextResponse.json({ error: msg }, { status: 500 }); } }