diff --git a/src/app/api/eterra/export-bundle/route.ts b/src/app/api/eterra/export-bundle/route.ts index 539234d..4a4be28 100644 --- a/src/app/api/eterra/export-bundle/route.ts +++ b/src/app/api/eterra/export-bundle/route.ts @@ -250,6 +250,20 @@ export async function POST(req: Request) { pushProgress(); updatePhaseProgress(2, 2); } + // Sync admin layers (lightweight, non-fatal) + for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) { + try { + await syncLayer( + validated.username, + validated.password, + validated.siruta, + adminLayer, + { jobId, isSubStep: true }, + ); + } catch { + // admin layers are best-effort + } + } finishPhase(); /* ══════════════════════════════════════════════════════════ */ diff --git a/src/app/api/eterra/sync-background/route.ts b/src/app/api/eterra/sync-background/route.ts index f340ee1..8b22a34 100644 --- a/src/app/api/eterra/sync-background/route.ts +++ b/src/app/api/eterra/sync-background/route.ts @@ -221,19 +221,21 @@ async function runBackground(params: { throw new Error(r.error ?? "Sync clădiri failed"); } - // Sync intravilan limits (always, lightweight layer) - phase = "Sincronizare limite intravilan"; - push({}); - try { - await syncLayer(username, password, siruta, "LIMITE_INTRAV_DYNAMIC", { - forceFullSync: forceSync, - jobId, - isSubStep: true, - }); - } catch { - // Non-critical — don't fail the whole job - note = "Avertisment: limite intravilan nu s-au sincronizat"; + // Sync admin layers (always, lightweight) + for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) { + phase = `Sincronizare ${adminLayer === "LIMITE_UAT" ? "limite UAT" : "limite intravilan"}`; push({}); + try { + await syncLayer(username, password, siruta, adminLayer, { + forceFullSync: forceSync, + jobId, + isSubStep: true, + }); + } catch { + // Non-critical — don't fail the whole job + note = `Avertisment: ${adminLayer} nu s-a sincronizat`; + push({}); + } } if (!terenuriNeedsSync && !cladiriNeedsSync) { diff --git a/src/modules/parcel-sync/components/tabs/export-tab.tsx b/src/modules/parcel-sync/components/tabs/export-tab.tsx index 816b443..7cb6304 100644 --- a/src/modules/parcel-sync/components/tabs/export-tab.tsx +++ b/src/modules/parcel-sync/components/tabs/export-tab.tsx @@ -144,7 +144,7 @@ export function ExportTab({ const dbTotalFeatures = dbLayersSummary.reduce((sum, l) => sum + l.count, 0); // Primary layers synced by background jobs — these determine freshness - const PRIMARY_LAYERS = ["TERENURI_ACTIVE", "CLADIRI_ACTIVE", "LIMITE_INTRAV_DYNAMIC"]; + const PRIMARY_LAYERS = ["TERENURI_ACTIVE", "CLADIRI_ACTIVE", "LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]; const primaryLayers = dbLayersSummary.filter((l) => PRIMARY_LAYERS.includes(l.id), ); diff --git a/src/modules/parcel-sync/services/auto-refresh-scheduler.ts b/src/modules/parcel-sync/services/auto-refresh-scheduler.ts index 05b3c80..42743f5 100644 --- a/src/modules/parcel-sync/services/auto-refresh-scheduler.ts +++ b/src/modules/parcel-sync/services/auto-refresh-scheduler.ts @@ -172,17 +172,15 @@ async function runAutoRefresh() { "CLADIRI_ACTIVE", { uatName: uat.name }, ); - // Intravilan — lightweight, non-fatal - try { - await syncLayer( - username, - password, - uat.siruta, - "LIMITE_INTRAV_DYNAMIC", - { uatName: uat.name }, - ); - } catch { - // intravilan is best-effort + // Admin layers — lightweight, non-fatal + for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) { + try { + await syncLayer(username, password, uat.siruta, adminLayer, { + uatName: uat.name, + }); + } catch { + // admin layers are best-effort + } } const dur = ((Date.now() - start) / 1000).toFixed(1); console.log( diff --git a/src/modules/parcel-sync/services/weekend-deep-sync.ts b/src/modules/parcel-sync/services/weekend-deep-sync.ts index 189c7e5..65b0fb6 100644 --- a/src/modules/parcel-sync/services/weekend-deep-sync.ts +++ b/src/modules/parcel-sync/services/weekend-deep-sync.ts @@ -186,17 +186,19 @@ async function executeStep( "TERENURI_ACTIVE", { uatName: city.name, forceFullSync: true }, ); - // Also sync intravilan limits (lightweight, non-fatal) - try { - await syncLayer( - process.env.ETERRA_USERNAME!, - process.env.ETERRA_PASSWORD!, - city.siruta, - "LIMITE_INTRAV_DYNAMIC", - { uatName: city.name }, - ); - } catch { - // intravilan is best-effort + // Also sync admin layers (lightweight, non-fatal) + for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) { + try { + await syncLayer( + process.env.ETERRA_USERNAME!, + process.env.ETERRA_PASSWORD!, + city.siruta, + adminLayer, + { uatName: city.name }, + ); + } catch { + // admin layers are best-effort + } } const dur = ((Date.now() - start) / 1000).toFixed(1); return {