����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
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;
| 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 |
|