From 2260a7e63497fdce3655cee073f3f1cf1a91adf8 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:08:06 +0800 Subject: [PATCH 01/26] refactor: migrate DepartmentController to ES module syntax and improve query handling in getAllDepartments. --- src/api/Controllers/DepartmentController.js | 70 ++++++++++----------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index 824ebb2..53dc128 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -1,58 +1,52 @@ -const DepartmentService = require('../Services/DepartmentServices'); -const path = require('path'); -const base = path.resolve(__dirname, '../../../'); -const sequelize = require(path.join(base, 'src', 'config', 'db.js')); -const { DataTypes } = require('sequelize'); -const { UpdateProgram } = require('./ProgramCourseController'); -const { error } = require('console'); -const DepartmentModel = require('../Models/department')(sequelize, DataTypes) +import DepartmentService from '../Services/DepartmentServices.js'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { DataTypes } from 'sequelize'; +import { UpdateProgram } from './ProgramCourseController.js'; +import sequelize from '../../../src/config/db.js'; +import defineDepartmentModel from '../Models/department.js'; -exports.getAllDeparments = async(req, res)=>{ - try{ +// Fix __dirname in ES modules +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); - let {top, page, limit} = req.body +// Initialize model +const DepartmentModel = defineDepartmentModel(sequelize, DataTypes); + +// ✅ Get All Departments +export const getAllDepartments = async (req, res) => { + try { + let { top, page, limit } = req.body; // Convert string query params to numbers top = parseInt(top); page = parseInt(page); limit = parseInt(limit); - let queryOptions = { - order: [['createdAt', 'DESC']] // latest first + const queryOptions = { + order: [['createdAt', 'DESC']], // latest first }; if (top) { // Return only top X records queryOptions.limit = top; - } - else if (page && limit) { - // Apply pagination - const offset = (page - 1) * limit; + } else if (page && limit) { queryOptions.limit = limit; - queryOptions.offset = offset; + queryOptions.offset = (page - 1) * limit; } - DepartmentModel.findAll(queryOptions) - .then((departments) => { - res.status(200).json({ - status: 'success', - data: departments.toJson() - }); - }) - .catch((error) => { - res.status(500).json({ - status: 'error', - message: error.message - }); - }); - - }catch(error){ - res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' }); - } -} + const departments = await DepartmentModel.findAll(queryOptions); - -exports.getDepartmentByID = async (req, res) => { + res.status(200).json({ + status: 'success', + data: departments, // No need for toJson() + }); + } catch (error) { + res + .status(error.status || 500) + .json({ error: error.message || 'Internal Server Error' }); + } +}; try { const { id } = req.params; const department = await DepartmentService.getDepartmentByID(id); From c3f00c8ad3b54b2a1e17768fa786aaff452e6367 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:09:48 +0800 Subject: [PATCH 02/26] refactor: update createDepartment function to use ES module syntax and fix variable naming --- src/api/Controllers/DepartmentController.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index 53dc128..a842357 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -62,10 +62,11 @@ export const getAllDepartments = async (req, res) => { } }; -exports.createDeparment = async (req, res) => { +// ✅ Create Department +export const createDepartment = async (req, res) => { try { - const addDeparment = await DepartmentService.CreateDeparment(req.body); - if(addDeparment){ + const addDepartment = await DepartmentService.CreateDeparment(req.body); + if (addDepartment) { res.status(201).json({ message: addDeparment.message, data: addDeparment.data From 2dec64878bff65e65da46978aa55766b1ae7c98d Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:10:54 +0800 Subject: [PATCH 03/26] refactor: update updateDepartment function to use ES module syntax --- src/api/Controllers/DepartmentController.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index a842357..58473fd 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -77,7 +77,8 @@ export const createDepartment = async (req, res) => { } }; -exports.UpdateDepartment = async (req, res) => { +// ✅ Update Department +export const updateDepartment = async (req, res) => { try { const update = await DepartmentService.UpdateDepartment(req, res); res.status(201).json({ message: update.message }); From 55bdc5f2c9343bb78b3279089e80e2d29959b1cf Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:12:52 +0800 Subject: [PATCH 04/26] refactor: add getDepartmentByID and deleteDepartment functions with proper export syntax --- src/api/Controllers/DepartmentController.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index 58473fd..4076923 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -47,6 +47,8 @@ export const getAllDepartments = async (req, res) => { .json({ error: error.message || 'Internal Server Error' }); } }; +// ✅ Get Department by ID +export const getDepartmentByID = async (req, res) => { try { const { id } = req.params; const department = await DepartmentService.getDepartmentByID(id); @@ -87,11 +89,11 @@ export const updateDepartment = async (req, res) => { } }; -exports.DeleteDepartment = async(req, res)=>{ - try{ - const deleteDepartment = await DepartmentService.DeleteDepartment(req,res) - }catch(error){ +// ✅ Delete Department +export const deleteDepartment = async (req, res) => { + try { + await DepartmentService.DeleteDepartment(req, res); + } catch (error) { res.status(500).json({ message: error.message }); } -} - +}; From 0b51fb77270b45006f8a2afa12c326a48b130e81 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:18:24 +0800 Subject: [PATCH 05/26] refactor: migrate InstructorController to ES module syntax and improve import statements --- src/api/Controllers/InstructorController.js | 28 +++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/api/Controllers/InstructorController.js b/src/api/Controllers/InstructorController.js index b4b7d1e..2cef9b2 100644 --- a/src/api/Controllers/InstructorController.js +++ b/src/api/Controllers/InstructorController.js @@ -1,14 +1,22 @@ -const InstructorService = require('../Services/InstructorServices'); -const path = require('path'); -const base = path.resolve(__dirname, '../../../'); -const sequelize = require(path.join(base, 'src', 'config', 'db.js')); -const { DataTypes } = require('sequelize'); -const { error } = require('console'); -const User = require("../Models/User")(sequelize, DataTypes) -const InstructorModel = require('../Models/instructor')(sequelize, DataTypes) -const { verifyWebToken } = require("../../Middlewares/authMiddleware"); +import InstructorService from "../Services/InstructorServices.js"; +import path from "path"; +import { fileURLToPath } from "url"; +import { DataTypes } from "sequelize"; +import sequelize from "../../config/db.js"; +import UserModelDefiner from "../Models/user.js"; +import InstructorModelDefiner from "../Models/instructor.js"; +import { verifyWebToken } from "../../Middlewares/authMiddleware.js"; -exports.CreateInstructor = async (req, res) => { +// Resolve __dirname (ESM compatible) +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const base = path.resolve(__dirname, "../../../"); + +const User = UserModelDefiner(sequelize, DataTypes); +const Instructor = InstructorModelDefiner(sequelize, DataTypes); + +// ✅ Create Instructor +export const CreateInstructor = async (req, res) => { try { const {id, ...data} = req.body From 290bd61c73414e352b21c677226564ce30cf72bc Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:20:24 +0800 Subject: [PATCH 06/26] refactor: update UpdateInstructor and DeleteInstructor functions to use ES module syntax. error message handled properly --- src/api/Controllers/InstructorController.js | 42 ++++++++------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/api/Controllers/InstructorController.js b/src/api/Controllers/InstructorController.js index 2cef9b2..70bf6c9 100644 --- a/src/api/Controllers/InstructorController.js +++ b/src/api/Controllers/InstructorController.js @@ -43,29 +43,19 @@ export const CreateInstructor = async (req, res) => { }); } }; -exports.UpdateInstructor = async(req, res)=>{ - try{ - const update = await InstructorService.UpdateInstructor(req.param.id, req.body); - - return res.status(201).JSON({ - success: true, - message: update.message - }) - }catch(error ){ - throw error; - } -} -exports.DeleteInstructor = async (req, res) => { - try { - const DeleteInstructor = await InstructorService.DeleteInstructor(req.params.id); - return res.status(200).json({ - success:true, - message: "Instructor deleted successfully" - }); - } catch (error) { - return res.status(500).json({ - message: "Error deleting instructor", - error: error.message - }); - } -}; +// ✅ Update Instructor +export const UpdateInstructor = async (req, res) => { + try { + const update = await InstructorService.UpdateInstructor(req.params.id, req.body); + + return res.status(201).json({ + success: true, + message: update.message, + }); + } catch (error) { + return res.status(500).json({ + message: "Error updating instructor", + error: error.message, + }); + } +}; From f68e5f5a33f589bd5ecb7e330d797819c828ce4b Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:20:40 +0800 Subject: [PATCH 07/26] refactor: clean up CreateInstructor and UpdateInstructor functions for better readability --- src/api/Controllers/InstructorController.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/api/Controllers/InstructorController.js b/src/api/Controllers/InstructorController.js index 70bf6c9..acd12c1 100644 --- a/src/api/Controllers/InstructorController.js +++ b/src/api/Controllers/InstructorController.js @@ -18,9 +18,7 @@ const Instructor = InstructorModelDefiner(sequelize, DataTypes); // ✅ Create Instructor export const CreateInstructor = async (req, res) => { try { - const {id, ...data} = req.body - const findInstructor = await Instructor.findOne({ where: { user_id: id } }); if (findInstructor) { @@ -59,3 +57,19 @@ export const UpdateInstructor = async (req, res) => { }); } }; +// ✅ Delete Instructor +export const DeleteInstructor = async (req, res) => { + try { + await InstructorService.DeleteInstructor(req.params.id); + + return res.status(200).json({ + success: true, + message: "Instructor deleted successfully", + }); + } catch (error) { + return res.status(500).json({ + message: "Error deleting instructor", + error: error.message, + }); + } +}; From 5da1844dd19961202948c52b45ec15ef37f0a8ba Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:24:29 +0800 Subject: [PATCH 08/26] refactor: migrate ProgramCourseController to ES module syntax and improve imports --- src/api/Controllers/ProgramCourseController.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/api/Controllers/ProgramCourseController.js b/src/api/Controllers/ProgramCourseController.js index 98bd42a..5916435 100644 --- a/src/api/Controllers/ProgramCourseController.js +++ b/src/api/Controllers/ProgramCourseController.js @@ -1,11 +1,15 @@ -const ProgramService = require("../Services/ProgramCourseServices") -const path = require('path'); -const base = path.resolve(__dirname, '../../../'); -const sequelize = require(path.join(base, 'src', 'config', 'db.js')); -const { DataTypes } = require('sequelize'); -const ProgramCourse = require('../Models/programcourse')(sequelize, DataTypes) +import ProgramService from "../Services/ProgramCourseServices.js"; +import path from "path"; +import { fileURLToPath } from "url"; +import { DataTypes } from "sequelize"; +import sequelize from "../../../src/config/db.js"; +import defineProgramCourse from "../Models/programcourse.js"; -exports.createProgram = async (req, res) => { +const ProgramCourse = defineProgramCourse(sequelize, DataTypes); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// ✅ Create Program +export const createProgram = async (req, res) => { try { const addProgram = await ProgramService.createProgram(req.body); if(addProgram){ From 2f7f8f3a9777d63b641d434e981ed1897910af57 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:30:39 +0800 Subject: [PATCH 09/26] refactor: migrate getAllPrograms and UpdateProgram to ES module syntax --- .../Controllers/ProgramCourseController.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/api/Controllers/ProgramCourseController.js b/src/api/Controllers/ProgramCourseController.js index 5916435..63b3107 100644 --- a/src/api/Controllers/ProgramCourseController.js +++ b/src/api/Controllers/ProgramCourseController.js @@ -23,7 +23,8 @@ export const createProgram = async (req, res) => { } }; -exports.getAllPrograms = async (req, res) => { +// ✅ Get All Programs +export const getAllPrograms = async (req, res) => { try { let { top, page, limit } = req.body; @@ -32,8 +33,8 @@ exports.getAllPrograms = async (req, res) => { page = parseInt(page); limit = parseInt(limit); - let queryOptions = { - order: [['createdAt', 'DESC']] // latest first + const queryOptions = { + order: [["createdAt", "DESC"]], }; if (top) { @@ -50,18 +51,20 @@ exports.getAllPrograms = async (req, res) => { const programs = await ProgramCourse.findAll(queryOptions); res.status(200).json({ - status: 'success', - data: programs + status: "success", + data: programs, }); } catch (error) { - res.status(500).json({ - status: 'error', - message: error.message + res.status(500).json({ + status: "error", + message: error.message, }); } }; -exports.UpdateProgram = async (req, res) => { + +// ✅ Update Program +export const UpdateProgram = async (req, res) => { try { const result = await ProgramService.UpdateProgram(req.body); From 53ea0fa6c0a4bc530217c51f61ac1682e9920963 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:31:07 +0800 Subject: [PATCH 10/26] refactor: migrate DeleteProgram to ES module syntax --- src/api/Controllers/ProgramCourseController.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/api/Controllers/ProgramCourseController.js b/src/api/Controllers/ProgramCourseController.js index 63b3107..6e458c1 100644 --- a/src/api/Controllers/ProgramCourseController.js +++ b/src/api/Controllers/ProgramCourseController.js @@ -89,6 +89,8 @@ export const UpdateProgram = async (req, res) => { }); } }; -exports.DeleteProgram = async(id)=>{ - return await ProgramService.DeleteProgram(id) -} \ No newline at end of file + +// ✅ Delete Program +export const DeleteProgram = async (id) => { + return await ProgramService.DeleteProgram(id); +}; From 6bd78403ac74c56ec1b5d8ee4749c7463efae6f1 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:38:19 +0800 Subject: [PATCH 11/26] refactor: migrate userController to ES module syntax and improve function exports --- src/api/Controllers/userController.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/api/Controllers/userController.js b/src/api/Controllers/userController.js index 74fecb8..b9f339a 100644 --- a/src/api/Controllers/userController.js +++ b/src/api/Controllers/userController.js @@ -1,6 +1,7 @@ -const userService = require('../Services/UserService'); +import userService from "../Services/UserService.js"; -exports.registerUser = async (req, res) => { +// ✅ Register User +export const registerUser = async (req, res) => { try { const newUser = await userService.registerUser(req.body); if(newUser){ @@ -14,12 +15,12 @@ exports.registerUser = async (req, res) => { } }; -exports.LoginUser = async(req,res)=>{ - try{ - - const isLogin = await userService.LoginUser(req.body) +// ✅ Login User +export const LoginUser = async (req, res) => { + try { + const isLogin = await userService.LoginUser(req.body); - res.cookie('token', isLogin.token, { + res.cookie("token", isLogin.token, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'strict', @@ -34,4 +35,4 @@ exports.LoginUser = async(req,res)=>{ }catch(error){ res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' }); } -} +}; From 6c7c9608f71361b3963e1b6651610afb3ba1c6b1 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:40:20 +0800 Subject: [PATCH 12/26] refactor: streamline LoginUser function by reorganizing cookie setting logic --- src/api/Controllers/userController.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/api/Controllers/userController.js b/src/api/Controllers/userController.js index b9f339a..54774b2 100644 --- a/src/api/Controllers/userController.js +++ b/src/api/Controllers/userController.js @@ -20,18 +20,19 @@ export const LoginUser = async (req, res) => { try { const isLogin = await userService.LoginUser(req.body); - res.cookie("token", isLogin.token, { - httpOnly: true, - secure: process.env.NODE_ENV === 'production', - sameSite: 'strict', - maxAge: 60 * 60 * 1000 - }); - if(isLogin) { - return res.status(200).json({ - message: 'Login successful', + if(isLogin) { + res.cookie("token", isLogin.token, { + httpOnly: true, + secure: process.env.NODE_ENV === 'production', + sameSite: 'strict', + maxAge: 60 * 60 * 1000 }); - } + + return res.status(200).json({ + message: 'Login successful', + }); + } }catch(error){ res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' }); } From 4eac57b68ab9e050abd9fce785fef04cf83a0d54 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 08:53:37 +0800 Subject: [PATCH 13/26] fix(ci): replace npm ci with npm install to remove lockfile dependency --- .github/.workflows/enforce-supertest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/.workflows/enforce-supertest.yml b/.github/.workflows/enforce-supertest.yml index b250741..8d6592d 100644 --- a/.github/.workflows/enforce-supertest.yml +++ b/.github/.workflows/enforce-supertest.yml @@ -25,7 +25,7 @@ jobs: node-version: '22' - name: Install dependencies - run: npm ci + run: npm Install - name: Run tests run: npm run test From a4b518d86a6859959034be342e97da6bcf1b2262 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 08:53:37 +0800 Subject: [PATCH 14/26] fix(ci): replace npm ci with npm install to remove lockfile dependency --- .github/workflows/enforce-supertest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/enforce-supertest.yml b/.github/workflows/enforce-supertest.yml index b250741..8d6592d 100644 --- a/.github/workflows/enforce-supertest.yml +++ b/.github/workflows/enforce-supertest.yml @@ -25,7 +25,7 @@ jobs: node-version: '22' - name: Install dependencies - run: npm ci + run: npm Install - name: Run tests run: npm run test From 525cc4fe4b685d9ac8f03b6458c5e9bd6fbd1a7b Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:08:06 +0800 Subject: [PATCH 15/26] refactor: migrate DepartmentController to ES module syntax and improve query handling in getAllDepartments. --- src/api/Controllers/DepartmentController.js | 70 ++++++++++----------- 1 file changed, 32 insertions(+), 38 deletions(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index 824ebb2..53dc128 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -1,58 +1,52 @@ -const DepartmentService = require('../Services/DepartmentServices'); -const path = require('path'); -const base = path.resolve(__dirname, '../../../'); -const sequelize = require(path.join(base, 'src', 'config', 'db.js')); -const { DataTypes } = require('sequelize'); -const { UpdateProgram } = require('./ProgramCourseController'); -const { error } = require('console'); -const DepartmentModel = require('../Models/department')(sequelize, DataTypes) +import DepartmentService from '../Services/DepartmentServices.js'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { DataTypes } from 'sequelize'; +import { UpdateProgram } from './ProgramCourseController.js'; +import sequelize from '../../../src/config/db.js'; +import defineDepartmentModel from '../Models/department.js'; -exports.getAllDeparments = async(req, res)=>{ - try{ +// Fix __dirname in ES modules +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); - let {top, page, limit} = req.body +// Initialize model +const DepartmentModel = defineDepartmentModel(sequelize, DataTypes); + +// ✅ Get All Departments +export const getAllDepartments = async (req, res) => { + try { + let { top, page, limit } = req.body; // Convert string query params to numbers top = parseInt(top); page = parseInt(page); limit = parseInt(limit); - let queryOptions = { - order: [['createdAt', 'DESC']] // latest first + const queryOptions = { + order: [['createdAt', 'DESC']], // latest first }; if (top) { // Return only top X records queryOptions.limit = top; - } - else if (page && limit) { - // Apply pagination - const offset = (page - 1) * limit; + } else if (page && limit) { queryOptions.limit = limit; - queryOptions.offset = offset; + queryOptions.offset = (page - 1) * limit; } - DepartmentModel.findAll(queryOptions) - .then((departments) => { - res.status(200).json({ - status: 'success', - data: departments.toJson() - }); - }) - .catch((error) => { - res.status(500).json({ - status: 'error', - message: error.message - }); - }); - - }catch(error){ - res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' }); - } -} + const departments = await DepartmentModel.findAll(queryOptions); - -exports.getDepartmentByID = async (req, res) => { + res.status(200).json({ + status: 'success', + data: departments, // No need for toJson() + }); + } catch (error) { + res + .status(error.status || 500) + .json({ error: error.message || 'Internal Server Error' }); + } +}; try { const { id } = req.params; const department = await DepartmentService.getDepartmentByID(id); From 470f20db3b9ad5ead243538dac10961e0a845651 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:09:48 +0800 Subject: [PATCH 16/26] refactor: update createDepartment function to use ES module syntax and fix variable naming --- src/api/Controllers/DepartmentController.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index 53dc128..a842357 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -62,10 +62,11 @@ export const getAllDepartments = async (req, res) => { } }; -exports.createDeparment = async (req, res) => { +// ✅ Create Department +export const createDepartment = async (req, res) => { try { - const addDeparment = await DepartmentService.CreateDeparment(req.body); - if(addDeparment){ + const addDepartment = await DepartmentService.CreateDeparment(req.body); + if (addDepartment) { res.status(201).json({ message: addDeparment.message, data: addDeparment.data From 743f7970ab3a59989a88d678cb7104b37bb017be Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:10:54 +0800 Subject: [PATCH 17/26] refactor: update updateDepartment function to use ES module syntax --- src/api/Controllers/DepartmentController.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index a842357..58473fd 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -77,7 +77,8 @@ export const createDepartment = async (req, res) => { } }; -exports.UpdateDepartment = async (req, res) => { +// ✅ Update Department +export const updateDepartment = async (req, res) => { try { const update = await DepartmentService.UpdateDepartment(req, res); res.status(201).json({ message: update.message }); From b041b485ef0a2653b0d1664aa07540ba37e81868 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:12:52 +0800 Subject: [PATCH 18/26] refactor: add getDepartmentByID and deleteDepartment functions with proper export syntax --- src/api/Controllers/DepartmentController.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/api/Controllers/DepartmentController.js b/src/api/Controllers/DepartmentController.js index 58473fd..4076923 100644 --- a/src/api/Controllers/DepartmentController.js +++ b/src/api/Controllers/DepartmentController.js @@ -47,6 +47,8 @@ export const getAllDepartments = async (req, res) => { .json({ error: error.message || 'Internal Server Error' }); } }; +// ✅ Get Department by ID +export const getDepartmentByID = async (req, res) => { try { const { id } = req.params; const department = await DepartmentService.getDepartmentByID(id); @@ -87,11 +89,11 @@ export const updateDepartment = async (req, res) => { } }; -exports.DeleteDepartment = async(req, res)=>{ - try{ - const deleteDepartment = await DepartmentService.DeleteDepartment(req,res) - }catch(error){ +// ✅ Delete Department +export const deleteDepartment = async (req, res) => { + try { + await DepartmentService.DeleteDepartment(req, res); + } catch (error) { res.status(500).json({ message: error.message }); } -} - +}; From f0ba9ca2a68c5bb21f674fbe6bec97f39028a78a Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:18:24 +0800 Subject: [PATCH 19/26] refactor: migrate InstructorController to ES module syntax and improve import statements --- src/api/Controllers/InstructorController.js | 28 +++++++++++++-------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/api/Controllers/InstructorController.js b/src/api/Controllers/InstructorController.js index b4b7d1e..2cef9b2 100644 --- a/src/api/Controllers/InstructorController.js +++ b/src/api/Controllers/InstructorController.js @@ -1,14 +1,22 @@ -const InstructorService = require('../Services/InstructorServices'); -const path = require('path'); -const base = path.resolve(__dirname, '../../../'); -const sequelize = require(path.join(base, 'src', 'config', 'db.js')); -const { DataTypes } = require('sequelize'); -const { error } = require('console'); -const User = require("../Models/User")(sequelize, DataTypes) -const InstructorModel = require('../Models/instructor')(sequelize, DataTypes) -const { verifyWebToken } = require("../../Middlewares/authMiddleware"); +import InstructorService from "../Services/InstructorServices.js"; +import path from "path"; +import { fileURLToPath } from "url"; +import { DataTypes } from "sequelize"; +import sequelize from "../../config/db.js"; +import UserModelDefiner from "../Models/user.js"; +import InstructorModelDefiner from "../Models/instructor.js"; +import { verifyWebToken } from "../../Middlewares/authMiddleware.js"; -exports.CreateInstructor = async (req, res) => { +// Resolve __dirname (ESM compatible) +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const base = path.resolve(__dirname, "../../../"); + +const User = UserModelDefiner(sequelize, DataTypes); +const Instructor = InstructorModelDefiner(sequelize, DataTypes); + +// ✅ Create Instructor +export const CreateInstructor = async (req, res) => { try { const {id, ...data} = req.body From b4611171a258f8ce0f7f677fe3dc6f1bc9171fb2 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:20:24 +0800 Subject: [PATCH 20/26] refactor: update UpdateInstructor and DeleteInstructor functions to use ES module syntax. error message handled properly --- src/api/Controllers/InstructorController.js | 42 ++++++++------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/api/Controllers/InstructorController.js b/src/api/Controllers/InstructorController.js index 2cef9b2..70bf6c9 100644 --- a/src/api/Controllers/InstructorController.js +++ b/src/api/Controllers/InstructorController.js @@ -43,29 +43,19 @@ export const CreateInstructor = async (req, res) => { }); } }; -exports.UpdateInstructor = async(req, res)=>{ - try{ - const update = await InstructorService.UpdateInstructor(req.param.id, req.body); - - return res.status(201).JSON({ - success: true, - message: update.message - }) - }catch(error ){ - throw error; - } -} -exports.DeleteInstructor = async (req, res) => { - try { - const DeleteInstructor = await InstructorService.DeleteInstructor(req.params.id); - return res.status(200).json({ - success:true, - message: "Instructor deleted successfully" - }); - } catch (error) { - return res.status(500).json({ - message: "Error deleting instructor", - error: error.message - }); - } -}; +// ✅ Update Instructor +export const UpdateInstructor = async (req, res) => { + try { + const update = await InstructorService.UpdateInstructor(req.params.id, req.body); + + return res.status(201).json({ + success: true, + message: update.message, + }); + } catch (error) { + return res.status(500).json({ + message: "Error updating instructor", + error: error.message, + }); + } +}; From 6e11e38e08e739eb3c7850fd71ce869dfeeabc7e Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:20:40 +0800 Subject: [PATCH 21/26] refactor: clean up CreateInstructor and UpdateInstructor functions for better readability --- src/api/Controllers/InstructorController.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/api/Controllers/InstructorController.js b/src/api/Controllers/InstructorController.js index 70bf6c9..acd12c1 100644 --- a/src/api/Controllers/InstructorController.js +++ b/src/api/Controllers/InstructorController.js @@ -18,9 +18,7 @@ const Instructor = InstructorModelDefiner(sequelize, DataTypes); // ✅ Create Instructor export const CreateInstructor = async (req, res) => { try { - const {id, ...data} = req.body - const findInstructor = await Instructor.findOne({ where: { user_id: id } }); if (findInstructor) { @@ -59,3 +57,19 @@ export const UpdateInstructor = async (req, res) => { }); } }; +// ✅ Delete Instructor +export const DeleteInstructor = async (req, res) => { + try { + await InstructorService.DeleteInstructor(req.params.id); + + return res.status(200).json({ + success: true, + message: "Instructor deleted successfully", + }); + } catch (error) { + return res.status(500).json({ + message: "Error deleting instructor", + error: error.message, + }); + } +}; From 95afc33a44520e46721b94b67c1a0516408a6ef3 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:24:29 +0800 Subject: [PATCH 22/26] refactor: migrate ProgramCourseController to ES module syntax and improve imports --- src/api/Controllers/ProgramCourseController.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/api/Controllers/ProgramCourseController.js b/src/api/Controllers/ProgramCourseController.js index 98bd42a..5916435 100644 --- a/src/api/Controllers/ProgramCourseController.js +++ b/src/api/Controllers/ProgramCourseController.js @@ -1,11 +1,15 @@ -const ProgramService = require("../Services/ProgramCourseServices") -const path = require('path'); -const base = path.resolve(__dirname, '../../../'); -const sequelize = require(path.join(base, 'src', 'config', 'db.js')); -const { DataTypes } = require('sequelize'); -const ProgramCourse = require('../Models/programcourse')(sequelize, DataTypes) +import ProgramService from "../Services/ProgramCourseServices.js"; +import path from "path"; +import { fileURLToPath } from "url"; +import { DataTypes } from "sequelize"; +import sequelize from "../../../src/config/db.js"; +import defineProgramCourse from "../Models/programcourse.js"; -exports.createProgram = async (req, res) => { +const ProgramCourse = defineProgramCourse(sequelize, DataTypes); +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +// ✅ Create Program +export const createProgram = async (req, res) => { try { const addProgram = await ProgramService.createProgram(req.body); if(addProgram){ From 4422ec10153af9a857025b830aafd1158ab81043 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:30:39 +0800 Subject: [PATCH 23/26] refactor: migrate getAllPrograms and UpdateProgram to ES module syntax --- .../Controllers/ProgramCourseController.js | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/api/Controllers/ProgramCourseController.js b/src/api/Controllers/ProgramCourseController.js index 5916435..63b3107 100644 --- a/src/api/Controllers/ProgramCourseController.js +++ b/src/api/Controllers/ProgramCourseController.js @@ -23,7 +23,8 @@ export const createProgram = async (req, res) => { } }; -exports.getAllPrograms = async (req, res) => { +// ✅ Get All Programs +export const getAllPrograms = async (req, res) => { try { let { top, page, limit } = req.body; @@ -32,8 +33,8 @@ exports.getAllPrograms = async (req, res) => { page = parseInt(page); limit = parseInt(limit); - let queryOptions = { - order: [['createdAt', 'DESC']] // latest first + const queryOptions = { + order: [["createdAt", "DESC"]], }; if (top) { @@ -50,18 +51,20 @@ exports.getAllPrograms = async (req, res) => { const programs = await ProgramCourse.findAll(queryOptions); res.status(200).json({ - status: 'success', - data: programs + status: "success", + data: programs, }); } catch (error) { - res.status(500).json({ - status: 'error', - message: error.message + res.status(500).json({ + status: "error", + message: error.message, }); } }; -exports.UpdateProgram = async (req, res) => { + +// ✅ Update Program +export const UpdateProgram = async (req, res) => { try { const result = await ProgramService.UpdateProgram(req.body); From f99e6c378b8c3264b4b2362adccc0e19173b6b43 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:31:07 +0800 Subject: [PATCH 24/26] refactor: migrate DeleteProgram to ES module syntax --- src/api/Controllers/ProgramCourseController.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/api/Controllers/ProgramCourseController.js b/src/api/Controllers/ProgramCourseController.js index 63b3107..6e458c1 100644 --- a/src/api/Controllers/ProgramCourseController.js +++ b/src/api/Controllers/ProgramCourseController.js @@ -89,6 +89,8 @@ export const UpdateProgram = async (req, res) => { }); } }; -exports.DeleteProgram = async(id)=>{ - return await ProgramService.DeleteProgram(id) -} \ No newline at end of file + +// ✅ Delete Program +export const DeleteProgram = async (id) => { + return await ProgramService.DeleteProgram(id); +}; From 97feb941cb713cc2e3a5e61733543d4788909d46 Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:38:19 +0800 Subject: [PATCH 25/26] refactor: migrate userController to ES module syntax and improve function exports --- src/api/Controllers/userController.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/api/Controllers/userController.js b/src/api/Controllers/userController.js index 74fecb8..b9f339a 100644 --- a/src/api/Controllers/userController.js +++ b/src/api/Controllers/userController.js @@ -1,6 +1,7 @@ -const userService = require('../Services/UserService'); +import userService from "../Services/UserService.js"; -exports.registerUser = async (req, res) => { +// ✅ Register User +export const registerUser = async (req, res) => { try { const newUser = await userService.registerUser(req.body); if(newUser){ @@ -14,12 +15,12 @@ exports.registerUser = async (req, res) => { } }; -exports.LoginUser = async(req,res)=>{ - try{ - - const isLogin = await userService.LoginUser(req.body) +// ✅ Login User +export const LoginUser = async (req, res) => { + try { + const isLogin = await userService.LoginUser(req.body); - res.cookie('token', isLogin.token, { + res.cookie("token", isLogin.token, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'strict', @@ -34,4 +35,4 @@ exports.LoginUser = async(req,res)=>{ }catch(error){ res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' }); } -} +}; From 17ce3781c6999f349ab2a415c24981089103f97d Mon Sep 17 00:00:00 2001 From: agaesh Date: Fri, 10 Oct 2025 00:40:20 +0800 Subject: [PATCH 26/26] refactor: streamline LoginUser function by reorganizing cookie setting logic --- src/api/Controllers/userController.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/api/Controllers/userController.js b/src/api/Controllers/userController.js index b9f339a..54774b2 100644 --- a/src/api/Controllers/userController.js +++ b/src/api/Controllers/userController.js @@ -20,18 +20,19 @@ export const LoginUser = async (req, res) => { try { const isLogin = await userService.LoginUser(req.body); - res.cookie("token", isLogin.token, { - httpOnly: true, - secure: process.env.NODE_ENV === 'production', - sameSite: 'strict', - maxAge: 60 * 60 * 1000 - }); - if(isLogin) { - return res.status(200).json({ - message: 'Login successful', + if(isLogin) { + res.cookie("token", isLogin.token, { + httpOnly: true, + secure: process.env.NODE_ENV === 'production', + sameSite: 'strict', + maxAge: 60 * 60 * 1000 }); - } + + return res.status(200).json({ + message: 'Login successful', + }); + } }catch(error){ res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' }); }