import { subAspects } from "../schema/subAspects"; import db from ".."; import { aspects } from "../schema/aspects"; import { eq, and } from "drizzle-orm"; const subAspectSeeder = async () => { const subAspectsData: (typeof subAspects.$inferInsert & { aspectName: string })[] = [ /////// Aspect 1 { name: "Kesadaran", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Tata Kelola", }, { name: "Audit", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Tata Kelola", }, { name: "Kontrol", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Tata Kelola", }, { name: "Pemenuhan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Tata Kelola", }, { name: "Kebijakan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Tata Kelola", }, { name: "Proses", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Tata Kelola", }, /////// Aspect 2 { name: "Manajemen Aset", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Inventaris", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Manajemen Risiko", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Prioritas", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Pelaporan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Klasifikasi", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, /////// Aspect 3 { name: "Jaringan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Aplikasi", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Pengguna", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Manajemen Identitas dan Aset", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Cloud", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Data", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, /////// Aspect 4 { name: "Perubahan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Monitor", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Peringatan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Pemberitahuan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Intelijen", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Pelaporan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, /////// Aspect 5 { name: "Penahanan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Respon", }, { name: "Penanggulangan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Respon", }, { name: "Pemulihan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Respon", }, { name: "Kegiatan Paska Insiden", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Respon", }, { name: "Pelaporan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Respon", }, ]; console.log("Seeding subAspects..."); const memoizedAspectIds: Map = new Map(); for (let subAspect of subAspectsData) { // Check if aspect ID is already memoized if (!memoizedAspectIds.has(subAspect.aspectName)) { const aspect = ( await db .select({ id: aspects.id }) .from(aspects) .where(eq(aspects.name, subAspect.aspectName)) )[0]; if (!aspect) { throw new Error(`Aspect ${subAspect.aspectName} does not exist in the database`); } memoizedAspectIds.set(subAspect.aspectName, aspect.id); } const aspectId = memoizedAspectIds.get(subAspect.aspectName)!; // Check if the subAspect already exists const existingSubAspect = await db .select() .from(subAspects) .where(and(eq(subAspects.name, subAspect.name), eq(subAspects.aspectId, aspectId))) .limit(1); if (existingSubAspect.length === 0) { // If the subAspect does not exist, insert it const insertedSubAspect = ( await db .insert(subAspects) .values({ name: subAspect.name, createdAt: subAspect.createdAt, updatedAt: subAspect.updatedAt, deletedAt: subAspect.deletedAt, aspectId: aspectId }) .onConflictDoNothing() .returning() )[0]; if (insertedSubAspect) { console.log(`SubAspect ${subAspect.name} created and linked to aspect ${subAspect.aspectName}`); } } else { console.log(`SubAspect ${subAspect.name} already exists`); } } }; export default subAspectSeeder;