fix: ajouter try/catch dans les blocs else de migrateExistingItems pour gérer les violations UNIQUE
This commit is contained in:
@@ -546,23 +546,35 @@ export async function migrateExistingItems(): Promise<MigrationSummary> {
|
|||||||
const newDedupKey = dedupHash(normalizedTitle + "|veille");
|
const newDedupKey = dedupHash(normalizedTitle + "|veille");
|
||||||
|
|
||||||
// Mettre à jour le principal
|
// Mettre à jour le principal
|
||||||
await db.update(veilleItems)
|
try {
|
||||||
.set({
|
await db.update(veilleItems)
|
||||||
categorie: newCategorie,
|
.set({
|
||||||
niveau: allTerritoires.length > 1 ? "departemental" : "regional",
|
categorie: newCategorie,
|
||||||
territoire: allTerritoires.length > 0 ? allTerritoires[0] : "Auvergne-Rhône-Alpes",
|
niveau: allTerritoires.length > 1 ? "departemental" : "regional",
|
||||||
territoires: JSON.stringify(allTerritoires),
|
territoire: allTerritoires.length > 0 ? allTerritoires[0] : "Auvergne-Rhône-Alpes",
|
||||||
titre: primary.titre,
|
territoires: JSON.stringify(allTerritoires),
|
||||||
dedupKey: newDedupKey,
|
titre: primary.titre,
|
||||||
})
|
dedupKey: newDedupKey,
|
||||||
.where(eq(veilleItems.id, primary.id));
|
})
|
||||||
|
.where(eq(veilleItems.id, primary.id));
|
||||||
|
|
||||||
// Supprimer les doublons
|
// Supprimer les doublons
|
||||||
for (const dup of duplicates) {
|
for (const dup of duplicates) {
|
||||||
await db.delete(veilleItems).where(eq(veilleItems.id, dup.id));
|
await db.delete(veilleItems).where(eq(veilleItems.id, dup.id));
|
||||||
veilleMerged++;
|
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 normalizedTitle = buildMergeKey(primary.titre || "");
|
||||||
const newDedupKey = dedupHash(normalizedTitle + "|aap");
|
const newDedupKey = dedupHash(normalizedTitle + "|aap");
|
||||||
|
|
||||||
await db.update(aapItems)
|
try {
|
||||||
.set({
|
await db.update(aapItems)
|
||||||
region: "Auvergne-Rhône-Alpes",
|
.set({
|
||||||
departement: allDepts.length > 0 ? allDepts[0] : null,
|
region: "Auvergne-Rhône-Alpes",
|
||||||
departements: JSON.stringify(allDepts),
|
departement: allDepts.length > 0 ? allDepts[0] : null,
|
||||||
titre: primary.titre,
|
departements: JSON.stringify(allDepts),
|
||||||
dedupKey: newDedupKey,
|
titre: primary.titre,
|
||||||
})
|
dedupKey: newDedupKey,
|
||||||
.where(eq(aapItems.id, primary.id));
|
})
|
||||||
|
.where(eq(aapItems.id, primary.id));
|
||||||
|
|
||||||
for (const dup of duplicates) {
|
for (const dup of duplicates) {
|
||||||
await db.delete(aapItems).where(eq(aapItems.id, dup.id));
|
await db.delete(aapItems).where(eq(aapItems.id, dup.id));
|
||||||
aapMerged++;
|
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++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user