MIF_E31221222/sigap-website/prisma/seed.ts

299 lines
7.8 KiB
TypeScript

const crimeCategories = require("../data/crime-category");
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();
// Navigation data structure
// const navItemDatas = [
// {
// title: "Dashboard",
// url: "/dashboard",
// slug: "dashboard",
// orderSeq: 1,
// icon: "IconHome",
// isActive: true,
// subItems: [],
// },
// {
// title: "Crime Management",
// url: "/crime-management",
// slug: "crime-management",
// orderSeq: 2,
// icon: "IconAlertTriangle",
// isActive: true,
// subItems: [
// {
// title: "Crime Overview",
// url: "/crime-management/crime-overview",
// slug: "crime-overview",
// icon: "IconAlertTriangle",
// orderSeq: 1,
// isActive: true,
// },
// {
// title: "Crime Categories",
// url: "/crime-management/crime-categories",
// slug: "crime-categories",
// icon: "IconSettings",
// orderSeq: 2,
// isActive: true,
// },
// {
// title: "Cases",
// url: "/crime-management/crime-cases",
// slug: "crime-cases",
// icon: "IconAlertTriangle",
// orderSeq: 3,
// isActive: true,
// subItems: [
// {
// title: "New Case",
// url: "/crime-management/crime-cases/case-new",
// slug: "new-case",
// icon: "IconAlertTriangle",
// orderSeq: 1,
// isActive: true,
// },
// {
// title: "Active Cases",
// url: "/crime-management/crime-cases/case-active",
// slug: "active-cases",
// icon: "IconAlertTriangle",
// orderSeq: 2,
// isActive: true,
// },
// {
// title: "Resolved Cases",
// url: "/crime-management/crime-cases/case-closed",
// slug: "resolved-cases",
// icon: "IconAlertTriangle",
// orderSeq: 3,
// isActive: true,
// },
// ],
// },
// ],
// },
// {
// title: "Geographic Data",
// url: "/geographic-data",
// slug: "geographic-data",
// orderSeq: 3,
// icon: "IconMap",
// isActive: true,
// subItems: [
// {
// title: "Locations",
// url: "/geographic-data/locations",
// slug: "locations",
// icon: "IconMap",
// orderSeq: 1,
// isActive: true,
// subItems: [
// {
// title: "Cities",
// url: "/geographic-data/cities",
// slug: "cities",
// icon: "IconMap",
// orderSeq: 1,
// isActive: true,
// },
// {
// title: "Districts",
// url: "/geographic-data/districts",
// slug: "districts",
// icon: "IconMap",
// orderSeq: 2,
// isActive: true,
// },
// ],
// },
// {
// title: "Geographic Info",
// url: "/geographic-data/geographic-info",
// slug: "geographic-info",
// icon: "IconMap",
// orderSeq: 3,
// isActive: true,
// },
// ],
// },
// {
// title: "Demographics",
// url: "/demographics",
// slug: "demographics",
// orderSeq: 4,
// icon: "IconDatabase",
// isActive: true,
// subItems: [
// {
// title: "Demographics Data",
// url: "/demographics/demographics-data",
// slug: "demographics-data",
// icon: "IconDatabase",
// orderSeq: 1,
// isActive: true,
// },
// ],
// },
// {
// title: "User Management",
// url: "/user-management",
// slug: "user-management",
// orderSeq: 5,
// icon: "IconUsers",
// isActive: true,
// subItems: [
// {
// title: "Users",
// url: "/user-management/users",
// slug: "users",
// icon: "IconUsers",
// orderSeq: 1,
// isActive: true,
// },
// ],
// },
// {
// title: "Communication",
// url: "/communication",
// slug: "communication",
// orderSeq: 6,
// icon: "IconMessageCircle",
// isActive: true,
// subItems: [
// {
// title: "Contact Messages",
// url: "/communication/contact-messages",
// slug: "contact-messages",
// icon: "IconMessageCircle",
// orderSeq: 1,
// isActive: true,
// },
// ],
// },
// {
// title: "Settings",
// url: "/settings",
// slug: "settings",
// orderSeq: 7,
// icon: "IconSettings",
// isActive: true,
// subItems: [
// {
// title: "Navigation",
// url: "/settings/navigation",
// slug: "navigation",
// icon: "IconMenu2",
// orderSeq: 1,
// isActive: true,
// subItems: [
// {
// title: "Nav Items",
// url: "/settings/navigation/nav-items",
// slug: "nav-items",
// icon: "IconMenu2",
// orderSeq: 1,
// isActive: true,
// subSubItems: [
// {
// title: "Nav Sub Items",
// url: "/settings/navigation/nav-sub-items",
// slug: "nav-sub-items",
// icon: "IconMenu2",
// orderSeq: 1,
// isActive: true,
// },
// ],
// },
// ],
// },
// ],
// },
// ];
// // Helper function to create path
// const createPath = (currentPath: string, orderSeq: number): string => {
// return currentPath ? `${currentPath}.${orderSeq}` : `${orderSeq}`;
// };
// // Helper function to calculate level from path
// const calculateLevel = (path: string): number => {
// return path.split(".").length - 1;
// };
// // Helper function to process navigation items recursively
// const processNavigationItems = (
// items: any[],
// parentPath: string = ""
// ): any[] => {
// const processed: any[] = [];
// items.forEach((item) => {
// const currentPath = createPath(parentPath, item.orderSeq);
// const navigationItem = {
// title: item.title,
// url: item.url,
// slug: item.slug,
// icon: item.icon,
// path: currentPath,
// level: calculateLevel(currentPath),
// isActive: item.isActive,
// orderSeq: item.orderSeq,
// };
// processed.push(navigationItem);
// // Process subItems if they exist
// if (item.subItems && item.subItems.length > 0) {
// const subItems = processNavigationItems(item.subItems, currentPath);
// processed.push(...subItems);
// }
// // Process subSubItems if they exist (for backward compatibility)
// if (item.subSubItems && item.subSubItems.length > 0) {
// const subSubItems = processNavigationItems(item.subSubItems, currentPath);
// processed.push(...subSubItems);
// }
// });
// return processed;
// };
function toTitleCase(text: string): string {
return text
.toLowerCase()
.split(" ")
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
.join(" ");
}
async function main() {
// Transform the data to title case
const transformedData = crimeCategories.map(
(category: { name: string; description: string }) => ({
name: toTitleCase(category.name),
description: category.description,
})
);
console.log(`Start seeding crime categories...`);
// Use createMany for better performance
await prisma.crimeCategory.createMany({
data: transformedData,
skipDuplicates: true, // Skip any duplicate records
});
console.log(`Seeding crime categories completed.`);
}
main()
.catch((e) => {
console.error(e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});