1
0
Code Issues Pull Requests Actions Packages Projects Releases Wiki Activity Security Code Quality

Add user page

This commit is contained in:
2025-07-06 21:28:45 +07:00
parent 76ca36ca1b
commit ae1a45fe57
24 changed files with 2661 additions and 232 deletions

View File

@@ -2,6 +2,9 @@ import { Low } from "lowdb";
import { JSONFile } from "lowdb/node";
import { DBSchema } from "./database.schema";
import { defaultAdminUser } from "./defaultAdminUser";
import { sampleUsers } from "./sampleUsers";
import { samplePermissions } from "./samplePermissions";
import { sampleUserPermissions } from "./sampleUserPermissions";
import path from "path";
// File path for db.json
@@ -21,14 +24,52 @@ export function getNextId<T extends { id: number }>(items: T[]): number {
return Math.max(...items.map((item) => item.id)) + 1;
}
// Initialize DB and ensure default admin user exists
// Initialize DB and ensure sample data exists
export async function initDB() {
await db.read();
db.data ||= { customers: [], users: [], customerDependants: [], userPermissions: [], permissions: [] };
// Initialize users with default admin and sample users
if (db.data.users.length === 0) {
db.data.users.push(defaultAdminUser);
await db.write();
db.data.users.push(...sampleUsers);
}
// Initialize permissions with sample data
if (db.data.permissions.length === 0) {
db.data.permissions.push(...samplePermissions);
}
// Initialize user permissions with sample data
if (db.data.userPermissions.length === 0) {
db.data.userPermissions.push(...sampleUserPermissions);
}
await db.write();
}
// Reset database by clearing all data and reinitializing with sample data
export async function resetDB() {
// Clear all existing data
db.data = {
customers: [],
users: [],
customerDependants: [],
userPermissions: [],
permissions: [],
};
// Initialize users with default admin and sample users
db.data.users.push(defaultAdminUser);
db.data.users.push(...sampleUsers);
// Initialize permissions with sample data
db.data.permissions.push(...samplePermissions);
// Initialize user permissions with sample data
db.data.userPermissions.push(...sampleUserPermissions);
await db.write();
}
export { db };

View File

