agmission/Development/server/scripts/validate_partner_fields.js

131 lines
4.0 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Validation script to ensure partner field naming consistency
* Run this script to verify all models are properly configured
*
* Usage:
* node scripts/validate_partner_fields.js [--env <path>]
*
* Options:
* --env <path> Path to environment file (default: ./environment.env)
*/
'use strict';
const path = require('path');
// Parse command line arguments
const args = process.argv.slice(2);
let envFile = './environment.env';
for (let i = 0; i < args.length; i++) {
if (args[i] === '--env' && args[i + 1]) {
envFile = args[i + 1];
i++;
}
}
// Load environment variables
const envPath = path.resolve(process.cwd(), envFile);
console.log(`Loading environment from: ${envPath}`);
require('dotenv').config({ path: envPath });
const { DBConnection } = require('../helpers/db/connect');
// Initialize database connection
const db = new DBConnection('Partner Field Validation');
async function validatePartnerFields() {
try {
await db.initialize({ setupExitHandlers: false });
const { Partner, PartnerSystemUser } = require('../model/partner');
const Customer = require('../model/customer');
const User = require('../model/user');
const Vehicle = require('../model/vehicle');
console.log('🔍 Validating Partner Field Consistency...\n');
// Validate schema definitions
console.log('📋 Checking Schema Definitions:');
// Check PartnerSystemUser schema
const partnerSystemUserSchema = PartnerSystemUser.schema;
const hasPartnerField = partnerSystemUserSchema.paths.partner;
console.log(' ✅ PartnerSystemUser.partner field:', hasPartnerField ? 'EXISTS' : 'MISSING');
// Check Customer schema
const customerSchema = Customer.schema;
const customerPartnerField = customerSchema.paths.partner;
console.log(' ✅ Customer.partner field:', customerPartnerField ? 'EXISTS' : 'MISSING');
// Check User schema
const userSchema = User.schema;
const userPartnerField = userSchema.paths.partner;
console.log(' ✅ User.partner field:', userPartnerField ? 'EXISTS' : 'MISSING');
// Check Vehicle schema
const vehicleSchema = Vehicle.schema;
const vehiclePartnerField = vehicleSchema.paths.partner;
console.log(' ✅ Vehicle.partner field:', vehiclePartnerField ? 'EXISTS' : 'MISSING');
console.log('\n📊 Field Configuration Summary:');
// Test populate queries work
console.log(' 🔗 Testing populate queries...');
try {
// Test PartnerSystemUser populate
await PartnerSystemUser.findOne({}).populate('partner').lean();
console.log(' ✅ PartnerSystemUser.populate("partner") - SUCCESS');
} catch (err) {
console.log(' ❌ PartnerSystemUser.populate("partner") - FAILED:', err.message);
}
try {
// Test Customer populate
await Customer.findOne({}).populate('partner').lean();
console.log(' ✅ Customer.populate("partner") - SUCCESS');
} catch (err) {
console.log(' ❌ Customer.populate("partner") - FAILED:', err.message);
}
try {
// Test Vehicle populate
await Vehicle.findOne({}).populate('partner').lean();
console.log(' ✅ Vehicle.populate("partner") - SUCCESS');
} catch (err) {
console.log(' ❌ Vehicle.populate("partner") - FAILED:', err.message);
}
console.log('\n🎯 Validation Results:');
const isValid = hasPartnerField && customerPartnerField && userPartnerField && vehiclePartnerField;
if (isValid) {
console.log(' ✅ All field naming is CONSISTENT');
console.log(' ✅ All models use "partner" field');
console.log('\n🎉 Partner field validation PASSED!');
} else {
console.log(' ❌ Inconsistent field naming detected');
console.log(' ❌ Manual review required');
console.log('\n⚠ Partner field validation FAILED!');
}
} catch (error) {
console.error('❌ Validation failed:', error.message);
process.exit(1);
} finally {
await db.close();
process.exit(0);
}
}
// Run validation
validatePartnerFields();