#!/usr/bin/env ts-node import * as fs from 'fs' import * as path from 'path' import { prisma } from '../src/lib/prisma' function findModules(dir: string): string[] { const results: string[] = [] const entries = fs.readdirSync(dir, { withFileTypes: true }) for (const e of entries) { const full = path.join(dir, e.name) if (e.isDirectory()) { results.push(...findModules(full)) } else if (e.isFile() && e.name.endsWith('.module.ts')) { results.push(full) } } return results } function moduleNameFromFile(filePath: string) { const name = path.basename(filePath).replace('.module.ts', '') return name.replace(/-module$|\.module$/i, '') } function makePermissionsFor(moduleName: string) { const base = moduleName.replace(/\W+/g, '_').toLowerCase() return [`${base}:create`, `${base}:read`, `${base}:update`, `${base}:delete`] } async function main() { // const srcDir = path.resolve(__dirname, '..', 'src') // const moduleFiles = findModules(srcDir) // const modules = moduleFiles.map(moduleNameFromFile) // const permsMap: Record = {} // for (const m of modules) { // for (const p of makePermissionsFor(m)) permsMap[p] = false // } // // Upsert roles: ensure admin has full permissions, others get entries added // const roles = await prisma.role.findMany() // for (const r of roles) { // const current: Record = (r.permissions as any) || {} // const merged = { ...permsMap, ...current } // // If role name is admin (case-insensitive), set all permissions to true // if (r.name && r.name.toLowerCase() === 'admin') { // for (const key of Object.keys(merged)) merged[key] = true // } else { // // keep existing truthy values, otherwise false // for (const key of Object.keys(merged)) merged[key] = merged[key] || false // } // await prisma.role.update({ where: { id: r.id }, data: { permissions: merged } }) // console.log( // `Updated role ${r.name} (id=${r.id}) with ${Object.keys(merged).length} permissions`, // ) // } await prisma.$disconnect() } main().catch(e => { console.error(e) process.exit(1) })