import { prisma } from '../config/database'; import { Prisma } from '@prisma/client'; import { config } from '../config'; import { logger } from '../config/logger'; import { UnauthorizedError, ValidationError, ForbiddenError, NotFoundError } from '../middleware/errorHandler'; import jwt from 'jsonwebtoken'; import { LessonAttachmentData, LessonData, ChapterData, CreateLessonInput, UpdateLessonInput, CreateChapterInput, UpdateChapterInput, ChaptersRequest, DeleteChapterRequest, ReorderChapterRequest, ListChaptersResponse, GetChapterResponse, CreateChapterResponse, UpdateChapterResponse, DeleteChapterResponse, ReorderChapterResponse, ChapterWithLessonsResponse, ListLessonsRequest, GetLessonRequest, CreateLessonRequest, UpdateLessonRequest, DeleteLessonRequest, ReorderLessonsRequest, ListLessonsResponse, GetLessonResponse, CreateLessonResponse, UpdateLessonResponse, DeleteLessonResponse, ReorderLessonsResponse, } from "../types/ChaptersLesson.typs"; export class ChaptersLessonService { async listChapters(request: ChaptersRequest): Promise { try { const { token, course_id } = request; const decodedToken = jwt.verify(token, config.jwt.secret) as { id: number }; const user = await prisma.user.findUnique({ where: { id: decodedToken.id } }); if (!user) { throw new UnauthorizedError('Invalid token'); } const chapters = await prisma.chapter.findMany({ where: { course_id } }); return { code: 200, message: 'Chapters fetched successfully', data: chapters as ChapterData[], total: chapters.length }; } catch (error) { logger.error(`Error fetching chapters: ${error}`); throw error; } } }