fix: ajouter try/catch dans les blocs else de migrateExistingItems pour gérer les violations UNIQUE

This commit is contained in:
Manus Deploy
2026-05-03 06:44:12 -04:00
parent e502ca97d8
commit 13b6385dbc

View File

@@ -546,23 +546,35 @@ export async function migrateExistingItems(): Promise<MigrationSummary> {
const newDedupKey = dedupHash(normalizedTitle + "|veille");
// Mettre à jour le principal
await db.update(veilleItems)
.set({
categorie: newCategorie,
niveau: allTerritoires.length > 1 ? "departemental" : "regional",
territoire: allTerritoires.length > 0 ? allTerritoires[0] : "Auvergne-Rhône-Alpes",
territoires: JSON.stringify(allTerritoires),
titre: primary.titre,
dedupKey: newDedupKey,
})
.where(eq(veilleItems.id, primary.id));
try {
await db.update(veilleItems)
.set({
categorie: newCategorie,
niveau: allTerritoires.length > 1 ? "departemental" : "regional",
territoire: allTerritoires.length > 0 ? allTerritoires[0] : "Auvergne-Rhône-Alpes",
territoires: JSON.stringify(allTerritoires),
titre: primary.titre,
dedupKey: newDedupKey,
})
.where(eq(veilleItems.id, primary.id));
// Supprimer les doublons
for (const dup of duplicates) {
await db.delete(veilleItems).where(eq(veilleItems.id, dup.id));
veilleMerged++;
// Supprimer les doublons
for (const dup of duplicates) {
await db.delete(veilleItems).where(eq(veilleItems.id, dup.id));
veilleMerged++;
}
veilleUpdated++;
} catch (e: any) {
// Si le newDedupKey existe déjà → supprimer tout le groupe
if (e?.code === "ER_DUP_ENTRY" || e?.cause?.code === "ER_DUP_ENTRY" || e?.cause?.message?.includes("Duplicate entry")) {
for (const row of sorted) {
await db.delete(veilleItems).where(eq(veilleItems.id, row.id));
veilleMerged++;
}
} else {
throw e;
}
}
veilleUpdated++;
}
}
@@ -622,21 +634,33 @@ export async function migrateExistingItems(): Promise<MigrationSummary> {
const normalizedTitle = buildMergeKey(primary.titre || "");
const newDedupKey = dedupHash(normalizedTitle + "|aap");
await db.update(aapItems)
.set({
region: "Auvergne-Rhône-Alpes",
departement: allDepts.length > 0 ? allDepts[0] : null,
departements: JSON.stringify(allDepts),
titre: primary.titre,
dedupKey: newDedupKey,
})
.where(eq(aapItems.id, primary.id));
try {
await db.update(aapItems)
.set({
region: "Auvergne-Rhône-Alpes",
departement: allDepts.length > 0 ? allDepts[0] : null,
departements: JSON.stringify(allDepts),
titre: primary.titre,
dedupKey: newDedupKey,
})
.where(eq(aapItems.id, primary.id));
for (const dup of duplicates) {
await db.delete(aapItems).where(eq(aapItems.id, dup.id));
aapMerged++;
for (const dup of duplicates) {
await db.delete(aapItems).where(eq(aapItems.id, dup.id));
aapMerged++;
}
aapUpdated++;
} catch (e: any) {
// Si le newDedupKey existe déjà → supprimer tout le groupe
if (e?.code === "ER_DUP_ENTRY" || e?.cause?.code === "ER_DUP_ENTRY" || e?.cause?.message?.includes("Duplicate entry")) {
for (const row of sorted) {
await db.delete(aapItems).where(eq(aapItems.id, row.id));
aapMerged++;
}
} else {
throw e;
}
}
aapUpdated++;
}
}