Files
fintrack/scripts/sync-categories.ts

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()
})