123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- // controllers/dashboard.js
- const db = require('../config/db');
- const { successResponse, errorResponse } = require('../utils/apiResponse');
- class DashboardController {
- static async getStats(req, res) {
- try {
- const [
- [totalJobs],
- [activeJobs],
- [totalCandidates],
- [pendingCandidates],
- [passedCandidates],
- [rejectedCandidates],
- [interviewedCandidates],
- [averageMatchScore],
- [passRate]
- ] = await Promise.all([
- db.query('SELECT COUNT(*) as count FROM jobs'),
- db.query("SELECT COUNT(*) as count FROM jobs WHERE status = 'active'"),
- db.query('SELECT COUNT(*) as count FROM candidates'),
- db.query("SELECT COUNT(*) as count FROM candidates WHERE status = 'pending'"),
- db.query("SELECT COUNT(*) as count FROM candidates WHERE status = 'passed'"),
- db.query("SELECT COUNT(*) as count FROM candidates WHERE status = 'rejected'"),
- db.query("SELECT COUNT(*) as count FROM candidates WHERE status = 'interviewed'"),
- db.query('SELECT AVG(match_score) as avg FROM candidates'),
- db.query(`
- SELECT
- COUNT(CASE WHEN status = 'passed' THEN 1 END) / COUNT(*) * 100 as rate
- FROM candidates
- `)
- ]);
-
- successResponse(res, {
- totalJobs: totalJobs[0].count,
- activeJobs: activeJobs[0].count,
- totalCandidates: totalCandidates[0].count,
- pendingCandidates: pendingCandidates[0].count,
- passedCandidates: passedCandidates[0].count,
- rejectedCandidates: rejectedCandidates[0].count,
- interviewedCandidates: interviewedCandidates[0].count,
- averageMatchScore: Math.round(averageMatchScore[0].avg || 0),
- passRate: Math.round(passRate[0].rate || 0)
- });
- } catch (err) {
- errorResponse(res, err);
- }
- }
- }
- module.exports = DashboardController;
|