@hed-hog/lms 0.0.331 → 0.0.347
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/class-group/class-group.controller.d.ts +8 -8
- package/dist/class-group/class-group.service.d.ts +8 -8
- package/dist/course/course.controller.d.ts +6 -1
- package/dist/course/course.controller.d.ts.map +1 -1
- package/dist/course/course.controller.js +19 -2
- package/dist/course/course.controller.js.map +1 -1
- package/dist/course/course.service.d.ts +6 -0
- package/dist/course/course.service.d.ts.map +1 -1
- package/dist/course/course.service.js +63 -28
- package/dist/course/course.service.js.map +1 -1
- package/dist/course/dto/create-course.dto.d.ts +1 -0
- package/dist/course/dto/create-course.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course.dto.js +5 -0
- package/dist/course/dto/create-course.dto.js.map +1 -1
- package/dist/enterprise/enterprise.controller.d.ts +84 -12
- package/dist/enterprise/enterprise.controller.d.ts.map +1 -1
- package/dist/enterprise/enterprise.controller.js +10 -0
- package/dist/enterprise/enterprise.controller.js.map +1 -1
- package/dist/enterprise/enterprise.service.d.ts +90 -12
- package/dist/enterprise/enterprise.service.d.ts.map +1 -1
- package/dist/enterprise/enterprise.service.js +413 -40
- package/dist/enterprise/enterprise.service.js.map +1 -1
- package/dist/enterprise/training/training-admin.controller.d.ts +9 -6
- package/dist/enterprise/training/training-admin.controller.d.ts.map +1 -1
- package/dist/enterprise/training/training-admin.controller.js +10 -6
- package/dist/enterprise/training/training-admin.controller.js.map +1 -1
- package/dist/enterprise/training/training-admin.service.d.ts +11 -5
- package/dist/enterprise/training/training-admin.service.d.ts.map +1 -1
- package/dist/enterprise/training/training-admin.service.js +108 -52
- package/dist/enterprise/training/training-admin.service.js.map +1 -1
- package/dist/enterprise/training/training-viewer.controller.d.ts +3 -0
- package/dist/enterprise/training/training-viewer.controller.d.ts.map +1 -1
- package/dist/evaluation/evaluation.controller.d.ts +2 -2
- package/dist/evaluation/evaluation.service.d.ts +2 -2
- package/dist/instructor/dto/create-instructor-skill.dto.d.ts +0 -4
- package/dist/instructor/dto/create-instructor-skill.dto.d.ts.map +1 -1
- package/dist/instructor/dto/create-instructor-skill.dto.js +0 -21
- package/dist/instructor/dto/create-instructor-skill.dto.js.map +1 -1
- package/dist/instructor/dto/update-instructor-skill.dto.d.ts +0 -4
- package/dist/instructor/dto/update-instructor-skill.dto.d.ts.map +1 -1
- package/dist/instructor/dto/update-instructor-skill.dto.js +0 -22
- package/dist/instructor/dto/update-instructor-skill.dto.js.map +1 -1
- package/dist/instructor/instructor-skill.controller.d.ts +4 -4
- package/dist/instructor/instructor-skill.service.d.ts +4 -7
- package/dist/instructor/instructor-skill.service.d.ts.map +1 -1
- package/dist/instructor/instructor-skill.service.js +2 -89
- package/dist/instructor/instructor-skill.service.js.map +1 -1
- package/dist/instructor/instructor.controller.d.ts +21 -0
- package/dist/instructor/instructor.controller.d.ts.map +1 -1
- package/dist/instructor/instructor.controller.js +19 -0
- package/dist/instructor/instructor.controller.js.map +1 -1
- package/dist/instructor/instructor.service.d.ts +27 -0
- package/dist/instructor/instructor.service.d.ts.map +1 -1
- package/dist/instructor/instructor.service.js +79 -25
- package/dist/instructor/instructor.service.js.map +1 -1
- package/dist/lms.module.d.ts.map +1 -1
- package/dist/lms.module.js.map +1 -1
- package/dist/training/dto/create-training.dto.d.ts +1 -0
- package/dist/training/dto/create-training.dto.d.ts.map +1 -1
- package/dist/training/dto/create-training.dto.js +5 -0
- package/dist/training/dto/create-training.dto.js.map +1 -1
- package/dist/training/training.controller.d.ts +4 -0
- package/dist/training/training.controller.d.ts.map +1 -1
- package/dist/training/training.service.d.ts +8 -0
- package/dist/training/training.service.d.ts.map +1 -1
- package/dist/training/training.service.js +71 -6
- package/dist/training/training.service.js.map +1 -1
- package/hedhog/data/route.yaml +23 -1
- package/hedhog/frontend/app/_components/class-form-sheet.tsx.ejs +80 -33
- package/hedhog/frontend/app/_components/course-form-sheet.tsx.ejs +3 -3
- package/hedhog/frontend/app/_components/create-lms-instructor-sheet.tsx.ejs +591 -0
- package/hedhog/frontend/app/certificates/issued/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/certificates/models/page.tsx.ejs +39 -7
- package/hedhog/frontend/app/classes/[id]/page.tsx.ejs +1 -3
- package/hedhog/frontend/app/classes/page.tsx.ejs +34 -7
- package/hedhog/frontend/app/courses/[id]/_components/CourseClassificationCard.tsx.ejs +3 -33
- package/hedhog/frontend/app/courses/[id]/_components/CourseContentCard.tsx.ejs +9 -9
- package/hedhog/frontend/app/courses/[id]/_components/CourseMainInfoCard.tsx.ejs +109 -0
- package/hedhog/frontend/app/courses/[id]/_components/CourseMultiEntityPicker.tsx.ejs +40 -13
- package/hedhog/frontend/app/courses/[id]/_components/CourseRelationsCard.tsx.ejs +76 -81
- package/hedhog/frontend/app/courses/[id]/_components/CourseSummaryCard.tsx.ejs +60 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-scheduled-classes-tab.tsx.ejs +406 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-tree.tsx.ejs +134 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-course.tsx.ejs +113 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-lesson.tsx.ejs +314 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-session.tsx.ejs +174 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +243 -34
- package/hedhog/frontend/app/courses/[id]/structure/_components/mock-data.ts.ejs +185 -0
- package/hedhog/frontend/app/courses/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/enterprise/_components/enterprise-activity-timeline.tsx.ejs +87 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-admin-create-sheet.tsx.ejs +4 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-administrators-tab.tsx.ejs +31 -5
- package/hedhog/frontend/app/enterprise/_components/enterprise-classes-tab.tsx.ejs +79 -20
- package/hedhog/frontend/app/enterprise/_components/enterprise-company-identity-card.tsx.ejs +11 -2
- package/hedhog/frontend/app/enterprise/_components/enterprise-course-edit-sheet.tsx.ejs +201 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-courses-tab.tsx.ejs +55 -24
- package/hedhog/frontend/app/enterprise/_components/enterprise-detail-sheet.tsx.ejs +430 -296
- package/hedhog/frontend/app/enterprise/_components/enterprise-mocks.ts.ejs +277 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-overview-analytics.tsx.ejs +205 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-person-edit-sheet.tsx.ejs +97 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-sheet.tsx.ejs +82 -57
- package/hedhog/frontend/app/enterprise/_components/enterprise-student-create-sheet.tsx.ejs +4 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-students-tab.tsx.ejs +60 -22
- package/hedhog/frontend/app/enterprise/_components/enterprise-types.ts.ejs +54 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-user-create-sheet.tsx.ejs +211 -0
- package/hedhog/frontend/app/enterprise/page.tsx.ejs +39 -7
- package/hedhog/frontend/app/exams/[id]/questions/page.tsx.ejs +31 -19
- package/hedhog/frontend/app/exams/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/instructor-skills/page.tsx.ejs +51 -104
- package/hedhog/frontend/app/instructors/_components/instructor-form-sheet.tsx.ejs +625 -366
- package/hedhog/frontend/app/instructors/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/paths/page.tsx.ejs +76 -8
- package/hedhog/frontend/app/reports/evaluations/page.tsx.ejs +6 -1
- package/hedhog/frontend/app/training/page.tsx.ejs +78 -9
- package/hedhog/frontend/messages/en.json +101 -10
- package/hedhog/frontend/messages/pt.json +115 -11
- package/hedhog/table/enterprise_student_license_event.yaml +30 -0
- package/hedhog/table/instructor_skill.yaml +0 -11
- package/hedhog/table/learning_path.yaml +4 -0
- package/package.json +6 -6
- package/src/course/course.controller.ts +18 -0
- package/src/course/course.service.ts +85 -26
- package/src/course/dto/create-course.dto.ts +4 -0
- package/src/enterprise/enterprise.controller.ts +5 -0
- package/src/enterprise/enterprise.service.ts +507 -29
- package/src/enterprise/training/training-admin.controller.ts +4 -0
- package/src/enterprise/training/training-admin.service.ts +115 -51
- package/src/instructor/dto/create-instructor-skill.dto.ts +0 -17
- package/src/instructor/dto/update-instructor-skill.dto.ts +0 -18
- package/src/instructor/instructor-skill.service.ts +2 -97
- package/src/instructor/instructor.controller.ts +16 -0
- package/src/instructor/instructor.service.ts +87 -10
- package/src/lms.module.ts +1 -0
- package/src/training/dto/create-training.dto.ts +4 -0
- package/src/training/training.service.ts +104 -5
|
@@ -176,10 +176,10 @@ export declare class ClassGroupController {
|
|
|
176
176
|
status: import("@prisma/client").$Enums.course_enrollment_status_22007f5947_enum;
|
|
177
177
|
}[]>;
|
|
178
178
|
enrollStudent(id: number, dto: EnrollStudentDto): Promise<{
|
|
179
|
+
status: import("@prisma/client").$Enums.course_enrollment_status_22007f5947_enum;
|
|
179
180
|
id: number;
|
|
180
181
|
created_at: Date;
|
|
181
182
|
updated_at: Date;
|
|
182
|
-
status: import("@prisma/client").$Enums.course_enrollment_status_22007f5947_enum;
|
|
183
183
|
completed_at: Date | null;
|
|
184
184
|
person_id: number;
|
|
185
185
|
course_id: number;
|
|
@@ -319,46 +319,46 @@ export declare class ClassGroupController {
|
|
|
319
319
|
}>;
|
|
320
320
|
listMaterials(id: number, sessionId?: string): Promise<({
|
|
321
321
|
file: {
|
|
322
|
-
path: string;
|
|
323
322
|
size: number;
|
|
323
|
+
path: string;
|
|
324
324
|
id: number;
|
|
325
325
|
filename: string;
|
|
326
326
|
};
|
|
327
327
|
course_class_session: {
|
|
328
|
-
id: number;
|
|
329
328
|
title: string;
|
|
329
|
+
id: number;
|
|
330
330
|
};
|
|
331
331
|
} & {
|
|
332
|
+
title: string;
|
|
333
|
+
url: string | null;
|
|
332
334
|
id: number;
|
|
333
335
|
description: string | null;
|
|
334
336
|
created_at: Date;
|
|
335
337
|
updated_at: Date;
|
|
336
338
|
file_id: number | null;
|
|
337
339
|
course_class_group_id: number;
|
|
338
|
-
title: string;
|
|
339
340
|
course_class_session_id: number | null;
|
|
340
341
|
material_type: import("@prisma/client").$Enums.course_class_group_material_material_type_6e6c399501_enum;
|
|
341
|
-
url: string | null;
|
|
342
342
|
sort_order: number;
|
|
343
343
|
})[]>;
|
|
344
344
|
createMaterial(id: number, dto: CreateMaterialDto): Promise<{
|
|
345
345
|
file: {
|
|
346
|
-
path: string;
|
|
347
346
|
size: number;
|
|
347
|
+
path: string;
|
|
348
348
|
id: number;
|
|
349
349
|
filename: string;
|
|
350
350
|
};
|
|
351
351
|
} & {
|
|
352
|
+
title: string;
|
|
353
|
+
url: string | null;
|
|
352
354
|
id: number;
|
|
353
355
|
description: string | null;
|
|
354
356
|
created_at: Date;
|
|
355
357
|
updated_at: Date;
|
|
356
358
|
file_id: number | null;
|
|
357
359
|
course_class_group_id: number;
|
|
358
|
-
title: string;
|
|
359
360
|
course_class_session_id: number | null;
|
|
360
361
|
material_type: import("@prisma/client").$Enums.course_class_group_material_material_type_6e6c399501_enum;
|
|
361
|
-
url: string | null;
|
|
362
362
|
sort_order: number;
|
|
363
363
|
}>;
|
|
364
364
|
deleteMaterial(id: number, materialId: number): Promise<{
|
|
@@ -198,10 +198,10 @@ export declare class ClassGroupService {
|
|
|
198
198
|
status: import("@prisma/client").$Enums.course_enrollment_status_22007f5947_enum;
|
|
199
199
|
}[]>;
|
|
200
200
|
enrollStudent(classGroupId: number, personId: number): Promise<{
|
|
201
|
+
status: import("@prisma/client").$Enums.course_enrollment_status_22007f5947_enum;
|
|
201
202
|
id: number;
|
|
202
203
|
created_at: Date;
|
|
203
204
|
updated_at: Date;
|
|
204
|
-
status: import("@prisma/client").$Enums.course_enrollment_status_22007f5947_enum;
|
|
205
205
|
completed_at: Date | null;
|
|
206
206
|
person_id: number;
|
|
207
207
|
course_id: number;
|
|
@@ -368,46 +368,46 @@ export declare class ClassGroupService {
|
|
|
368
368
|
private handlePrismaError;
|
|
369
369
|
listMaterials(classGroupId: number, sessionId?: number): Promise<({
|
|
370
370
|
file: {
|
|
371
|
-
path: string;
|
|
372
371
|
size: number;
|
|
372
|
+
path: string;
|
|
373
373
|
id: number;
|
|
374
374
|
filename: string;
|
|
375
375
|
};
|
|
376
376
|
course_class_session: {
|
|
377
|
-
id: number;
|
|
378
377
|
title: string;
|
|
378
|
+
id: number;
|
|
379
379
|
};
|
|
380
380
|
} & {
|
|
381
|
+
title: string;
|
|
382
|
+
url: string | null;
|
|
381
383
|
id: number;
|
|
382
384
|
description: string | null;
|
|
383
385
|
created_at: Date;
|
|
384
386
|
updated_at: Date;
|
|
385
387
|
file_id: number | null;
|
|
386
388
|
course_class_group_id: number;
|
|
387
|
-
title: string;
|
|
388
389
|
course_class_session_id: number | null;
|
|
389
390
|
material_type: import("@prisma/client").$Enums.course_class_group_material_material_type_6e6c399501_enum;
|
|
390
|
-
url: string | null;
|
|
391
391
|
sort_order: number;
|
|
392
392
|
})[]>;
|
|
393
393
|
createMaterial(classGroupId: number, dto: import('./dto/material.dto').CreateMaterialDto): Promise<{
|
|
394
394
|
file: {
|
|
395
|
-
path: string;
|
|
396
395
|
size: number;
|
|
396
|
+
path: string;
|
|
397
397
|
id: number;
|
|
398
398
|
filename: string;
|
|
399
399
|
};
|
|
400
400
|
} & {
|
|
401
|
+
title: string;
|
|
402
|
+
url: string | null;
|
|
401
403
|
id: number;
|
|
402
404
|
description: string | null;
|
|
403
405
|
created_at: Date;
|
|
404
406
|
updated_at: Date;
|
|
405
407
|
file_id: number | null;
|
|
406
408
|
course_class_group_id: number;
|
|
407
|
-
title: string;
|
|
408
409
|
course_class_session_id: number | null;
|
|
409
410
|
material_type: import("@prisma/client").$Enums.course_class_group_material_material_type_6e6c399501_enum;
|
|
410
|
-
url: string | null;
|
|
411
411
|
sort_order: number;
|
|
412
412
|
}>;
|
|
413
413
|
deleteMaterial(classGroupId: number, materialId: number): Promise<{
|
|
@@ -4,7 +4,7 @@ import { UpdateCourseDto } from './dto/update-course.dto';
|
|
|
4
4
|
export declare class CourseController {
|
|
5
5
|
private readonly courseService;
|
|
6
6
|
constructor(courseService: CourseService);
|
|
7
|
-
list(page?: string, pageSize?: string, search?: string, status?: string, level?: string, category?: string): Promise<{
|
|
7
|
+
list(page?: string, pageSize?: string, search?: string, status?: string, level?: string, category?: string, offeringTypes?: string | string[]): Promise<{
|
|
8
8
|
total: number;
|
|
9
9
|
page: number;
|
|
10
10
|
pageSize: number;
|
|
@@ -55,6 +55,7 @@ export declare class CourseController {
|
|
|
55
55
|
sessionCount: number;
|
|
56
56
|
averageCompletion: number;
|
|
57
57
|
certificatesIssued: any;
|
|
58
|
+
certificateModel: any;
|
|
58
59
|
progressByModule: {
|
|
59
60
|
moduleId: number;
|
|
60
61
|
moduleTitle: string;
|
|
@@ -65,6 +66,7 @@ export declare class CourseController {
|
|
|
65
66
|
createdAt: any;
|
|
66
67
|
}[];
|
|
67
68
|
}>;
|
|
69
|
+
private toArray;
|
|
68
70
|
stats(): Promise<{
|
|
69
71
|
totalCourses: number;
|
|
70
72
|
publishedCourses: number;
|
|
@@ -117,6 +119,7 @@ export declare class CourseController {
|
|
|
117
119
|
sessionCount: number;
|
|
118
120
|
averageCompletion: number;
|
|
119
121
|
certificatesIssued: any;
|
|
122
|
+
certificateModel: any;
|
|
120
123
|
progressByModule: {
|
|
121
124
|
moduleId: number;
|
|
122
125
|
moduleTitle: string;
|
|
@@ -172,6 +175,7 @@ export declare class CourseController {
|
|
|
172
175
|
sessionCount: number;
|
|
173
176
|
averageCompletion: number;
|
|
174
177
|
certificatesIssued: any;
|
|
178
|
+
certificateModel: any;
|
|
175
179
|
progressByModule: {
|
|
176
180
|
moduleId: number;
|
|
177
181
|
moduleTitle: string;
|
|
@@ -227,6 +231,7 @@ export declare class CourseController {
|
|
|
227
231
|
sessionCount: number;
|
|
228
232
|
averageCompletion: number;
|
|
229
233
|
certificatesIssued: any;
|
|
234
|
+
certificateModel: any;
|
|
230
235
|
progressByModule: {
|
|
231
236
|
moduleId: number;
|
|
232
237
|
moduleTitle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course.controller.d.ts","sourceRoot":"","sources":["../../src/course/course.controller.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,qBAEa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAGzD,IAAI,CACa,IAAI,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"course.controller.d.ts","sourceRoot":"","sources":["../../src/course/course.controller.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,qBAEa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,aAAa;IAGzD,IAAI,CACa,IAAI,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAa3D,OAAO,CAAC,OAAO;IAiBf,KAAK;;;;;;IAKL,OAAO,CAA4B,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAK7C,MAAM,CAAS,GAAG,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKnC,MAAM,CACuB,EAAE,EAAE,MAAM,EAC7B,GAAG,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAM9B,MAAM,CAA4B,EAAE,EAAE,MAAM;;;CAG7C"}
|
|
@@ -22,7 +22,7 @@ let CourseController = class CourseController {
|
|
|
22
22
|
constructor(courseService) {
|
|
23
23
|
this.courseService = courseService;
|
|
24
24
|
}
|
|
25
|
-
list(page, pageSize, search, status, level, category) {
|
|
25
|
+
list(page, pageSize, search, status, level, category, offeringTypes) {
|
|
26
26
|
return this.courseService.list({
|
|
27
27
|
page: page ? Number(page) : 1,
|
|
28
28
|
pageSize: pageSize ? Number(pageSize) : 12,
|
|
@@ -30,8 +30,24 @@ let CourseController = class CourseController {
|
|
|
30
30
|
status,
|
|
31
31
|
level,
|
|
32
32
|
category,
|
|
33
|
+
offeringTypes: this.toArray(offeringTypes),
|
|
33
34
|
});
|
|
34
35
|
}
|
|
36
|
+
toArray(value) {
|
|
37
|
+
if (Array.isArray(value)) {
|
|
38
|
+
return value
|
|
39
|
+
.flatMap((item) => String(item).split(','))
|
|
40
|
+
.map((item) => item.trim())
|
|
41
|
+
.filter(Boolean);
|
|
42
|
+
}
|
|
43
|
+
if (typeof value === 'string') {
|
|
44
|
+
return value
|
|
45
|
+
.split(',')
|
|
46
|
+
.map((item) => item.trim())
|
|
47
|
+
.filter(Boolean);
|
|
48
|
+
}
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
35
51
|
stats() {
|
|
36
52
|
return this.courseService.stats();
|
|
37
53
|
}
|
|
@@ -57,8 +73,9 @@ __decorate([
|
|
|
57
73
|
__param(3, (0, common_1.Query)('status')),
|
|
58
74
|
__param(4, (0, common_1.Query)('level')),
|
|
59
75
|
__param(5, (0, common_1.Query)('category')),
|
|
76
|
+
__param(6, (0, common_1.Query)('offeringTypes')),
|
|
60
77
|
__metadata("design:type", Function),
|
|
61
|
-
__metadata("design:paramtypes", [String, String, String, String, String, String]),
|
|
78
|
+
__metadata("design:paramtypes", [String, String, String, String, String, String, Object]),
|
|
62
79
|
__metadata("design:returntype", void 0)
|
|
63
80
|
], CourseController.prototype, "list", null);
|
|
64
81
|
__decorate([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course.controller.js","sourceRoot":"","sources":["../../src/course/course.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,sCAAoC;AACpC,2CAUwB;AACxB,qDAAiD;AACjD,+DAA0D;AAC1D,+DAA0D;AAInD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAG7D,IAAI,CACa,IAAa,EACT,QAAiB,EACnB,MAAe,EACf,MAAe,EAChB,KAAc,EACX,QAAiB;
|
|
1
|
+
{"version":3,"file":"course.controller.js","sourceRoot":"","sources":["../../src/course/course.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,sCAAoC;AACpC,2CAUwB;AACxB,qDAAiD;AACjD,+DAA0D;AAC1D,+DAA0D;AAInD,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAG7D,IAAI,CACa,IAAa,EACT,QAAiB,EACnB,MAAe,EACf,MAAe,EAChB,KAAc,EACX,QAAiB,EACZ,aAAiC;QAEzD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;YAC7B,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1C,MAAM;YACN,MAAM;YACN,KAAK;YACL,QAAQ;YACR,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;SAC3C,CAAC,CAAC;IACL,CAAC;IAEO,OAAO,CAAC,KAAyB;QACvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK;iBACT,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK;iBACT,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAGD,KAAK;QACH,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACpC,CAAC;IAGD,OAAO,CAA4B,EAAU;QAC3C,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAGD,MAAM,CAAS,GAAoB;QACjC,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC;IAGD,MAAM,CACuB,EAAU,EAC7B,GAAoB;QAE5B,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IAGD,MAAM,CAA4B,EAAU;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;CACF,CAAA;AAnEY,4CAAgB;AAI3B;IADC,IAAA,YAAG,GAAE;IAEH,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;IACb,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;IACjB,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;IACf,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;IACf,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;IACd,WAAA,IAAA,cAAK,EAAC,UAAU,CAAC,CAAA;IACjB,WAAA,IAAA,cAAK,EAAC,eAAe,CAAC,CAAA;;;;4CAWxB;AAmBD;IADC,IAAA,YAAG,EAAC,OAAO,CAAC;;;;6CAGZ;AAGD;IADC,IAAA,YAAG,EAAC,KAAK,CAAC;IACF,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,qBAAY,CAAC,CAAA;;;;+CAEjC;AAGD;IADC,IAAA,aAAI,GAAE;IACC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,mCAAe;;8CAElC;AAGD;IADC,IAAA,cAAK,EAAC,KAAK,CAAC;IAEV,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,qBAAY,CAAC,CAAA;IACzB,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,mCAAe;;8CAG7B;AAGD;IADC,IAAA,eAAM,EAAC,KAAK,CAAC;IACN,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,qBAAY,CAAC,CAAA;;;;8CAEhC;2BAlEU,gBAAgB;IAF5B,IAAA,UAAI,GAAE;IACN,IAAA,mBAAU,EAAC,aAAa,CAAC;qCAEoB,8BAAa;GAD9C,gBAAgB,CAmE5B"}
|
|
@@ -11,6 +11,7 @@ export declare class CourseService {
|
|
|
11
11
|
private normalizeOfferingType;
|
|
12
12
|
private normalizeOptionalText;
|
|
13
13
|
private resolveCourseTitle;
|
|
14
|
+
private resolveCertificateTemplateId;
|
|
14
15
|
list(params: {
|
|
15
16
|
page?: number;
|
|
16
17
|
pageSize?: number;
|
|
@@ -18,6 +19,7 @@ export declare class CourseService {
|
|
|
18
19
|
status?: string;
|
|
19
20
|
level?: string;
|
|
20
21
|
category?: string;
|
|
22
|
+
offeringTypes?: string[];
|
|
21
23
|
}): Promise<{
|
|
22
24
|
total: number;
|
|
23
25
|
page: number;
|
|
@@ -69,6 +71,7 @@ export declare class CourseService {
|
|
|
69
71
|
sessionCount: number;
|
|
70
72
|
averageCompletion: number;
|
|
71
73
|
certificatesIssued: any;
|
|
74
|
+
certificateModel: any;
|
|
72
75
|
progressByModule: {
|
|
73
76
|
moduleId: number;
|
|
74
77
|
moduleTitle: string;
|
|
@@ -131,6 +134,7 @@ export declare class CourseService {
|
|
|
131
134
|
sessionCount: number;
|
|
132
135
|
averageCompletion: number;
|
|
133
136
|
certificatesIssued: any;
|
|
137
|
+
certificateModel: any;
|
|
134
138
|
progressByModule: {
|
|
135
139
|
moduleId: number;
|
|
136
140
|
moduleTitle: string;
|
|
@@ -186,6 +190,7 @@ export declare class CourseService {
|
|
|
186
190
|
sessionCount: number;
|
|
187
191
|
averageCompletion: number;
|
|
188
192
|
certificatesIssued: any;
|
|
193
|
+
certificateModel: any;
|
|
189
194
|
progressByModule: {
|
|
190
195
|
moduleId: number;
|
|
191
196
|
moduleTitle: string;
|
|
@@ -241,6 +246,7 @@ export declare class CourseService {
|
|
|
241
246
|
sessionCount: number;
|
|
242
247
|
averageCompletion: number;
|
|
243
248
|
certificatesIssued: any;
|
|
249
|
+
certificateModel: any;
|
|
244
250
|
progressByModule: {
|
|
245
251
|
moduleId: number;
|
|
246
252
|
moduleTitle: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"course.service.d.ts","sourceRoot":"","sources":["../../src/course/course.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAoB1D,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,MAAM,EAAE,aAAa,EAErB,cAAc,EAAE,8BAA8B;IAGjE,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"course.service.d.ts","sourceRoot":"","sources":["../../src/course/course.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAoB1D,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAFd,MAAM,EAAE,aAAa,EAErB,cAAc,EAAE,8BAA8B;IAGjE,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,kBAAkB;YAIZ,4BAA4B;IA6BpC,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0BA6kBe,MAAM;6BACH,MAAM;0BACT,MAAM;;;;;;;IA7fhB,KAAK;;;;;;IAiBL,OAAO,CAAC,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA0eR,MAAM;yBACH,MAAM;sBACT,MAAM;;;;;;IAjXhB,MAAM,CAAC,GAAG,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA+WjB,MAAM;yBACH,MAAM;sBACT,MAAM;;;;;;IAvNhB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAqN7B,MAAM;yBACH,MAAM;sBACT,MAAM;;;;;;IAxBhB,MAAM,CAAC,EAAE,EAAE,MAAM;;;IAcvB,OAAO,CAAC,SAAS;YAuGH,uBAAuB;YAYvB,eAAe;YAgDf,mBAAmB;YAwCnB,gBAAgB;YAgBhB,eAAe;YAaf,iBAAiB;YAwBjB,iBAAiB;YA6DjB,0BAA0B;CA8CzC"}
|
|
@@ -89,6 +89,28 @@ let CourseService = class CourseService {
|
|
|
89
89
|
var _a;
|
|
90
90
|
return (_a = this.normalizeOptionalText(title)) !== null && _a !== void 0 ? _a : slug;
|
|
91
91
|
}
|
|
92
|
+
async resolveCertificateTemplateId(value) {
|
|
93
|
+
if (value === undefined) {
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
const normalized = String(value !== null && value !== void 0 ? value : '').trim();
|
|
97
|
+
if (!normalized) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const numericId = Number(normalized);
|
|
101
|
+
const template = await this.prisma.certificate_template.findFirst({
|
|
102
|
+
where: Number.isInteger(numericId) && numericId > 0
|
|
103
|
+
? {
|
|
104
|
+
OR: [{ id: numericId }, { slug: normalized }],
|
|
105
|
+
}
|
|
106
|
+
: { slug: normalized },
|
|
107
|
+
select: { id: true },
|
|
108
|
+
});
|
|
109
|
+
if (!template) {
|
|
110
|
+
throw new common_1.BadRequestException('Certificate template not found');
|
|
111
|
+
}
|
|
112
|
+
return template.id;
|
|
113
|
+
}
|
|
92
114
|
async list(params) {
|
|
93
115
|
const page = Math.max(Number(params.page) || 1, 1);
|
|
94
116
|
const pageSize = Math.max(Number(params.pageSize) || 12, 1);
|
|
@@ -113,6 +135,9 @@ let CourseService = class CourseService {
|
|
|
113
135
|
some: { category: { slug: params.category } },
|
|
114
136
|
};
|
|
115
137
|
}
|
|
138
|
+
if (params.offeringTypes && params.offeringTypes.length > 0) {
|
|
139
|
+
where.offering_type = { in: params.offeringTypes };
|
|
140
|
+
}
|
|
116
141
|
const [courses, total] = await Promise.all([
|
|
117
142
|
this.prisma.course.findMany({
|
|
118
143
|
skip,
|
|
@@ -221,6 +246,9 @@ let CourseService = class CourseService {
|
|
|
221
246
|
},
|
|
222
247
|
},
|
|
223
248
|
},
|
|
249
|
+
certificate_template: {
|
|
250
|
+
select: { id: true, slug: true },
|
|
251
|
+
},
|
|
224
252
|
_count: {
|
|
225
253
|
select: {
|
|
226
254
|
course_enrollment: true,
|
|
@@ -285,9 +313,10 @@ let CourseService = class CourseService {
|
|
|
285
313
|
}
|
|
286
314
|
async create(dto) {
|
|
287
315
|
var _a, _b, _c, _d;
|
|
288
|
-
const { categorySlugs, logoFileId, bannerFileId, instructorIds } = dto, data = __rest(dto, ["categorySlugs", "logoFileId", "bannerFileId", "instructorIds"]);
|
|
316
|
+
const { categorySlugs, logoFileId, bannerFileId, instructorIds, certificateModel } = dto, data = __rest(dto, ["categorySlugs", "logoFileId", "bannerFileId", "instructorIds", "certificateModel"]);
|
|
289
317
|
const normalizedSlug = data.slug.trim();
|
|
290
318
|
const resolvedTitle = this.resolveCourseTitle(data.title, normalizedSlug);
|
|
319
|
+
const certificateTemplateId = await this.resolveCertificateTemplateId(certificateModel);
|
|
291
320
|
const categories = (categorySlugs === null || categorySlugs === void 0 ? void 0 : categorySlugs.length)
|
|
292
321
|
? await this.prisma.category.findMany({
|
|
293
322
|
where: { slug: { in: categorySlugs } },
|
|
@@ -305,7 +334,7 @@ let CourseService = class CourseService {
|
|
|
305
334
|
validInstructorIds = instructorIds.filter((id) => validIds.has(id));
|
|
306
335
|
}
|
|
307
336
|
const c = await this.prisma.course.create({
|
|
308
|
-
data: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ name: data.name, slug: normalizedSlug, title: resolvedTitle }, (data.description !== undefined && {
|
|
337
|
+
data: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ name: data.name, slug: normalizedSlug, title: resolvedTitle }, (data.description !== undefined && {
|
|
309
338
|
description: data.description,
|
|
310
339
|
})), { level: (_a = this.normalizeLevel(data.level)) !== null && _a !== void 0 ? _a : 'beginner', status: (_b = this.normalizeStatus(data.status)) !== null && _b !== void 0 ? _b : 'draft' }), (data.requirements !== undefined && {
|
|
311
340
|
requirements: data.requirements,
|
|
@@ -317,6 +346,8 @@ let CourseService = class CourseService {
|
|
|
317
346
|
duration_hours: data.durationHours,
|
|
318
347
|
})), (data.certificateWorkload !== undefined && {
|
|
319
348
|
certificate_workload: data.certificateWorkload,
|
|
349
|
+
})), (certificateTemplateId !== undefined && {
|
|
350
|
+
certificate_template_id: certificateTemplateId,
|
|
320
351
|
})), (data.primaryColor !== undefined && {
|
|
321
352
|
primary_color: data.primaryColor,
|
|
322
353
|
})), (data.primaryContrastColor !== undefined && {
|
|
@@ -373,6 +404,9 @@ let CourseService = class CourseService {
|
|
|
373
404
|
},
|
|
374
405
|
},
|
|
375
406
|
},
|
|
407
|
+
certificate_template: {
|
|
408
|
+
select: { id: true, slug: true },
|
|
409
|
+
},
|
|
376
410
|
_count: { select: { course_enrollment: true } },
|
|
377
411
|
},
|
|
378
412
|
});
|
|
@@ -394,7 +428,7 @@ let CourseService = class CourseService {
|
|
|
394
428
|
}
|
|
395
429
|
async update(id, dto) {
|
|
396
430
|
var _a;
|
|
397
|
-
const { categorySlugs, logoFileId, bannerFileId, instructorIds } = dto, data = __rest(dto, ["categorySlugs", "logoFileId", "bannerFileId", "instructorIds"]);
|
|
431
|
+
const { categorySlugs, logoFileId, bannerFileId, instructorIds, certificateModel } = dto, data = __rest(dto, ["categorySlugs", "logoFileId", "bannerFileId", "instructorIds", "certificateModel"]);
|
|
398
432
|
let existingSlug;
|
|
399
433
|
if (data.title !== undefined &&
|
|
400
434
|
this.normalizeOptionalText(data.title) === undefined &&
|
|
@@ -409,6 +443,7 @@ let CourseService = class CourseService {
|
|
|
409
443
|
const resolvedTitle = data.title !== undefined
|
|
410
444
|
? this.resolveCourseTitle(data.title, (_a = resolvedSlug !== null && resolvedSlug !== void 0 ? resolvedSlug : existingSlug) !== null && _a !== void 0 ? _a : '')
|
|
411
445
|
: undefined;
|
|
446
|
+
const certificateTemplateId = await this.resolveCertificateTemplateId(certificateModel);
|
|
412
447
|
const categories = (categorySlugs === null || categorySlugs === void 0 ? void 0 : categorySlugs.length)
|
|
413
448
|
? await this.prisma.category.findMany({
|
|
414
449
|
where: { slug: { in: categorySlugs } },
|
|
@@ -437,7 +472,7 @@ let CourseService = class CourseService {
|
|
|
437
472
|
}
|
|
438
473
|
const c = await this.prisma.course.update({
|
|
439
474
|
where: { id },
|
|
440
|
-
data: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (data.name !== undefined && { name: data.name })), (resolvedSlug !== undefined && { slug: resolvedSlug })), (resolvedTitle !== undefined && { title: resolvedTitle })), (data.description !== undefined && { description: data.description })), (data.level !== undefined && {
|
|
475
|
+
data: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, (data.name !== undefined && { name: data.name })), (resolvedSlug !== undefined && { slug: resolvedSlug })), (resolvedTitle !== undefined && { title: resolvedTitle })), (data.description !== undefined && { description: data.description })), (data.level !== undefined && {
|
|
441
476
|
level: this.normalizeLevel(data.level),
|
|
442
477
|
})), (data.status !== undefined && {
|
|
443
478
|
status: this.normalizeStatus(data.status),
|
|
@@ -451,6 +486,8 @@ let CourseService = class CourseService {
|
|
|
451
486
|
duration_hours: data.durationHours,
|
|
452
487
|
})), (data.certificateWorkload !== undefined && {
|
|
453
488
|
certificate_workload: data.certificateWorkload,
|
|
489
|
+
})), (certificateTemplateId !== undefined && {
|
|
490
|
+
certificate_template_id: certificateTemplateId,
|
|
454
491
|
})), (data.primaryColor !== undefined && {
|
|
455
492
|
primary_color: data.primaryColor,
|
|
456
493
|
})), (data.primaryContrastColor !== undefined && {
|
|
@@ -500,6 +537,9 @@ let CourseService = class CourseService {
|
|
|
500
537
|
},
|
|
501
538
|
},
|
|
502
539
|
},
|
|
540
|
+
certificate_template: {
|
|
541
|
+
select: { id: true, slug: true },
|
|
542
|
+
},
|
|
503
543
|
_count: { select: { course_enrollment: true } },
|
|
504
544
|
},
|
|
505
545
|
});
|
|
@@ -546,7 +586,7 @@ let CourseService = class CourseService {
|
|
|
546
586
|
return { success: true };
|
|
547
587
|
}
|
|
548
588
|
mapCourse(c, metrics, extras) {
|
|
549
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29;
|
|
589
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31;
|
|
550
590
|
const resolvedName = (_b = (_a = extras === null || extras === void 0 ? void 0 : extras.name) !== null && _a !== void 0 ? _a : c.name) !== null && _b !== void 0 ? _b : null;
|
|
551
591
|
const resolvedTitle = (_c = this.normalizeOptionalText(c.title)) !== null && _c !== void 0 ? _c : c.slug;
|
|
552
592
|
const courseImages = Array.isArray(c.course_image) ? c.course_image : [];
|
|
@@ -604,8 +644,11 @@ let CourseService = class CourseService {
|
|
|
604
644
|
sessionCount: (_22 = metrics === null || metrics === void 0 ? void 0 : metrics.sessionCount) !== null && _22 !== void 0 ? _22 : 0,
|
|
605
645
|
averageCompletion: Math.round((_23 = metrics === null || metrics === void 0 ? void 0 : metrics.averageCompletion) !== null && _23 !== void 0 ? _23 : 0),
|
|
606
646
|
certificatesIssued: (_26 = (_24 = metrics === null || metrics === void 0 ? void 0 : metrics.certificatesIssued) !== null && _24 !== void 0 ? _24 : (_25 = c._count) === null || _25 === void 0 ? void 0 : _25.certificate) !== null && _26 !== void 0 ? _26 : 0,
|
|
607
|
-
|
|
608
|
-
|
|
647
|
+
certificateModel: (_28 = (_27 = c.certificate_template) === null || _27 === void 0 ? void 0 : _27.slug) !== null && _28 !== void 0 ? _28 : (c.certificate_template_id
|
|
648
|
+
? String(c.certificate_template_id)
|
|
649
|
+
: null),
|
|
650
|
+
progressByModule: (_29 = metrics === null || metrics === void 0 ? void 0 : metrics.progressByModule) !== null && _29 !== void 0 ? _29 : [],
|
|
651
|
+
instructors: ((_30 = c.course_instructor) !== null && _30 !== void 0 ? _30 : []).map((ci) => {
|
|
609
652
|
var _a, _b, _c, _d, _e, _f;
|
|
610
653
|
return ({
|
|
611
654
|
id: ci.instructor_id,
|
|
@@ -613,7 +656,7 @@ let CourseService = class CourseService {
|
|
|
613
656
|
avatarId: (_f = (_e = (_d = ci.instructor) === null || _d === void 0 ? void 0 : _d.person) === null || _e === void 0 ? void 0 : _e.avatar_id) !== null && _f !== void 0 ? _f : null,
|
|
614
657
|
});
|
|
615
658
|
}),
|
|
616
|
-
instructorIds: ((
|
|
659
|
+
instructorIds: ((_31 = c.course_instructor) !== null && _31 !== void 0 ? _31 : []).map((ci) => ci.instructor_id),
|
|
617
660
|
createdAt: c.created_at,
|
|
618
661
|
};
|
|
619
662
|
}
|
|
@@ -661,41 +704,33 @@ let CourseService = class CourseService {
|
|
|
661
704
|
return extrasById;
|
|
662
705
|
}
|
|
663
706
|
async persistCourseExtras(id, data) {
|
|
664
|
-
const
|
|
665
|
-
const params = [];
|
|
707
|
+
const updateData = {};
|
|
666
708
|
if (data.name !== undefined) {
|
|
667
|
-
|
|
668
|
-
sets.push(`name = $${params.length}`);
|
|
709
|
+
updateData.name = data.name;
|
|
669
710
|
}
|
|
670
711
|
if (data.isFeatured !== undefined) {
|
|
671
|
-
|
|
672
|
-
sets.push(`is_featured = $${params.length}`);
|
|
712
|
+
updateData.is_featured = data.isFeatured;
|
|
673
713
|
}
|
|
674
714
|
if (data.hasCertificate !== undefined) {
|
|
675
|
-
|
|
676
|
-
sets.push(`has_certificate = $${params.length}`);
|
|
715
|
+
updateData.has_certificate = data.hasCertificate;
|
|
677
716
|
}
|
|
678
717
|
if (data.isListed !== undefined) {
|
|
679
|
-
|
|
680
|
-
sets.push(`is_listed = $${params.length}`);
|
|
718
|
+
updateData.is_listed = data.isListed;
|
|
681
719
|
}
|
|
682
720
|
if (data.offeringType !== undefined) {
|
|
683
|
-
|
|
684
|
-
sets.push(`offering_type = $${params.length}`);
|
|
721
|
+
updateData.offering_type = data.offeringType;
|
|
685
722
|
}
|
|
686
|
-
if (
|
|
723
|
+
if (Object.keys(updateData).length === 0) {
|
|
687
724
|
return;
|
|
688
725
|
}
|
|
689
|
-
params.push(id);
|
|
690
726
|
try {
|
|
691
|
-
await this.prisma
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
`, ...params);
|
|
727
|
+
await this.prisma.course.update({
|
|
728
|
+
where: { id },
|
|
729
|
+
data: updateData,
|
|
730
|
+
});
|
|
696
731
|
}
|
|
697
732
|
catch (_a) {
|
|
698
|
-
//
|
|
733
|
+
// Some environments may still be behind the current course schema.
|
|
699
734
|
}
|
|
700
735
|
}
|
|
701
736
|
async syncCourseImages(courseId, data) {
|