111 lines
4.5 KiB
TypeScript
111 lines
4.5 KiB
TypeScript
import 'dotenv/config';
|
||
import db from '../src/database/models/index.js';
|
||
import bcrypt from 'bcryptjs';
|
||
import { ROLES } from '../src/common/config/constants.js';
|
||
import { resolveManagerCode } from '../src/services/userRoleCode.service.js';
|
||
|
||
const { Role, User, UserRole, Zone, State, Region, Location } = db;
|
||
|
||
async function masterReset() {
|
||
console.log('--- RELOADING DATABASE FOR OFFBOARDING TEST ---');
|
||
|
||
try {
|
||
await db.sequelize.authenticate();
|
||
|
||
// 1. Force Sync (Drop and Recreate)
|
||
await db.sequelize.sync({ force: true });
|
||
console.log('✅ Schema reset complete.');
|
||
|
||
const hashedPassword = await bcrypt.hash('Admin@123', 10);
|
||
|
||
// 2. Seed All Roles
|
||
const rolesToSeed = Object.values(ROLES).map(code => ({
|
||
roleCode: code,
|
||
roleName: code,
|
||
category: 'SYSTEM'
|
||
}));
|
||
|
||
for (const r of rolesToSeed) {
|
||
await Role.create(r);
|
||
}
|
||
console.log('✅ Roles seeded.');
|
||
|
||
// 3. Seed Basic Hierarchy
|
||
const { District } = db;
|
||
const zone = await Zone.create({ name: 'North', code: 'N' });
|
||
const state = await State.create({ name: 'Delhi', zoneId: zone.id });
|
||
const region = await Region.create({ name: 'NCR', zoneId: zone.id });
|
||
|
||
// Create South Delhi District and link to NCR Region
|
||
const district = await District.create({
|
||
name: 'South Delhi',
|
||
stateId: state.id,
|
||
regionId: region.id,
|
||
zoneId: zone.id,
|
||
isActive: true
|
||
});
|
||
|
||
const loc = await Location.create({
|
||
name: 'Central Delhi',
|
||
stateId: state.id,
|
||
regionId: region.id,
|
||
zoneId: zone.id,
|
||
districtId: district.id
|
||
});
|
||
console.log('✅ Hierarchy seeded with South Delhi District.');
|
||
|
||
// 4. Seed Essential Users
|
||
const users = [
|
||
{ email: 'admin@royalenfield.com', fullName: 'Super Admin', roleCode: ROLES.SUPER_ADMIN },
|
||
{ email: 'piyush@royalenfield.com', fullName: 'piyush', roleCode: ROLES.DD_ZM },
|
||
{ email: 'manish@royalenfield.com', fullName: 'manish', roleCode: ROLES.RBM },
|
||
{ email: 'manav@royalenfield.com', fullName: 'manav', roleCode: ROLES.ZBH },
|
||
{ email: 'jaya@royalenfield.com', fullName: 'Jaya', roleCode: ROLES.DD_LEAD },
|
||
{ email: 'ganesh@royalenfield.com', fullName: 'ganesh', roleCode: ROLES.DD_HEAD },
|
||
{ email: 'yashwin@royalenfield.com', fullName: 'Yashwin', roleCode: ROLES.NBH },
|
||
{ email: 'fdd@royalenfield.com', fullName: 'FDD Team', roleCode: ROLES.FDD },
|
||
{ email: 'finance@royalenfield.com', fullName: 'Finance Admin', roleCode: ROLES.FINANCE },
|
||
{ email: 'abhishek@royalenfield.com', fullName: 'abhishek', roleCode: ROLES.ASM },
|
||
{ email: 'lince@royalenfield.com', fullName: 'Lince', roleCode: ROLES.DD_ADMIN },
|
||
{ email: 'legal@royalenfield.com', fullName: 'Legal Admin', roleCode: ROLES.LEGAL_ADMIN },
|
||
];
|
||
|
||
for (const u of users) {
|
||
const user = await User.create({
|
||
...u,
|
||
password: hashedPassword,
|
||
status: 'active'
|
||
});
|
||
const role = await Role.findOne({ where: { roleCode: u.roleCode } });
|
||
if (role) {
|
||
// Map assignments based on role category (Regional vs Granular)
|
||
const isRegionalRole = [ROLES.RBM, ROLES.DD_ZM, ROLES.ZBH].includes(u.roleCode as any);
|
||
const isGranularRole = [ROLES.ASM].includes(u.roleCode as any);
|
||
const managerCode = await resolveManagerCode(role.id, u.roleCode as string, null);
|
||
|
||
await UserRole.create({
|
||
userId: user.id,
|
||
roleId: role.id,
|
||
isActive: true,
|
||
isPrimary: true,
|
||
zoneId: isRegionalRole || isGranularRole ? zone.id : null,
|
||
regionId: isRegionalRole ? region.id : null,
|
||
districtId: isGranularRole ? district.id : null,
|
||
managerCode
|
||
});
|
||
}
|
||
}
|
||
console.log('✅ Standard Users seeded.');
|
||
|
||
console.log('ℹ️ Dealer user/profile not auto-seeded in stable reset (as requested).');
|
||
|
||
console.log('--- SYSTEM READY FOR OFFBOARDING TESTING ---');
|
||
process.exit(0);
|
||
} catch (error) {
|
||
console.error('❌ Reset failed:', error);
|
||
process.exit(1);
|
||
}
|
||
}
|
||
|
||
masterReset();
|