@@ -1,93 +1,5 @@
{
"customers": [
{
"id": 6,
"firstNameEn": "David",
"lastNameEn": "Brown",
"email": "david.brown@example.com",
"mobile": "0987901234",
"originAdd1": "sadfsa",
"localAdd1": "sadfsaf"
},
{
"id": 7,
"firstNameEn": "Emily",
"lastNameEn": "Davis",
"email": "emily.davis@example.com",
"mobile": "0987567890",
"originAdd1": "sadfsa",
"localAdd1": "asdfsaf"
},
{
"id": 8,
"firstNameEn": "Robert",
"lastNameEn": "Miller",
"email": "robert.miller@example.com",
"mobile": "0987234567"
},
{
"id": 9,
"firstNameEn": "Lisa",
"lastNameEn": "Wilson",
"email": "lisa.wilson@example.com",
"mobile": "0987890123",
"originAdd1": "ssss",
"localAdd1": "sssss"
},
{
"id": 10,
"firstNameEn": "James",
"lastNameEn": "Moore",
"email": "james.moore@example.com",
"mobile": "0987456789"
},
{
"id": 11,
"firstNameEn": "Ashley",
"lastNameEn": "Taylor",
"email": "ashley.taylor@example.com",
"mobile": "0987012345"
},
{
"id": 12,
"firstNameEn": "Christopher",
"lastNameEn": "Anderson",
"email": "christopher.anderson@example.com",
"mobile": "0987678901"
},
{
"id": 13,
"firstNameEn": "sdfas",
"lastNameEn": "sadfasf",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491"
},
{
"id": 14,
"firstNameEn": "sdaf",
"lastNameEn": "asdfasf",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491"
},
{
"id": 15,
"firstNameEn": "Đỗ",
"lastNameEn": "Thanh Tùng",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491",
"originAdd1": "123",
"localAdd1": "asdfsdaf"
},
{
"id": 16,
"firstNameEn": "Đỗ",
"lastNameEn": "Thanh Tùng",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491",
"originAdd1": "12344444",
"localAdd1": "asdfsdaf11111"
}
],
"customers": [],
"users": [
{
"id": 1,
@@ -97,52 +9,490 @@
"lastName": "User",
"password": "admin123",
"isDeleted": false
}
],
"customerDependants": [
},
{
"id": 2,
"username": "john.doe",
"email": "john.doe@example.com",
"firstName": "John",
"lastName": "Doe",
"password": "password123",
"isDeleted": false
},
{
"id": 3,
"username": "jane.smith",
"email": "jane.smith@example.com",
"firstName": "Jane",
"lastName": "Smith",
"password": "password123",
"isDeleted": false
},
{
"id": 4,
"username": "mike.johnson",
"email": "mike.johnson@example.com",
"firstName": "Mike",
"lastName": "Johnson",
"password": "password123",
"isDeleted": false
},
{
"id": 5,
"custId": 13,
"firstNameEn": "do thanh",
"lastNameEn": "tung",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491"
"username": "sarah.wilson",
"email": "sarah.wilson@example.com",
"firstName": "Sarah",
"lastName": "Wilson",
"password": "password123",
"isDeleted": false
},
{
"id": 6,
"custId": 13,
"firstNameEn": "do thanh",
"lastNameEn": "tung",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417492"
"username": "david.brown",
"email": "david.brown@example.com",
"firstName": "David",
"lastName": "Brown",
"password": "password123",
"isDeleted": false
},
{
"id": 1751787328700,
"custId": 14,
"firstNameEn": "222",
"lastNameEn": "3333",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491"
"id": 7,
"username": "emma.davis",
"email": "emma.davis@example.com",
"firstName": "Emma",
"lastName": "Davis",
"password": "password123",
"isDeleted": false
},
{
"id": 1751787328701,
"custId": 15,
"firstNameEn": "Đỗ",
"lastNameEn": "Thanh Tùng",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491",
"originAdd1": "123",
"localAdd1": "sdfgsdfg"
"id": 8,
"username": "alex.martinez",
"email": "alex.martinez@example.com",
"firstName": "Alex",
"lastName": "Martinez",
"password": "password123",
"isDeleted": false
},
{
"id": 1751787328702,
"custId": 16,
"firstNameEn": "Đỗ",
"lastNameEn": "Tùng",
"originAdd1": "1231231231",
"localAdd1": "asdfsdaf",
"id": 9,
"username": "lisa.garcia",
"email": "lisa.garcia@example.com",
"firstName": "Lisa",
"lastName": "Garcia",
"password": "password123",
"isDeleted": false
},
{
"id": 10,
"username": "robert.taylor",
"email": "robert.taylor@example.com",
"firstName": "Robert",
"lastName": "Taylor",
"password": "password123",
"isDeleted": false
},
{
"id": 11,
"username": "maria.rodriguez",
"email": "maria.rodriguez@example.com",
"firstName": "Maria",
"lastName": "Rodriguez",
"password": "password123",
"isDeleted": false
},
{
"id": 12,
"username": "tungdt",
"email": "dothanhtung196@gmail.com",
"mobile": "0987417491"
"firstName": "Đỗ",
"lastName": "Tùng",
"password": "123456",
"isDeleted": false
}
]
],
"userPermissions": [
{
"id": 16,
"userId": 2,
"permissionId": 4
},
{
"id": 17,
"userId": 2,
"permissionId": 5
},
{
"id": 18,
"userId": 2,
"permissionId": 8
},
{
"id": 19,
"userId": 2,
"permissionId": 11
},
{
"id": 20,
"userId": 3,
"permissionId": 1
},
{
"id": 21,
"userId": 3,
"permissionId": 2
},
{
"id": 22,
"userId": 3,
"permissionId": 14
},
{
"id": 23,
"userId": 3,
"permissionId": 8
},
{
"id": 24,
"userId": 4,
"permissionId": 4
},
{
"id": 25,
"userId": 4,
"permissionId": 1
},
{
"id": 26,
"userId": 4,
"permissionId": 8
},
{
"id": 27,
"userId": 4,
"permissionId": 9
},
{
"id": 28,
"userId": 4,
"permissionId": 15
},
{
"id": 29,
"userId": 5,
"permissionId": 4
},
{
"id": 30,
"userId": 5,
"permissionId": 5
},
{
"id": 31,
"userId": 5,
"permissionId": 11
},
{
"id": 32,
"userId": 5,
"permissionId": 12
},
{
"id": 33,
"userId": 6,
"permissionId": 7
},
{
"id": 34,
"userId": 6,
"permissionId": 10
},
{
"id": 35,
"userId": 6,
"permissionId": 15
},
{
"id": 36,
"userId": 6,
"permissionId": 1
},
{
"id": 37,
"userId": 6,
"permissionId": 2
},
{
"id": 38,
"userId": 7,
"permissionId": 11
},
{
"id": 39,
"userId": 7,
"permissionId": 12
},
{
"id": 40,
"userId": 7,
"permissionId": 13
},
{
"id": 41,
"userId": 7,
"permissionId": 4
},
{
"id": 42,
"userId": 8,
"permissionId": 4
},
{
"id": 43,
"userId": 8,
"permissionId": 1
},
{
"id": 44,
"userId": 8,
"permissionId": 11
},
{
"id": 45,
"userId": 9,
"permissionId": 4
},
{
"id": 46,
"userId": 9,
"permissionId": 5
},
{
"id": 47,
"userId": 9,
"permissionId": 6
},
{
"id": 48,
"userId": 9,
"permissionId": 8
},
{
"id": 49,
"userId": 9,
"permissionId": 11
},
{
"id": 50,
"userId": 10,
"permissionId": 4
},
{
"id": 51,
"userId": 10,
"permissionId": 1
},
{
"id": 52,
"userId": 10,
"permissionId": 8
},
{
"id": 53,
"userId": 10,
"permissionId": 9
},
{
"id": 54,
"userId": 11,
"permissionId": 4
},
{
"id": 55,
"userId": 11,
"permissionId": 5
},
{
"id": 56,
"userId": 11,
"permissionId": 8
},
{
"id": 57,
"userId": 11,
"permissionId": 11
},
{
"id": 58,
"userId": 11,
"permissionId": 12
},
{
"id": 59,
"userId": 1,
"permissionId": 1
},
{
"id": 60,
"userId": 1,
"permissionId": 2
},
{
"id": 61,
"userId": 1,
"permissionId": 4
},
{
"id": 62,
"userId": 1,
"permissionId": 5
},
{
"id": 63,
"userId": 1,
"permissionId": 6
},
{
"id": 64,
"userId": 1,
"permissionId": 7
},
{
"id": 65,
"userId": 1,
"permissionId": 8
},
{
"id": 66,
"userId": 1,
"permissionId": 9
},
{
"id": 67,
"userId": 1,
"permissionId": 10
},
{
"id": 68,
"userId": 1,
"permissionId": 11
},
{
"id": 69,
"userId": 1,
"permissionId": 12
},
{
"id": 70,
"userId": 1,
"permissionId": 13
},
{
"id": 71,
"userId": 1,
"permissionId": 14
},
{
"id": 72,
"userId": 1,
"permissionId": 15
},
{
"id": 73,
"userId": 1,
"permissionId": 3
}
],
"permissions": [
{
"id": 1,
"name": "user_read",
"description": "Read user information",
"isActive": true
},
{
"id": 2,
"name": "user_write",
"description": "Create and update user information",
"isActive": true
},
{
"id": 3,
"name": "user_delete",
"description": "Delete user accounts",
"isActive": true
},
{
"id": 4,
"name": "customer_read",
"description": "Read customer information",
"isActive": true
},
{
"id": 5,
"name": "customer_write",
"description": "Create and update customer information",
"isActive": true
},
{
"id": 6,
"name": "customer_delete",
"description": "Delete customer records",
"isActive": true
},
{
"id": 7,
"name": "admin_panel",
"description": "Access administrative panel",
"isActive": true
},
{
"id": 8,
"name": "reports_view",
"description": "View system reports",
"isActive": true
},
{
"id": 9,
"name": "reports_export",
"description": "Export reports and data",
"isActive": true
},
{
"id": 10,
"name": "system_settings",
"description": "Modify system configuration",
"isActive": true
},
{
"id": 11,
"name": "mail_template_read",
"description": "Read mail templates",
"isActive": true
},
{
"id": 12,
"name": "mail_template_write",
"description": "Create and update mail templates",
"isActive": true
},
{
"id": 13,
"name": "mail_template_delete",
"description": "Delete mail templates",
"isActive": true
},
{
"id": 14,
"name": "permission_manage",
"description": "Manage user permissions",
"isActive": true
},
{
"id": 15,
"name": "audit_log",
"description": "View audit logs and system activities",
"isActive": true
}
],
"customerDependants": []
}

