From dd712ff061a24c2875bdf0c51b28ef2590dde7a1 Mon Sep 17 00:00:00 2001 From: percyfikri Date: Mon, 5 Aug 2024 18:51:17 +0700 Subject: [PATCH] create : seeder of aspects and subAspects --- apps/backend/src/drizzle/seed.ts | 4 + .../src/drizzle/seeds/aspectsSeeder.ts | 69 +++++ .../src/drizzle/seeds/subAspectsSeeder.ts | 273 ++++++++++++++++++ 3 files changed, 346 insertions(+) create mode 100644 apps/backend/src/drizzle/seeds/aspectsSeeder.ts create mode 100644 apps/backend/src/drizzle/seeds/subAspectsSeeder.ts diff --git a/apps/backend/src/drizzle/seed.ts b/apps/backend/src/drizzle/seed.ts index 305be1b..bb98014 100644 --- a/apps/backend/src/drizzle/seed.ts +++ b/apps/backend/src/drizzle/seed.ts @@ -2,6 +2,8 @@ import db from "."; import permissionSeeder from "./seeds/permissionSeeder"; import roleSeeder from "./seeds/rolesSeeder"; import userSeeder from "./seeds/userSeeder"; +import aspectsSeeder from "./seeds/aspectsSeeder"; +import subAspectsSeeder from "./seeds/subAspectsSeeder"; (async () => { console.time("Done seeding"); @@ -9,6 +11,8 @@ import userSeeder from "./seeds/userSeeder"; await permissionSeeder(); await roleSeeder(); await userSeeder(); + await aspectsSeeder(); + await subAspectsSeeder(); })().then(() => { console.log("\n"); console.timeEnd("Done seeding"); diff --git a/apps/backend/src/drizzle/seeds/aspectsSeeder.ts b/apps/backend/src/drizzle/seeds/aspectsSeeder.ts new file mode 100644 index 0000000..0438d9d --- /dev/null +++ b/apps/backend/src/drizzle/seeds/aspectsSeeder.ts @@ -0,0 +1,69 @@ +import { aspects } from "../schema/aspects"; +import db from ".."; +import { eq } from "drizzle-orm"; + + +const aspectsSeeder = async () => { + const aspectsData: (typeof aspects.$inferInsert)[] = [ + { + name: "Tata Kelola", + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }, + { + name: "Identifikasi", + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }, + { + name: "Proteksi", + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }, + { + name: "Deteksi", + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }, + { + name: "Respon", + createdAt: new Date(), + updatedAt: new Date(), + deletedAt: null, + }, + ]; + + console.log("Seeding aspects..."); + + for (let aspect of aspectsData) { + // Check if the aspect already exists + const existingAspect = await db + .select() + .from(aspects) + .where(eq(aspects.name, aspect.name)) + .limit(1); + + if (existingAspect.length === 0) { + // If the aspect does not exist, insert it + const insertedAspect = ( + await db + .insert(aspects) + .values(aspect) + .onConflictDoNothing() + .returning() + )[0]; + + if (insertedAspect) { + console.log(`Aspect ${aspect.name} created`); + } + } else { + console.log(`Aspect ${aspect.name} already exists`); + } + } +}; + +export default aspectsSeeder; diff --git a/apps/backend/src/drizzle/seeds/subAspectsSeeder.ts b/apps/backend/src/drizzle/seeds/subAspectsSeeder.ts new file mode 100644 index 0000000..7c082d2 --- /dev/null +++ b/apps/backend/src/drizzle/seeds/subAspectsSeeder.ts @@ -0,0 +1,273 @@ +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;