47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
![]() |
import { db, EnrollmentStatus, PostType } from "@nicestack/common";
|
||
|
|
||
|
// 更新课程评价统计
|
||
|
export async function updateCourseReviewStats(courseId: string) {
|
||
|
const reviews = await db.post.findMany({
|
||
|
where: {
|
||
|
courseId,
|
||
|
type: PostType.COURSE_REVIEW,
|
||
|
deletedAt: null
|
||
|
},
|
||
|
select: { rating: true }
|
||
|
});
|
||
|
const numberOfReviews = reviews.length;
|
||
|
const averageRating = numberOfReviews > 0
|
||
|
? reviews.reduce((sum, review) => sum + review.rating, 0) / numberOfReviews
|
||
|
: 0;
|
||
|
|
||
|
return db.course.update({
|
||
|
where: { id: courseId },
|
||
|
data: { numberOfReviews, averageRating }
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// 更新课程注册统计
|
||
|
export async function updateCourseEnrollmentStats(courseId: string) {
|
||
|
const completedEnrollments = await db.enrollment.count({
|
||
|
where: {
|
||
|
courseId,
|
||
|
status: EnrollmentStatus.COMPLETED
|
||
|
}
|
||
|
});
|
||
|
const totalEnrollments = await db.enrollment.count({
|
||
|
where: { courseId }
|
||
|
});
|
||
|
const completionRate = totalEnrollments > 0
|
||
|
? (completedEnrollments / totalEnrollments) * 100
|
||
|
: 0;
|
||
|
return db.course.update({
|
||
|
where: { id: courseId },
|
||
|
data: {
|
||
|
numberOfStudents: totalEnrollments,
|
||
|
completionRate
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|