View File

@@ -0,0 +1,94 @@
import { Permission } from "./database.schema";
export const samplePermissions: Permission[] = [
{
id: 1,
name: "user_read",
description: "Read user information",
isActive: true,
},
{
id: 2,
name: "user_write",
description: "Create and update user information",
isActive: true,
},
{
id: 3,
name: "user_delete",
description: "Delete user accounts",
isActive: true,
},
{
id: 4,
name: "customer_read",
description: "Read customer information",
isActive: true,
},
{
id: 5,
name: "customer_write",
description: "Create and update customer information",
isActive: true,
},
{
id: 6,
name: "customer_delete",
description: "Delete customer records",
isActive: true,
},
{
id: 7,
name: "admin_panel",
description: "Access administrative panel",
isActive: true,
},
{
id: 8,
name: "reports_view",
description: "View system reports",
isActive: true,
},
{
id: 9,
name: "reports_export",
description: "Export reports and data",
isActive: true,
},
{
id: 10,
name: "system_settings",
description: "Modify system configuration",
isActive: true,
},
{
id: 11,
name: "mail_template_read",
description: "Read mail templates",
isActive: true,
},
{
id: 12,
name: "mail_template_write",
description: "Create and update mail templates",
isActive: true,
},
{
id: 13,
name: "mail_template_delete",
description: "Delete mail templates",
isActive: true,
},
{
id: 14,
name: "permission_manage",
description: "Manage user permissions",
isActive: true,
},
{
id: 15,
name: "audit_log",
description: "View audit logs and system activities",
isActive: true,
},
];

