Re_Backend/src/scripts/seed-test-dealer.ts

180 lines
6.0 KiB
TypeScript

/**
* Seed Test Dealer
* Creates a test dealer record in the dealers table for testing purposes
*
* This creates a dealer with:
* - domain_id: testreflow@example.com
* - dealer_principal_email_id: testreflow@example.com
* - dealer_principal_name: TEST REFLOW
* - Random codes for sales_code, gear_code, and dlrcode to avoid conflicts
*/
import { sequelize } from '../config/database';
import { Dealer } from '../models/Dealer';
import { Op } from 'sequelize';
import logger from '../utils/logger';
/**
* Generate a random 4-digit code
* Checks for existing codes to avoid conflicts
*/
async function generateUniqueCode(
field: 'salesCode' | 'serviceCode' | 'gearCode' | 'gmaCode' | 'dlrcode',
existingCodes: Set<string>
): Promise<string> {
let attempts = 0;
const maxAttempts = 100;
while (attempts < maxAttempts) {
// Generate random 4-digit number (1000-9999)
const randomCode = String(Math.floor(1000 + Math.random() * 9000));
// Check if code already exists in database
const existing = await Dealer.findOne({
where: {
[field]: randomCode
}
});
// Also check if we've already generated this code in this run
if (!existing && !existingCodes.has(randomCode)) {
existingCodes.add(randomCode);
return randomCode;
}
attempts++;
}
// Fallback: use timestamp-based code if random generation fails
const timestampCode = String(Date.now()).slice(-4);
logger.warn(`[Seed Test Dealer] Using timestamp-based code for ${field}: ${timestampCode}`);
return timestampCode;
}
async function seedTestDealer(): Promise<void> {
try {
logger.info('[Seed Test Dealer] Starting test dealer seeding...');
// Check if test dealer already exists
const existingDealer = await Dealer.findOne({
where: {
[Op.or]: [
{ domainId: 'testreflow@example.com' },
{ dealerPrincipalEmailId: 'testreflow@example.com' }
]
}
});
// Generate unique codes
const existingCodes = new Set<string>();
const salesCode = await generateUniqueCode('salesCode', existingCodes);
const serviceCode = await generateUniqueCode('serviceCode', existingCodes);
const gearCode = await generateUniqueCode('gearCode', existingCodes);
const gmaCode = await generateUniqueCode('gmaCode', existingCodes);
const dlrcode = await generateUniqueCode('dlrcode', existingCodes);
const dealerData = {
salesCode,
serviceCode,
gearCode,
gmaCode,
region: 'TEST',
dealership: 'TEST REFLOW DEALERSHIP',
state: 'Test State',
district: 'Test District',
city: 'Test City',
location: 'Test Location',
cityCategoryPst: 'A',
layoutFormat: 'A',
tierCityCategory: 'Tier 1 City',
onBoardingCharges: null,
date: new Date().toISOString().split('T')[0], // Current date in YYYY-MM-DD format
singleFormatMonthYear: (() => {
const now = new Date();
const month = now.toLocaleDateString('en-US', { month: 'short' });
const year = now.getFullYear();
return `${month}-${year}`; // e.g., "Dec-2025" (format: "MMM-YYYY")
})(),
domainId: 'testreflow@example.com',
replacement: null,
terminationResignationStatus: null,
dateOfTerminationResignation: null,
lastDateOfOperations: null,
oldCodes: null,
branchDetails: null,
dealerPrincipalName: 'TEST REFLOW',
dealerPrincipalEmailId: 'testreflow@example.com',
dpContactNumber: null,
dpContacts: null,
showroomAddress: null,
showroomPincode: null,
workshopAddress: null,
workshopPincode: null,
locationDistrict: null,
stateWorkshop: null,
noOfStudios: 0,
websiteUpdate: 'Yes',
gst: null,
pan: null,
firmType: 'Test Firm',
propManagingPartnersDirectors: 'TEST REFLOW',
totalPropPartnersDirectors: 'TEST REFLOW',
docsFolderLink: null,
workshopGmaCodes: null,
existingNew: 'New',
dlrcode,
isActive: true
};
if (existingDealer) {
logger.info('[Seed Test Dealer] Test dealer already exists, updating...');
// Update existing dealer
await existingDealer.update(dealerData);
logger.info(`[Seed Test Dealer] ✅ Updated test dealer: ${existingDealer.dealerId}`);
logger.info(`[Seed Test Dealer] - Domain ID: ${dealerData.domainId}`);
logger.info(`[Seed Test Dealer] - Dealer Principal: ${dealerData.dealerPrincipalName}`);
logger.info(`[Seed Test Dealer] - Sales Code: ${dealerData.salesCode}`);
logger.info(`[Seed Test Dealer] - Gear Code: ${dealerData.gearCode}`);
logger.info(`[Seed Test Dealer] - Dealer Code (dlrcode): ${dealerData.dlrcode}`);
} else {
// Create new dealer
const newDealer = await Dealer.create(dealerData);
logger.info(`[Seed Test Dealer] ✅ Created test dealer: ${newDealer.dealerId}`);
logger.info(`[Seed Test Dealer] - Domain ID: ${dealerData.domainId}`);
logger.info(`[Seed Test Dealer] - Dealer Principal: ${dealerData.dealerPrincipalName}`);
logger.info(`[Seed Test Dealer] - Sales Code: ${dealerData.salesCode}`);
logger.info(`[Seed Test Dealer] - Gear Code: ${dealerData.gearCode}`);
logger.info(`[Seed Test Dealer] - Dealer Code (dlrcode): ${dealerData.dlrcode}`);
}
logger.info('[Seed Test Dealer] ✅ Test dealer seeding completed successfully');
} catch (error) {
logger.error('[Seed Test Dealer] ❌ Error seeding test dealer:', error);
throw error;
}
}
// Run if called directly
if (require.main === module) {
sequelize
.authenticate()
.then(() => {
logger.info('[Seed Test Dealer] Database connection established');
return seedTestDealer();
})
.then(() => {
logger.info('[Seed Test Dealer] Seeding completed');
process.exit(0);
})
.catch((error) => {
logger.error('[Seed Test Dealer] Seeding failed:', error);
process.exit(1);
});
}
export { seedTestDealer };