2024-12-31 15:57:32 +08:00
|
|
|
import { Injectable } from '@nestjs/common';
|
|
|
|
import { BaseService } from '../base/base.service';
|
|
|
|
import {
|
|
|
|
UserProfile,
|
|
|
|
db,
|
|
|
|
ObjectType,
|
|
|
|
Prisma,
|
2025-01-03 09:24:46 +08:00
|
|
|
InstructorRole,
|
2024-12-31 15:57:32 +08:00
|
|
|
} from '@nicestack/common';
|
|
|
|
@Injectable()
|
|
|
|
export class CourseService extends BaseService<Prisma.CourseDelegate> {
|
|
|
|
constructor() {
|
|
|
|
super(db, ObjectType.COURSE);
|
|
|
|
}
|
2025-01-03 09:24:46 +08:00
|
|
|
async create(
|
|
|
|
args: Prisma.CourseCreateArgs,
|
|
|
|
params?: { staff?: UserProfile }
|
|
|
|
) {
|
|
|
|
return await db.$transaction(async tx => {
|
|
|
|
const result = await super.create(args, { tx });
|
|
|
|
if (params?.staff?.id) {
|
|
|
|
await tx.courseInstructor.create({
|
|
|
|
data: {
|
|
|
|
instructorId: params.staff.id,
|
|
|
|
courseId: result.id,
|
|
|
|
role: InstructorRole.MAIN,
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
return result;
|
|
|
|
}, {
|
|
|
|
timeout: 10000 // 10 seconds
|
|
|
|
});
|
|
|
|
}
|
|
|
|
async update(
|
|
|
|
args: Prisma.CourseUpdateArgs,
|
|
|
|
params?: { staff?: UserProfile }
|
|
|
|
) {
|
|
|
|
return await db.$transaction(async tx => {
|
|
|
|
const result = await super.update(args, { tx });
|
|
|
|
return result;
|
|
|
|
}, {
|
|
|
|
timeout: 10000 // 10 seconds
|
|
|
|
});
|
|
|
|
}
|
|
|
|
async removeInstructor(courseId: string, instructorId: string) {
|
|
|
|
return await db.courseInstructor.delete({
|
|
|
|
where: {
|
|
|
|
courseId_instructorId: {
|
|
|
|
courseId,
|
|
|
|
instructorId,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
async addInstructor(params: {
|
|
|
|
courseId: string;
|
|
|
|
instructorId: string;
|
|
|
|
role?: string;
|
|
|
|
order?: number;
|
|
|
|
}) {
|
|
|
|
return await db.courseInstructor.create({
|
|
|
|
data: {
|
|
|
|
courseId: params.courseId,
|
|
|
|
instructorId: params.instructorId,
|
|
|
|
role: params.role || InstructorRole.ASSISTANT,
|
|
|
|
order: params.order,
|
|
|
|
},
|
|
|
|
});
|
|
|
|
}
|
|
|
|
async getInstructors(courseId: string) {
|
|
|
|
return await db.courseInstructor.findMany({
|
|
|
|
where: { courseId },
|
|
|
|
include: { instructor: true },
|
|
|
|
orderBy: { order: 'asc' },
|
|
|
|
});
|
|
|
|
}
|
2024-12-31 15:57:32 +08:00
|
|
|
}
|