feat: added referred user endpoint
This commit is contained in:
parent
dac3f21921
commit
95ba693118
@ -136,6 +136,27 @@ class ReferralTokenController {
|
||||
res.status(500).json({ success: false, message: error.message });
|
||||
}
|
||||
}
|
||||
|
||||
static async referredUsers(req, res) {
|
||||
const userId = req.user.userId;
|
||||
logger.info('ReferralTokenController:referredUsers:start', { userId });
|
||||
const unitOfWork = new UnitOfWork();
|
||||
await unitOfWork.start();
|
||||
try {
|
||||
const result = await ReferralService.getReferredUsers(userId, unitOfWork);
|
||||
await unitOfWork.commit();
|
||||
logger.info('ReferralTokenController:referredUsers:success', { userId, total: result.total_referred_users });
|
||||
return res.json({
|
||||
success: true,
|
||||
total_referred_users: result.total_referred_users,
|
||||
users: result.users
|
||||
});
|
||||
} catch (error) {
|
||||
await unitOfWork.rollback(error);
|
||||
logger.error('ReferralTokenController:referredUsers:error', { userId, error });
|
||||
return res.status(500).json({ success: false, message: error.message });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ReferralTokenController;
|
||||
|
||||
@ -284,6 +284,46 @@ class ReferralTokenRepository {
|
||||
}
|
||||
}
|
||||
|
||||
async getReferredUsersByCreator(createdByUserId) {
|
||||
logger.info('ReferralTokenRepository.getReferredUsersByCreator:start', { createdByUserId });
|
||||
try {
|
||||
const conn = this.unitOfWork.connection;
|
||||
const sql = `
|
||||
SELECT
|
||||
u.id,
|
||||
u.email,
|
||||
u.user_type,
|
||||
u.created_at AS registered_at,
|
||||
us.status,
|
||||
COALESCE(
|
||||
NULLIF(TRIM(CONCAT(pp.first_name, ' ', pp.last_name)), ''),
|
||||
cp.company_name,
|
||||
cp.contact_person_name,
|
||||
u.email
|
||||
) AS name
|
||||
FROM users u
|
||||
LEFT JOIN user_status us ON us.user_id = u.id
|
||||
LEFT JOIN personal_profiles pp ON pp.user_id = u.id
|
||||
LEFT JOIN company_profiles cp ON cp.user_id = u.id
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM referral_token_usage rtu
|
||||
JOIN referral_tokens rt ON rtu.referral_token_id = rt.id
|
||||
WHERE rt.created_by_user_id = ?
|
||||
AND rtu.used_by_user_id = u.id
|
||||
)
|
||||
ORDER BY u.created_at DESC
|
||||
`;
|
||||
logger.debug('ReferralTokenRepository.getReferredUsersByCreator:sql', { sql, params: [createdByUserId] });
|
||||
const [rows] = await conn.query(sql, [createdByUserId]);
|
||||
logger.info('ReferralTokenRepository.getReferredUsersByCreator:success', { createdByUserId, count: rows.length });
|
||||
return rows;
|
||||
} catch (error) {
|
||||
logger.error('ReferralTokenRepository.getReferredUsersByCreator:error', { createdByUserId, error: error.message });
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// ...add more methods as needed (e.g., update, usage)...
|
||||
}
|
||||
|
||||
|
||||
@ -67,6 +67,7 @@ router.get('/permissions', authMiddleware, PermissionController.list);
|
||||
router.get('/referral/list', authMiddleware, ReferralTokenController.list);
|
||||
router.get('/referral/stats', authMiddleware, ReferralTokenController.stats);
|
||||
router.get('/referral/info/:token', ReferralRegistrationController.getReferrerInfo);
|
||||
router.get('/referral/referred-users', authMiddleware, ReferralTokenController.referredUsers);
|
||||
|
||||
// userSettings.js GETs
|
||||
router.get('/settings', authMiddleware, UserSettingsController.getSettings);
|
||||
|
||||
@ -570,6 +570,35 @@ class ReferralService {
|
||||
`;
|
||||
await conn.query(query, [tokenId]);
|
||||
}
|
||||
|
||||
static async getReferredUsers(userId, unitOfWork) {
|
||||
logger.info('ReferralService:getReferredUsers:start', { userId });
|
||||
const repo = new ReferralTokenRepository(unitOfWork);
|
||||
const rows = await repo.getReferredUsersByCreator(userId);
|
||||
|
||||
const users = rows.map(r => {
|
||||
let registeredAt = null;
|
||||
if (r.registered_at) {
|
||||
const d = new Date(r.registered_at);
|
||||
registeredAt = isNaN(d.getTime()) ? null : d.toISOString();
|
||||
}
|
||||
return {
|
||||
id: r.id,
|
||||
name: r.name || r.email,
|
||||
email: r.email,
|
||||
type: r.user_type,
|
||||
registeredAt,
|
||||
status: r.status || null
|
||||
};
|
||||
});
|
||||
|
||||
const result = {
|
||||
total_referred_users: users.length,
|
||||
users
|
||||
};
|
||||
logger.info('ReferralService:getReferredUsers:success', { userId, total: result.total_referred_users });
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = ReferralService;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user