Files
2025-04-08 02:23:25 +00:00

99 lines
2.9 KiB
TypeScript

import { drizzle } from 'drizzle-orm/node-postgres';
import { migrate } from 'drizzle-orm/node-postgres/migrator';
import pg from 'pg';
import * as schema from './shared/schema';
const { Pool } = pg;
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
const db = drizzle(pool, { schema });
async function main() {
console.log('Applying migrations...');
try {
// Apply the migrations
await migrate(db, { migrationsFolder: './migrations' });
console.log('Migrations applied successfully');
// Insert default roles if they don't exist
await db.transaction(async (tx) => {
const adminRoleExists = await tx.query.roles.findFirst({
where: (roles, { eq }) => eq(roles.name, 'admin')
});
if (!adminRoleExists) {
console.log('Creating admin role...');
const [adminRole] = await tx.insert(schema.roles).values({
name: 'admin',
description: 'Administrator with full system access',
isDefault: false
}).returning();
// Add all permissions to admin role
const permissions = Object.values(schema.PERMISSIONS);
await Promise.all(permissions.map(permission =>
tx.insert(schema.rolePermissions).values({
roleId: adminRole.id,
permission
})
));
}
const userRoleExists = await tx.query.roles.findFirst({
where: (roles, { eq }) => eq(roles.name, 'user')
});
if (!userRoleExists) {
console.log('Creating user role...');
const [userRole] = await tx.insert(schema.roles).values({
name: 'user',
description: 'Regular user with limited access',
isDefault: true
}).returning();
// Add basic permissions to user role
const basicPermissions = [
schema.PERMISSIONS.VIEW_USERS,
schema.PERMISSIONS.VIEW_LDAP_CONNECTIONS,
schema.PERMISSIONS.VIEW_AD_USERS,
schema.PERMISSIONS.VIEW_AD_GROUPS,
schema.PERMISSIONS.VIEW_AD_OUS,
schema.PERMISSIONS.VIEW_AD_COMPUTERS,
schema.PERMISSIONS.VIEW_AD_DOMAINS
];
await Promise.all(basicPermissions.map(permission =>
tx.insert(schema.rolePermissions).values({
roleId: userRole.id,
permission
})
));
}
const apiRoleExists = await tx.query.roles.findFirst({
where: (roles, { eq }) => eq(roles.name, 'api')
});
if (!apiRoleExists) {
console.log('Creating api role...');
await tx.insert(schema.roles).values({
name: 'api',
description: 'API access with customizable permissions',
isDefault: false
});
}
});
console.log('Setup completed successfully');
} catch (error) {
console.error('Migration failed:', error);
} finally {
await pool.end();
}
}
main();