Merge branch 'feat/define-schema' of https://github.com/digitalsolutiongroup/amati into feat/define-schema
This commit is contained in:
commit
aa9d1432e0
|
|
@ -7,6 +7,7 @@ export const respondents = pgTable("respondents", {
|
|||
id: varchar("id", { length: 50 })
|
||||
.primaryKey()
|
||||
.$defaultFn(() => createId()),
|
||||
userId: varchar('userId').references(() => users.id).unique(),
|
||||
companyName: varchar("companyName").notNull(),
|
||||
position: varchar("position").notNull(),
|
||||
workExperience: varchar("workExperience").notNull(),
|
||||
|
|
@ -15,7 +16,6 @@ export const respondents = pgTable("respondents", {
|
|||
createdAt: timestamp("createdAt", { mode: "date" }),
|
||||
updatedAt: timestamp("updatedAt", { mode: "date" }),
|
||||
deletedAt: timestamp("deletetAt", { mode: "date" }),
|
||||
userId: varchar('userId').references(() => users.id).unique(),
|
||||
});
|
||||
|
||||
export const respondentsRelations = relations(respondents, ({ one }) => ({
|
||||
|
|
|
|||
|
|
@ -1,18 +1,14 @@
|
|||
import { createId } from "@paralleldrive/cuid2";
|
||||
import {
|
||||
pgTable,
|
||||
timestamp,
|
||||
varchar,
|
||||
} from "drizzle-orm/pg-core";
|
||||
import { pgTable, timestamp, varchar } from "drizzle-orm/pg-core";
|
||||
import { aspects } from "./aspects";
|
||||
|
||||
export const subAspects = pgTable("sub_aspects", {
|
||||
id: varchar("id", {length: 50})
|
||||
id: varchar("id", { length: 50 })
|
||||
.primaryKey()
|
||||
.$defaultFn(() => createId()),
|
||||
aspectId: varchar("aspectId").references(() => aspects.id),
|
||||
name: varchar("name", { length: 255 }).notNull(),
|
||||
createdAt: timestamp("createdAt", { mode: "date" }).defaultNow(),
|
||||
updatedAt: timestamp("updatedAt", { mode: "date" }).defaultNow(),
|
||||
deletedAt: timestamp("deletedAt", { mode: "date" }),
|
||||
aspectId: varchar("aspectId").references(() => aspects.id)
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
69
apps/backend/src/drizzle/seeds/aspectsSeeder.ts
Normal file
69
apps/backend/src/drizzle/seeds/aspectsSeeder.ts
Normal file
|
|
@ -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;
|
||||
273
apps/backend/src/drizzle/seeds/subAspectsSeeder.ts
Normal file
273
apps/backend/src/drizzle/seeds/subAspectsSeeder.ts
Normal file
|
|
@ -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<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;
|
||||
Loading…
Reference in New Issue
Block a user