// prisma/seeds/CrimeCategoriesSeeder.ts import { generateId, generateIdWithDbCounter } from '../../app/_utils/common'; import { PrismaClient } from '@prisma/client'; import { crimeCategoriesData } from '../data/jsons/crime-category'; import path from 'path'; import XLSX from 'xlsx'; interface ICrimeCategory { id: string; name: string; description: string; type: string; created_at: Date; updated_at: Date; } export class CrimeCategoriesSeeder { constructor(private prisma: PrismaClient) {} async run(): Promise { console.log('Seeding crime categories...'); // Hapus data yang ada untuk menghindari duplikasi await this.prisma.crime_categories.deleteMany({}); // Truncate table jika diperlukan // await this.prisma.$executeRaw`TRUNCATE TABLE "crime_categories" CASCADE`; const filePath = path.join( __dirname, '../data/excels/others/crime_categories.xlsx' ); const workbook = XLSX.readFile(filePath); const sheet = workbook.Sheets[workbook.SheetNames[0]]; const data = XLSX.utils.sheet_to_json(sheet) as ICrimeCategory[]; for (const category of crimeCategoriesData) { const newId = await generateIdWithDbCounter('crime_categories', { prefix: 'CC', segments: { sequentialDigits: 4, }, format: '{prefix}-{sequence}', separator: '-', uniquenessStrategy: 'counter', }); await this.prisma.crime_categories.create({ data: { id: newId.trim(), name: category.name, description: category.description, }, }); console.log(`Seeding crime category: ${category.name}`); } // Update existing records for (const row of data) { const id = row['id'].trim(); const name = row['name'].trim(); const type = row['type'].trim(); await this.prisma.crime_categories.updateMany({ where: { id }, data: { type, }, }); console.log(`Updating crime category: ${name} to type ${type}`); } console.log(`✅ ${crimeCategoriesData.length} crime categories seeded`); } }