83 lines
2.5 KiB
TypeScript
83 lines
2.5 KiB
TypeScript
import { PrismaClient } from "@prisma/client"
|
|
import { defaultCategories } from "../lib/defaults"
|
|
|
|
const prisma = new PrismaClient()
|
|
|
|
async function main() {
|
|
console.log("🏷️ Synchronisation des catégories...")
|
|
console.log(` ${defaultCategories.length} catégories à synchroniser\n`)
|
|
|
|
let created = 0
|
|
let updated = 0
|
|
let unchanged = 0
|
|
|
|
for (const category of defaultCategories) {
|
|
const existing = await prisma.category.findFirst({
|
|
where: { name: category.name },
|
|
})
|
|
|
|
if (existing) {
|
|
// Comparer pour voir si mise à jour nécessaire
|
|
const existingKeywords = JSON.parse(existing.keywords) as string[]
|
|
const keywordsChanged =
|
|
JSON.stringify(existingKeywords.sort()) !== JSON.stringify([...category.keywords].sort())
|
|
const colorChanged = existing.color !== category.color
|
|
const iconChanged = existing.icon !== category.icon
|
|
|
|
if (keywordsChanged || colorChanged || iconChanged) {
|
|
await prisma.category.update({
|
|
where: { id: existing.id },
|
|
data: {
|
|
color: category.color,
|
|
icon: category.icon,
|
|
keywords: JSON.stringify(category.keywords),
|
|
},
|
|
})
|
|
console.log(`✏️ Mise à jour: ${category.name}`)
|
|
if (keywordsChanged) {
|
|
console.log(` └─ Keywords: ${existingKeywords.length} → ${category.keywords.length}`)
|
|
}
|
|
updated++
|
|
} else {
|
|
unchanged++
|
|
}
|
|
} else {
|
|
await prisma.category.create({
|
|
data: {
|
|
name: category.name,
|
|
color: category.color,
|
|
icon: category.icon,
|
|
keywords: JSON.stringify(category.keywords),
|
|
parentId: category.parentId,
|
|
},
|
|
})
|
|
console.log(`✅ Créée: ${category.name} (${category.keywords.length} keywords)`)
|
|
created++
|
|
}
|
|
}
|
|
|
|
console.log("\n" + "═".repeat(50))
|
|
console.log("📊 Résumé:")
|
|
console.log(` ✅ Créées: ${created}`)
|
|
console.log(` ✏️ Mises à jour: ${updated}`)
|
|
console.log(` ⏭️ Inchangées: ${unchanged}`)
|
|
console.log("═".repeat(50))
|
|
|
|
// Stats finales
|
|
const totalCategories = await prisma.category.count()
|
|
const totalKeywords = defaultCategories.reduce((sum, c) => sum + c.keywords.length, 0)
|
|
console.log(`\n📈 Base de données:`)
|
|
console.log(` Total catégories: ${totalCategories}`)
|
|
console.log(` Total keywords: ${totalKeywords}`)
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error("❌ Erreur:", e)
|
|
process.exit(1)
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect()
|
|
})
|
|
|