feat: Implement instructor-specific course management and refactor course creation into dedicated modules.

This commit is contained in:
JakkrapartXD 2026-01-16 11:12:12 +07:00
parent ec54160a5e
commit 000de75dd1
8 changed files with 103 additions and 13 deletions

View file

@ -192,9 +192,9 @@ model CourseApproval {
course_id Int
submitted_by Int
reviewed_by Int?
action ApprovalAction
previous_status CourseStatus
new_status CourseStatus
action ApprovalAction @default(SUBMITTED)
previous_status CourseStatus?
new_status CourseStatus?
comment String? @db.Text
created_at DateTime @default(now())

View file

@ -1,6 +1,6 @@
import { Get, Body, Post, Route, Tags, SuccessResponse, Response, Delete, Controller, Security, Request, Put, Path } from 'tsoa';
import { ValidationError } from '../middleware/errorHandler';
import { createCourse, createCourseResponse, listCourseResponse } from '../types/courses.types';
import { listCourseResponse } from '../types/courses.types';
import { CoursesService } from '../services/courses.service';
import { get } from 'http';

View file

@ -3,7 +3,7 @@ import { Prisma } from '@prisma/client';
import { config } from '../config';
import { logger } from '../config/logger';
import jwt from 'jsonwebtoken';
import { createCourse, createCourseResponse, listCourseResponse, getCourseResponse } from '../types/courses.types';
import {listCourseResponse, getCourseResponse } from '../types/courses.types';
import { UnauthorizedError, ValidationError, ForbiddenError } from '../middleware/errorHandler';
export class CoursesService {

View file

@ -0,0 +1,91 @@
import { Course, Prisma, User } from '@prisma/client';
export interface createCourses{
data: Prisma.CourseCreateInput;
}
export interface createCourseResponse {
code: number;
message: string;
data: Course;
}
export interface ListMyCourseResponse {
code: number;
message: string;
data: Course[];
total: number;
}
export interface GetMyCourseResponse {
code: number;
message: string;
data: Course;
}
export interface UpdateMyCourse{
data: Prisma.CourseUpdateInput;
}
export interface UpdateMyCourseResponse {
code: number;
message: string;
data: Course;
}
export interface DeleteMyCourseResponse {
code: number;
message: string;
}
export interface submitCourseResponse {
code: number;
message: string;
}
export interface submitCourse{
courseId: number;
submitted_by: number;
}
export interface submitCourseResponse {
code: number;
message: string;
}
export interface listCourseinstructorResponse {
code: number;
message: string;
data: User[];
total: number;
}
export interface addinstructorCourse{
user_id: number;
course_id: number;
}
export interface addinstructorCourseResponse {
code: number;
message: string;
}
export interface removeinstructorCourse{
user_id: number;
course_id: number;
}
export interface removeinstructorCourseResponse {
code: number;
message: string;
}
export interface setprimaryCourseInstructor{
user_id: number;
course_id: number;
}
export interface setprimaryCourseInstructorResponse {
code: number;
message: string;
}

View file

@ -1,16 +1,9 @@
import { Course, Prisma } from '@prisma/client';
// Use Prisma's CourseCreateInput for creating courses
export interface createCourse {
data: Prisma.CourseCreateInput;
}
// Response type uses Prisma's Course model
export interface createCourseResponse {
code: number;
message: string;
data: Course;
}
export interface listCourseResponse {
code: number;

View file

@ -0,0 +1,6 @@
import Joi from "joi";
export const addInstructorCourseValidator = Joi.object({
user_id: Joi.number().required(),
course_id: Joi.number().required(),
});