View File

@@ -0,0 +1,83 @@
import { UserPermission } from "./database.schema";
export const sampleUserPermissions: UserPermission[] = [
// Admin user (id: 1) gets all permissions
{ id: 1, userId: 1, permissionId: 1 },
{ id: 2, userId: 1, permissionId: 2 },
{ id: 3, userId: 1, permissionId: 3 },
{ id: 4, userId: 1, permissionId: 4 },
{ id: 5, userId: 1, permissionId: 5 },
{ id: 6, userId: 1, permissionId: 6 },
{ id: 7, userId: 1, permissionId: 7 },
{ id: 8, userId: 1, permissionId: 8 },
{ id: 9, userId: 1, permissionId: 9 },
{ id: 10, userId: 1, permissionId: 10 },
{ id: 11, userId: 1, permissionId: 11 },
{ id: 12, userId: 1, permissionId: 12 },
{ id: 13, userId: 1, permissionId: 13 },
{ id: 14, userId: 1, permissionId: 14 },
{ id: 15, userId: 1, permissionId: 15 },
// John Doe (id: 2) - Customer Manager
{ id: 16, userId: 2, permissionId: 4 }, // customer_read
{ id: 17, userId: 2, permissionId: 5 }, // customer_write
{ id: 18, userId: 2, permissionId: 8 }, // reports_view
{ id: 19, userId: 2, permissionId: 11 }, // mail_template_read
// Jane Smith (id: 3) - User Manager
{ id: 20, userId: 3, permissionId: 1 }, // user_read
{ id: 21, userId: 3, permissionId: 2 }, // user_write
{ id: 22, userId: 3, permissionId: 14 }, // permission_manage
{ id: 23, userId: 3, permissionId: 8 }, // reports_view
// Mike Johnson (id: 4) - Reports Analyst
{ id: 24, userId: 4, permissionId: 4 }, // customer_read
{ id: 25, userId: 4, permissionId: 1 }, // user_read
{ id: 26, userId: 4, permissionId: 8 }, // reports_view
{ id: 27, userId: 4, permissionId: 9 }, // reports_export
{ id: 28, userId: 4, permissionId: 15 }, // audit_log
// Sarah Wilson (id: 5) - Customer Support
{ id: 29, userId: 5, permissionId: 4 }, // customer_read
{ id: 30, userId: 5, permissionId: 5 }, // customer_write
{ id: 31, userId: 5, permissionId: 11 }, // mail_template_read
{ id: 32, userId: 5, permissionId: 12 }, // mail_template_write
// David Brown (id: 6) - System Administrator
{ id: 33, userId: 6, permissionId: 7 }, // admin_panel
{ id: 34, userId: 6, permissionId: 10 }, // system_settings
{ id: 35, userId: 6, permissionId: 15 }, // audit_log
{ id: 36, userId: 6, permissionId: 1 }, // user_read
{ id: 37, userId: 6, permissionId: 2 }, // user_write
// Emma Davis (id: 7) - Content Manager
{ id: 38, userId: 7, permissionId: 11 }, // mail_template_read
{ id: 39, userId: 7, permissionId: 12 }, // mail_template_write
{ id: 40, userId: 7, permissionId: 13 }, // mail_template_delete
{ id: 41, userId: 7, permissionId: 4 }, // customer_read
// Alex Martinez (id: 8) - Junior Developer
{ id: 42, userId: 8, permissionId: 4 }, // customer_read
{ id: 43, userId: 8, permissionId: 1 }, // user_read
{ id: 44, userId: 8, permissionId: 11 }, // mail_template_read
// Lisa Garcia (id: 9) - Senior Support
{ id: 45, userId: 9, permissionId: 4 }, // customer_read
{ id: 46, userId: 9, permissionId: 5 }, // customer_write
{ id: 47, userId: 9, permissionId: 6 }, // customer_delete
{ id: 48, userId: 9, permissionId: 8 }, // reports_view
{ id: 49, userId: 9, permissionId: 11 }, // mail_template_read
// Robert Taylor (id: 10) - Data Analyst
{ id: 50, userId: 10, permissionId: 4 }, // customer_read
{ id: 51, userId: 10, permissionId: 1 }, // user_read
{ id: 52, userId: 10, permissionId: 8 }, // reports_view
{ id: 53, userId: 10, permissionId: 9 }, // reports_export
// Maria Rodriguez (id: 11) - Customer Service Lead
{ id: 54, userId: 11, permissionId: 4 }, // customer_read
{ id: 55, userId: 11, permissionId: 5 }, // customer_write
{ id: 56, userId: 11, permissionId: 8 }, // reports_view
{ id: 57, userId: 11, permissionId: 11 }, // mail_template_read
{ id: 58, userId: 11, permissionId: 12 }, // mail_template_write
];

