feat(parcel-sync): add LIMITE_UAT to sync package everywhere
All sync paths now include both admin layers (LIMITE_INTRAV_DYNAMIC + LIMITE_UAT) as best-effort alongside terenuri + cladiri: - export-bundle (hero buttons) - sync-background (fire-and-forget) - auto-refresh scheduler (weekday nights) - weekend deep sync (weekend nights) - freshness check (export tab badge) LIMITE_UAT rarely changes so incremental sync will skip it almost every time, but it stays fresh in the DB freshness check. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -250,6 +250,20 @@ export async function POST(req: Request) {
|
|||||||
pushProgress();
|
pushProgress();
|
||||||
updatePhaseProgress(2, 2);
|
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();
|
finishPhase();
|
||||||
|
|
||||||
/* ══════════════════════════════════════════════════════════ */
|
/* ══════════════════════════════════════════════════════════ */
|
||||||
|
|||||||
@@ -221,19 +221,21 @@ async function runBackground(params: {
|
|||||||
throw new Error(r.error ?? "Sync clădiri failed");
|
throw new Error(r.error ?? "Sync clădiri failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sync intravilan limits (always, lightweight layer)
|
// Sync admin layers (always, lightweight)
|
||||||
phase = "Sincronizare limite intravilan";
|
for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) {
|
||||||
push({});
|
phase = `Sincronizare ${adminLayer === "LIMITE_UAT" ? "limite UAT" : "limite intravilan"}`;
|
||||||
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";
|
|
||||||
push({});
|
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) {
|
if (!terenuriNeedsSync && !cladiriNeedsSync) {
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ export function ExportTab({
|
|||||||
const dbTotalFeatures = dbLayersSummary.reduce((sum, l) => sum + l.count, 0);
|
const dbTotalFeatures = dbLayersSummary.reduce((sum, l) => sum + l.count, 0);
|
||||||
|
|
||||||
// Primary layers synced by background jobs — these determine freshness
|
// 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) =>
|
const primaryLayers = dbLayersSummary.filter((l) =>
|
||||||
PRIMARY_LAYERS.includes(l.id),
|
PRIMARY_LAYERS.includes(l.id),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -172,17 +172,15 @@ async function runAutoRefresh() {
|
|||||||
"CLADIRI_ACTIVE",
|
"CLADIRI_ACTIVE",
|
||||||
{ uatName: uat.name },
|
{ uatName: uat.name },
|
||||||
);
|
);
|
||||||
// Intravilan — lightweight, non-fatal
|
// Admin layers — lightweight, non-fatal
|
||||||
try {
|
for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) {
|
||||||
await syncLayer(
|
try {
|
||||||
username,
|
await syncLayer(username, password, uat.siruta, adminLayer, {
|
||||||
password,
|
uatName: uat.name,
|
||||||
uat.siruta,
|
});
|
||||||
"LIMITE_INTRAV_DYNAMIC",
|
} catch {
|
||||||
{ uatName: uat.name },
|
// admin layers are best-effort
|
||||||
);
|
}
|
||||||
} catch {
|
|
||||||
// intravilan is best-effort
|
|
||||||
}
|
}
|
||||||
const dur = ((Date.now() - start) / 1000).toFixed(1);
|
const dur = ((Date.now() - start) / 1000).toFixed(1);
|
||||||
console.log(
|
console.log(
|
||||||
|
|||||||
@@ -186,17 +186,19 @@ async function executeStep(
|
|||||||
"TERENURI_ACTIVE",
|
"TERENURI_ACTIVE",
|
||||||
{ uatName: city.name, forceFullSync: true },
|
{ uatName: city.name, forceFullSync: true },
|
||||||
);
|
);
|
||||||
// Also sync intravilan limits (lightweight, non-fatal)
|
// Also sync admin layers (lightweight, non-fatal)
|
||||||
try {
|
for (const adminLayer of ["LIMITE_INTRAV_DYNAMIC", "LIMITE_UAT"]) {
|
||||||
await syncLayer(
|
try {
|
||||||
process.env.ETERRA_USERNAME!,
|
await syncLayer(
|
||||||
process.env.ETERRA_PASSWORD!,
|
process.env.ETERRA_USERNAME!,
|
||||||
city.siruta,
|
process.env.ETERRA_PASSWORD!,
|
||||||
"LIMITE_INTRAV_DYNAMIC",
|
city.siruta,
|
||||||
{ uatName: city.name },
|
adminLayer,
|
||||||
);
|
{ uatName: city.name },
|
||||||
} catch {
|
);
|
||||||
// intravilan is best-effort
|
} catch {
|
||||||
|
// admin layers are best-effort
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const dur = ((Date.now() - start) / 1000).toFixed(1);
|
const dur = ((Date.now() - start) / 1000).toFixed(1);
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user