274 lines
5.6 KiB
TypeScript
274 lines
5.6 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
|
|
{
|
|
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<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;
|