View File

@@ -0,0 +1,94 @@
import { User } from "./database.schema";
export const sampleUsers: User[] = [
{
id: 2,
username: "john.doe",
email: "john.doe@example.com",
firstName: "John",
lastName: "Doe",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 3,
username: "jane.smith",
email: "jane.smith@example.com",
firstName: "Jane",
lastName: "Smith",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 4,
username: "mike.johnson",
email: "mike.johnson@example.com",
firstName: "Mike",
lastName: "Johnson",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 5,
username: "sarah.wilson",
email: "sarah.wilson@example.com",
firstName: "Sarah",
lastName: "Wilson",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 6,
username: "david.brown",
email: "david.brown@example.com",
firstName: "David",
lastName: "Brown",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 7,
username: "emma.davis",
email: "emma.davis@example.com",
firstName: "Emma",
lastName: "Davis",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 8,
username: "alex.martinez",
email: "alex.martinez@example.com",
firstName: "Alex",
lastName: "Martinez",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 9,
username: "lisa.garcia",
email: "lisa.garcia@example.com",
firstName: "Lisa",
lastName: "Garcia",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 10,
username: "robert.taylor",
email: "robert.taylor@example.com",
firstName: "Robert",
lastName: "Taylor",
password: "password123", // You should hash this in production
isDeleted: false,
},
{
id: 11,
username: "maria.rodriguez",
email: "maria.rodriguez@example.com",
firstName: "Maria",
lastName: "Rodriguez",
password: "password123", // You should hash this in production
isDeleted: false,
},
];