Dealer_Onboarding_Backend/reset_db.ts

85 lines
3.9 KiB
TypeScript

import 'dotenv/config';
import db from './src/database/models/index.js';
import bcrypt from 'bcryptjs';
import { syncLocationManagers, syncRegionManager, syncZoneManager } from './src/modules/master/syncHierarchy.service.js';
const { Role, Zone, Region, State, District, User, UserRole, Questionnaire } = db;
async function resetAndSeed() {
console.log('--- REFRESHING DATABASE (DROP & RECREATE) ---');
await db.sequelize.authenticate();
// WARNING: This drops all tables!
await db.sequelize.sync({ force: true });
console.log('Database schema recreated.');
const hashedPassword = await bcrypt.hash('Admin@123', 10);
// 1. Roles
const roles = [
{ roleCode: 'NBH', roleName: 'National Business Head', category: 'NATIONAL' },
{ roleCode: 'DD Head', roleName: 'DD Head', category: 'NATIONAL' },
{ roleCode: 'ZBH', roleName: 'Zonal Business Head', category: 'ZONAL' },
{ roleCode: 'DD Lead', roleName: 'DD Lead', category: 'ZONAL' },
{ roleCode: 'RBM', roleName: 'Regional Business Manager', category: 'REGIONAL' },
{ roleCode: 'DD-ZM', roleName: 'DD Zonal Manager', category: 'ZONAL' },
{ roleCode: 'ASM', roleName: 'Area Sales Manager', category: 'AREA' },
{ roleCode: 'Super Admin', roleName: 'Super Admin', category: 'NATIONAL' },
{ roleCode: 'Finance', roleName: 'Finance', category: 'DEPARTMENT' },
{ roleCode: 'Dealer', roleName: 'Dealer', category: 'EXTERNAL' },
{ roleCode: 'DD Admin', roleName: 'DD Admin', category: 'ADMIN' },
{ roleCode: 'ARCHITECTURE', roleName: 'Architecture Team', category: 'DEPARTMENT' }
];
for (const r of roles) await Role.create(r);
// 2. Structure
const zoneN = await Zone.create({ name: 'North Zone', code: 'ZONE-N' });
const zoneS = await Zone.create({ name: 'South Zone', code: 'ZONE-S' });
const ncr = await Region.create({ name: 'NCR Region', zoneId: zoneN.id });
const kar = await Region.create({ name: 'Karnataka Region', zoneId: zoneS.id });
const delhi = await State.create({ name: 'DELHI', zoneId: zoneN.id });
const karnataka = await State.create({ name: 'KARNATAKA', zoneId: zoneS.id });
const sDelhi = await District.create({ name: 'South Delhi', stateId: delhi.id, regionId: ncr.id, zoneId: zoneN.id, isActive: true });
const blr = await District.create({ name: 'Bangalore Urban', stateId: karnataka.id, regionId: kar.id, zoneId: zoneS.id, isActive: true });
// 3. Users
const users = [
{ email: 'admin@royalenfield.com', fullName: 'Laxman H', roleCode: 'Super Admin', password: hashedPassword, status: 'active' },
{ email: 'ddlead@royalenfield.com', fullName: 'Meera Iyer', roleCode: 'DD Lead', zoneId: zoneN.id, password: hashedPassword, status: 'active' },
{ email: 'dealer@royalenfield.com', fullName: 'Amit Sharma', roleCode: 'Dealer', districtId: sDelhi.id, zoneId: zoneN.id, regionId: ncr.id, password: hashedPassword, status: 'active' },
{ email: 'lince@gmail.com', fullName: 'Lince', roleCode: 'DD Admin', password: hashedPassword, status: 'active' }
];
for (const u of users) {
const user = await User.create(u);
const role = await Role.findOne({ where: { roleCode: u.roleCode } });
if (role) {
await UserRole.create({ userId: user.id, roleId: role.id, isActive: true, isPrimary: true });
}
}
// 4. Questionnaire Seed
await Questionnaire.create({
title: 'Dealer Onboarding Questionnaire v1',
version: '1.0',
description: 'Standard questionnaire for new dealership applications',
isPublished: true,
status: 'published'
});
console.log('--- Hierarchy Sync ---');
await syncLocationManagers(sDelhi.id);
await syncLocationManagers(blr.id);
console.log('--- DATABASE RESET COMPLETE ---');
}
resetAndSeed().catch(err => {
console.error(err);
process.exit(1);
}).then(() => process.exit(0));