import 'dotenv/config'; import db from './src/database/models/index'; const { User, Role } = db; import { Op } from 'sequelize'; async function testFiltering() { console.log('--- Testing Backend Filtering Logic (Direct DB) ---'); const testCasesMap = [ { name: 'National Role (NBH) - Should ignore location', params: { roleCode: 'NBH', zoneId: 'some-random-id' }, expectedRoles: ['NBH'] }, { name: 'National Role (DD Head) - Should ignore location', params: { roleCode: 'DD Head', zoneId: 'some-random-id' }, expectedRoles: ['DD Head'] }, { name: 'Zonal Role (RBM) - Should respect location (Matching)', params: { roleCode: 'RBM', zoneId: 'aedf5f64-3f95-4fa7-ac64-52c97cb330e7' }, // Known RBM zone from check_db_users expectedCount: 1 }, { name: 'Zonal Role (RBM) - Should respect location (Mismatch)', params: { roleCode: 'RBM', zoneId: '741e0e70-32d3-40d6-987f-5d2ffd54f152' }, // ZBH zone expectedCount: 0 } ]; for (const testCase of testCasesMap) { console.log(`\nTesting: ${testCase.name}`); const { roleCode, zoneId, regionId, areaId } = testCase.params; const whereClause: any = {}; // Replicating logic from admin.controller.ts if (roleCode) { if (Array.isArray(roleCode)) { whereClause.roleCode = { [Op.in]: roleCode }; } else { whereClause.roleCode = roleCode; } } const nationalRoles = ['NBH', 'DD Head']; const isNationalRole = (typeof roleCode === 'string' && nationalRoles.includes(roleCode)) || (Array.isArray(roleCode) && roleCode.some(r => typeof r === 'string' && nationalRoles.includes(r))); if (!isNationalRole) { if (zoneId) whereClause.zoneId = zoneId; if (regionId) whereClause.regionId = regionId; if (areaId) whereClause.areaId = areaId; } const users = await User.findAll({ where: whereClause, attributes: ['id', 'roleCode', 'zoneId'] }); console.log(`Result: ${users.length} users found.`); if (users.length > 0) { console.log('Found Roles:', Array.from(new Set(users.map(u => u.roleCode)))); } } process.exit(0); } testFiltering().catch(err => { console.error(err); process.exit(1); });