feat: implement course listing and retrieval API with dedicated controller, service, and types.
This commit is contained in:
parent
4b335b6b49
commit
1aa3190ca4
3 changed files with 91 additions and 0 deletions
40
Backend/src/services/courses.service.ts
Normal file
40
Backend/src/services/courses.service.ts
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
import { prisma } from '../config/database';
|
||||
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 { UnauthorizedError, ValidationError, ForbiddenError } from '../middleware/errorHandler';
|
||||
|
||||
export class CoursesService {
|
||||
async ListCourses(): Promise<listCourseResponse> {
|
||||
try {
|
||||
const courses = await prisma.course.findMany();
|
||||
return {
|
||||
code: 200,
|
||||
message: 'Courses fetched successfully',
|
||||
total: courses.length,
|
||||
data: courses,
|
||||
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error('Failed to fetch courses', { error });
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async GetCourseById(id: number): Promise<getCourseResponse> {
|
||||
try {
|
||||
const course = await prisma.course.findUnique({ where: { id } });
|
||||
return {
|
||||
code: 200,
|
||||
message: 'Course fetched successfully',
|
||||
data: course,
|
||||
|
||||
};
|
||||
} catch (error) {
|
||||
logger.error('Failed to fetch course', { error });
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue