Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 46 additions & 48 deletions src/api/Controllers/DepartmentController.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,54 @@
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
});
});
const departments = await DepartmentModel.findAll(queryOptions);

}catch(error){
res.status(error.status || 500).json({ error: error.message || 'Internal Server Error' });
}
}


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' });
}
};
// ✅ Get Department by ID
export const getDepartmentByID = async (req, res) => {
try {
const { id } = req.params;
const department = await DepartmentService.getDepartmentByID(id);
Expand All @@ -68,10 +64,11 @@ exports.getDepartmentByID = 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
Expand All @@ -82,7 +79,8 @@ exports.createDeparment = 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 });
Expand All @@ -91,11 +89,11 @@ exports.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 });
}
}

};
88 changes: 50 additions & 38 deletions src/api/Controllers/InstructorController.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
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) => {
try {
// Resolve __dirname (ESM compatible)
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const base = path.resolve(__dirname, "../../../");

const {id, ...data} = req.body
const User = UserModelDefiner(sequelize, DataTypes);
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) {
Expand All @@ -35,29 +41,35 @@ exports.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,
});
}
};
// ✅ 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,
});
}
};
47 changes: 28 additions & 19 deletions src/api/Controllers/ProgramCourseController.js
Original file line number Diff line number Diff line change
@@ -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){
Expand All @@ -19,7 +23,8 @@ exports.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;

Expand All @@ -28,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) {
Expand All @@ -46,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);

Expand All @@ -82,6 +89,8 @@ exports.UpdateProgram = async (req, res) => {
});
}
};
exports.DeleteProgram = async(id)=>{
return await ProgramService.DeleteProgram(id)
}

// ✅ Delete Program
export const DeleteProgram = async (id) => {
return await ProgramService.DeleteProgram(id);
};
36 changes: 19 additions & 17 deletions src/api/Controllers/userController.js
Original file line number Diff line number Diff line change
@@ -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){
Expand All @@ -14,24 +15,25 @@ 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, {
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' });
}
}
};
Loading