Dealer_Onboarding_Backend/scripts/seed-permissions.ts

311 lines
9.2 KiB
TypeScript

import 'dotenv/config';
import db from '../src/database/models/index.js';
import { PERMISSIONS, PERMISSION_CATEGORIES } from '../src/common/config/permissions.js';
const { Permission } = db;
const permissionsToSeed = [
// Action Permissions
{
code: PERMISSIONS.ACTION_APPROVE,
name: 'Approve Applications',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'APPROVE',
description: 'Ability to approve applications'
},
{
code: PERMISSIONS.ACTION_REJECT,
name: 'Reject Applications',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'REJECT',
description: 'Ability to reject applications'
},
{
code: PERMISSIONS.ACTION_UPLOAD_DOCS,
name: 'Upload Documents',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'UPLOAD_DOCS',
description: 'Ability to upload documents'
},
{
code: PERMISSIONS.ACTION_REQUEST_CHANGES,
name: 'Request Changes',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'REQUEST_CHANGES',
description: 'Ability to request changes'
},
{
code: PERMISSIONS.ACTION_FORWARD,
name: 'Forward to Others',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'FORWARD',
description: 'Ability to forward applications'
},
{
code: PERMISSIONS.ACTION_REASSIGN,
name: 'Reassign Applications',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'REASSIGN',
description: 'Ability to reassign applications'
},
{
code: PERMISSIONS.ACTION_SCHEDULE_INTERVIEW,
name: 'Schedule Interviews',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'SCHEDULE_INTERVIEW',
description: 'Ability to schedule interviews'
},
{
code: PERMISSIONS.ACTION_ADD_COMMENTS,
name: 'Add Comments/Notes',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'ADD_COMMENTS',
description: 'Ability to add comments'
},
{
code: PERMISSIONS.ACTION_RANK_APPLICANTS,
name: 'Rank Applicants',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'RANK_APPLICANTS',
description: 'Ability to rank applicants'
},
{
code: PERMISSIONS.ACTION_FINAL_APPROVAL,
name: 'Final Approval',
category: PERMISSION_CATEGORIES.ACTION,
module: 'APPLICATIONS',
type: 'ACTION',
action: 'FINAL_APPROVAL',
description: 'Ability to give final approval'
},
// View Permissions
{
code: PERMISSIONS.VIEW_DETAILS,
name: 'Application Details',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_DETAILS',
description: 'View basic application details'
},
{
code: PERMISSIONS.VIEW_FINANCIAL,
name: 'Financial Information',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_FINANCIAL',
description: 'View financial information'
},
{
code: PERMISSIONS.VIEW_DISCUSSIONS,
name: 'Discussion Notes',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_DISCUSSIONS',
description: 'View internal discussion notes'
},
{
code: PERMISSIONS.VIEW_PROGRESS,
name: 'Progress Tracking',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_PROGRESS',
description: 'View application progress'
},
{
code: PERMISSIONS.VIEW_AUDIT,
name: 'Audit Logs',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_AUDIT',
description: 'View application audit logs'
},
{
code: PERMISSIONS.VIEW_DOCUMENTS,
name: 'All Documents',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_DOCUMENTS',
description: 'View all documents'
},
{
code: PERMISSIONS.VIEW_PERSONAL,
name: 'Personal Information',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_PERSONAL',
description: 'View applicant personal info'
},
{
code: PERMISSIONS.VIEW_BUSINESS,
name: 'Business Details',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_BUSINESS',
description: 'View applicant business details'
},
{
code: PERMISSIONS.VIEW_REPORTS,
name: 'Reports & Analytics',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_REPORTS',
description: 'View application reports'
},
{
code: PERMISSIONS.VIEW_HISTORY,
name: 'Application History',
category: PERMISSION_CATEGORIES.VIEW,
module: 'APPLICATIONS',
type: 'VIEW',
action: 'VIEW_HISTORY',
description: 'View status history'
},
// Stage Permissions
{
code: PERMISSIONS.STAGE_INITIAL_REVIEW,
name: 'Initial Review',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Initial Review stage'
},
{
code: PERMISSIONS.STAGE_FIELD_VERIFICATION,
name: 'Field Verification',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Field Verification stage'
},
{
code: PERMISSIONS.STAGE_LEVEL1_INTERVIEW,
name: 'Level 1 Interview',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Level 1 Interview stage'
},
{
code: PERMISSIONS.STAGE_LEVEL2_INTERVIEW,
name: 'Level 2 Interview',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Level 2 Interview stage'
},
{
code: PERMISSIONS.STAGE_RANKING,
name: 'Ranking & Selection',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Ranking & Selection stage'
},
{
code: PERMISSIONS.STAGE_LEGAL_REVIEW,
name: 'Legal Review',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Legal Review stage'
},
{
code: PERMISSIONS.STAGE_FINANCIAL_REVIEW,
name: 'Financial Review',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Financial Review stage'
},
{
code: PERMISSIONS.STAGE_FINAL_APPROVAL,
name: 'Final Approval',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Final Approval stage'
},
{
code: PERMISSIONS.STAGE_PAYMENT,
name: 'Payment Verification',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Payment Verification stage'
},
{
code: PERMISSIONS.STAGE_ONBOARDING,
name: 'Onboarding',
category: PERMISSION_CATEGORIES.STAGE,
module: 'WORKFLOW',
type: 'STAGE_ACCESS',
action: 'ACCESS',
description: 'Access to Onboarding stage'
}
];
async function seedPermissions() {
console.log('🌱 Seeding permissions...');
try {
await db.sequelize.authenticate();
for (const p of permissionsToSeed) {
await Permission.upsert({
permissionCode: p.code,
permissionName: p.name,
permissionCategory: p.category,
module: p.module,
permissionType: p.type,
action: p.action,
description: p.description
});
}
console.log('✅ Permissions seeded successfully!');
process.exit(0);
} catch (error) {
console.error('❌ Seeding failed:', error);
process.exit(1);
}
}
seedPermissions();