chitfund/backend/test-available-users.js

85 lines
2.7 KiB
JavaScript

const { Sequelize } = require('sequelize');
require('dotenv').config();
const sequelize = new Sequelize(process.env.DATABASE_URL, {
logging: false,
});
async function testAvailableUsers() {
try {
await sequelize.authenticate();
console.log('Database connected successfully');
// Find the "Om Sri Sai Chit" group
const [groups] = await sequelize.query(`
SELECT id, name FROM chit_groups WHERE name = 'Om Sri Sai Chit'
`);
if (groups.length === 0) {
console.log('No "Om Sri Sai Chit" group found');
return;
}
const groupId = groups[0].id;
console.log(`Found group: ${groups[0].name} (ID: ${groupId})`);
// Get existing members of this group
const [members] = await sequelize.query(`
SELECT gm.user_id, u.full_name, u.mobile_number
FROM group_members gm
JOIN users u ON gm.user_id = u.id
WHERE gm.group_id = $1 AND gm.status = 'active'
`, [groupId]);
console.log(`\nExisting members (${members.length}):`);
members.forEach((member, index) => {
console.log(`${index + 1}. ${member.full_name} (${member.mobile_number}) - ID: ${member.user_id}`);
});
// Get all active member users
const [allUsers] = await sequelize.query(`
SELECT id, full_name, mobile_number
FROM users
WHERE role = 'member' AND is_active = true
ORDER BY full_name
`);
console.log(`\nAll active member users (${allUsers.length}):`);
allUsers.forEach((user, index) => {
const isMember = members.some(m => m.user_id === user.id);
console.log(`${index + 1}. ${user.full_name} (${user.mobile_number}) - ID: ${user.id} ${isMember ? '[ALREADY MEMBER]' : '[AVAILABLE]'}`);
});
// Test the exact query from the API
console.log(`\n=== Testing API Query ===`);
const [availableUsers] = await sequelize.query(`
SELECT id, full_name, mobile_number, email, address, emergency_contact, created_at
FROM users
WHERE is_active = true
AND role = 'member'
AND id NOT IN (
SELECT user_id FROM group_members
WHERE group_id = $1 AND status = 'active'
)
ORDER BY full_name
`, [groupId]);
console.log(`Available users for group (${availableUsers.length}):`);
availableUsers.forEach((user, index) => {
console.log(`${index + 1}. ${user.full_name} (${user.mobile_number}) - ID: ${user.id}`);
});
console.log(`\nSummary:`);
console.log(`- Total users: ${allUsers.length}`);
console.log(`- Existing members: ${members.length}`);
console.log(`- Available to add: ${availableUsers.length}`);
} catch (error) {
console.error('Error:', error);
} finally {
await sequelize.close();
}
}
testAvailableUsers();