This commit is contained in:
2025-09-04 11:46:08 +08:00
parent 2adf60f9eb
commit 8817b937b1
29 changed files with 593 additions and 374 deletions

View File

@@ -1,7 +1,7 @@
[
{
"id": "role_admin_desa",
"name": "ADMIN_DESA",
"id": "1",
"name": "ADMIN DESA",
"description": "Administrator Desa",
"permissions": ["manage_users", "manage_content", "view_reports"],
"isActive": true,
@@ -9,8 +9,8 @@
"updatedAt": "2025-09-01T00:00:00.000Z"
},
{
"id": "role_admin_kesehatan",
"name": "ADMIN_KESEHATAN",
"id": "2",
"name": "ADMIN KESEHATAN",
"description": "Administrator Bidang Kesehatan",
"permissions": ["manage_health_data", "view_reports"],
"isActive": true,
@@ -18,8 +18,8 @@
"updatedAt": "2025-09-01T00:00:00.000Z"
},
{
"id": "role_admin_sekolah",
"name": "ADMIN_SEKOLAH",
"id": "3",
"name": "ADMIN SEKOLAH",
"description": "Administrator Sekolah",
"permissions": ["manage_school_data", "view_reports"],
"isActive": true,

View File

@@ -1,32 +1,29 @@
[
{
"id": "user_admin_desa",
"id": "1",
"nama": "Admin Desa",
"email": "admin.desa@example.com",
"password": "$2b$10$XFDWYOJFxQ7ZM5bA0N4Z0O8u0eKYv58wLsaR7h6XK9bqWJ1YQJQ9q",
"roleId": "role_admin_desa",
"nomor": "089647037426",
"roleId": "1",
"isActive": true,
"lastLogin": "2025-08-31T10:00:00.000Z",
"createdAt": "2025-09-01T00:00:00.000Z",
"updatedAt": "2025-09-01T00:00:00.000Z"
},
{
"id": "user_admin_puskesmas",
"id": "2",
"nama": "Admin Kesehatan",
"email": "admin.kesehatan@example.com",
"password": "$2b$10$XFDWYOJFxQ7ZM5bA0N4Z0O8u0eKYv58wLsaR7h6XK9bqWJ1YQJQ9q",
"roleId": "role_admin_kesehatan",
"nomor": "082339004198",
"roleId": "2",
"isActive": true,
"lastLogin": null,
"createdAt": "2025-09-01T00:00:00.000Z",
"updatedAt": "2025-09-01T00:00:00.000Z"
},
{
"id": "user_admin_sekolah",
"id": "3",
"nama": "Admin Sekolah",
"email": "admin.sekolah@example.com",
"password": "$2b$10$XFDWYOJFxQ7ZM5bA0N4Z0O8u0eKYv58wLsaR7h6XK9bqWJ1YQJQ9q",
"roleId": "role_admin_sekolah",
"nomor": "085237157222",
"roleId": "3",
"isActive": true,
"lastLogin": null,
"createdAt": "2025-09-01T00:00:00.000Z",

View File

@@ -2103,14 +2103,16 @@ model KategoriBuku {
DataPerpustakaan DataPerpustakaan[]
}
// ========================================= USER ========================================= //
model User {
id String @id @default(cuid())
nama String
email String @unique
password String?
username String
nomor String @unique
role Role @relation(fields: [roleId], references: [id])
roleId String
instansi String? // Nama instansi (Puskesmas, Sekolah, dll)
roleId String @default("1")
instansi String?
UserSession UserSession? // Nama instansi (Puskesmas, Sekolah, dll)
isActive Boolean @default(true)
lastLogin DateTime?
createdAt DateTime @default(now())
@@ -2132,6 +2134,15 @@ model Role {
@@map("roles")
}
model KodeOtp {
id String @id @default(cuid())
isActive Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
nomor String
otp Int
}
// Tabel untuk menyimpan permission
model Permission {
id String @id @default(cuid())
@@ -2143,6 +2154,17 @@ model Permission {
@@map("permissions")
}
model UserSession {
id String @id @default(cuid())
token String
expires DateTime?
active Boolean @default(true)
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
User User @relation(fields: [userId], references: [id])
userId String @unique
}
// ========================================= DATA PENDIDIKAN ========================================= //
model DataPendidikan {
id String @id @default(cuid())

View File

@@ -57,47 +57,60 @@ import users from "./data/user/users.json";
(async () => {
// =========== USER & ROLE ===========
for (const r of roles) {
await prisma.role.upsert({
where: { id: r.id },
update: {
name: r.name,
description: r.description,
permissions: r.permissions,
isActive: true,
},
create: {
id: r.id,
name: r.name,
description: r.description,
permissions: r.permissions,
isActive: true,
},
});
// In your seed.ts
// =========== ROLES ===========
console.log("🔄 Seeding roles...");
for (const r of roles) {
await prisma.role.upsert({
where: { id: r.id },
update: {
name: r.name,
description: r.description,
permissions: r.permissions,
isActive: r.isActive,
},
create: {
id: r.id,
name: r.name,
description: r.description,
permissions: r.permissions,
isActive: r.isActive,
},
});
}
console.log("✅ Roles seeded");
// =========== USERS ===========
console.log("🔄 Seeding users...");
for (const u of users) {
// First verify the role exists
const roleExists = await prisma.role.findUnique({
where: { id: u.roleId }
});
if (!roleExists) {
console.error(`❌ Role with id ${u.roleId} not found for user ${u.nama}`);
continue;
}
console.log("✅ Roles seeded");
//users
for (const u of users) {
await prisma.user.upsert({
where: { id: u.id },
update: {
nama: u.nama,
email: u.email,
password: u.password,
roleId: u.roleId,
isActive: true,
},
create: {
id: u.id,
nama: u.nama,
email: u.email,
password: u.password,
roleId: u.roleId,
isActive: true,
},
});
}
console.log("✅ Users seeded");
await prisma.user.upsert({
where: { id: u.id },
update: {
username: u.nama,
nomor: u.nomor,
roleId: u.roleId,
isActive: u.isActive,
},
create: {
id: u.id,
username: u.nama,
nomor: u.nomor,
roleId: u.roleId,
isActive: u.isActive,
},
});
}
console.log("✅ Users seeded");
// =========== LANDING PAGE ===========
// =========== SUBMENU PROFILE ===========
// =========== PROFILE PEJABAT DESA ===========