amati/apps/backend/src/drizzle/seeds/subAspectsSeeder.ts
2024-12-11 11:33:32 +07:00

205 lines
4.9 KiB
TypeScript

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<string, string> = 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;