#!/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 ] * * Options: * --env 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();