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 identifikasi { name: "Mengidentifikasi Peran dan tanggung jawab organisasi", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Menyusun strategi, kebijakan, dan prosedur Pelindungan IIV", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Menilai dan mengelola risiko Keamanan Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Mengelola aset informasi", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Mengelola aset informasi", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, { name: "Mengelola risiko rantai pasok", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Identifikasi", }, /////// Aspect 2 Proteksi { name: "Mengelola identitas, autentikasi, dan kendali akses", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Melindungi aset fisik", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Melindungi data", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Melindungi aplikasi", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Melindungi jaringan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, { name: "Melindungi sumber daya manusia", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Proteksi", }, /////// Aspect 3 Deteksi { name: "Mengelola deteksi Peristiwa Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Menganalisis anomali dan Peristiwa Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, { name: "Memantau Peristiwa Siber berkelanjutan", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Deteksi", }, /////// Aspect 4 Gulih { name: "Menyusun perencanaan penanggulangan dan pemulihan Insiden Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Penanggulangan dan Pemulihan", }, { name: "Menganalisis dan melaporkan Insiden Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Penanggulangan dan Pemulihan", }, { name: "Melaksanakan penanggulangan dan pemulihan Insiden Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Penanggulangan dan Pemulihan", }, { name: "Meningkatkan keamanan setelah terjadinya Insiden Siber", createdAt: new Date(), updatedAt: new Date(), deletedAt: null, aspectName: "Penanggulangan dan Pemulihan", }, ]; 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;