From 715d94fbf959f7c9f356f44b044e99e4c8d9f6af Mon Sep 17 00:00:00 2001 From: JakkrapartXD Date: Mon, 19 Jan 2026 14:48:45 +0700 Subject: [PATCH] feat: Create course and automatically assign the creator as the primary instructor using a transaction. --- .../src/services/CoursesInstructor.service.ts | 45 ++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/Backend/src/services/CoursesInstructor.service.ts b/Backend/src/services/CoursesInstructor.service.ts index 67074846..ffd09745 100644 --- a/Backend/src/services/CoursesInstructor.service.ts +++ b/Backend/src/services/CoursesInstructor.service.ts @@ -26,25 +26,40 @@ import { export class CoursesInstructorService { static async createCourse(courseData: CreateCourseInput, userId: number): Promise { try { - // Map custom input to Prisma format - const courseCreated = await prisma.course.create({ - data: { - category_id: courseData.category_id, - title: courseData.title, - slug: courseData.slug, - description: courseData.description, - thumbnail_url: courseData.thumbnail_url, - price: courseData.price || 0, - is_free: courseData.is_free ?? false, - have_certificate: courseData.have_certificate ?? false, - created_by: userId, // Required field from JWT - status: 'DRAFT' // Default status - } + // Use transaction to create course and instructor together + const result = await prisma.$transaction(async (tx) => { + // Create the course + const courseCreated = await tx.course.create({ + data: { + category_id: courseData.category_id, + title: courseData.title, + slug: courseData.slug, + description: courseData.description, + thumbnail_url: courseData.thumbnail_url, + price: courseData.price || 0, + is_free: courseData.is_free ?? false, + have_certificate: courseData.have_certificate ?? false, + created_by: userId, + status: 'DRAFT' + } + }); + + // Add creator as primary instructor + await tx.courseInstructor.create({ + data: { + course_id: courseCreated.id, + user_id: userId, + is_primary: true, + } + }); + + return courseCreated; }); + return { code: 201, message: 'Course created successfully', - data: courseCreated + data: result }; } catch (error) { logger.error('Failed to create course', { error });