@hed-hog/lms 0.0.365 → 0.0.370
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/certificate/certificate.controller.d.ts +1 -1
- package/dist/certificate/certificate.controller.d.ts.map +1 -1
- package/dist/certificate/certificate.controller.js +4 -2
- package/dist/certificate/certificate.controller.js.map +1 -1
- package/dist/certificate/certificate.service.d.ts +50 -0
- package/dist/certificate/certificate.service.d.ts.map +1 -1
- package/dist/certificate/certificate.service.js +73 -0
- package/dist/certificate/certificate.service.js.map +1 -1
- package/dist/class-group/class-group.controller.d.ts +1 -0
- package/dist/class-group/class-group.controller.d.ts.map +1 -1
- package/dist/class-group/class-group.service.d.ts +1 -0
- package/dist/class-group/class-group.service.d.ts.map +1 -1
- package/dist/course/course-ai-usage.service.d.ts +58 -0
- package/dist/course/course-ai-usage.service.d.ts.map +1 -0
- package/dist/course/course-ai-usage.service.js +176 -0
- package/dist/course/course-ai-usage.service.js.map +1 -0
- package/dist/course/course-audio-transcription.service.d.ts +65 -1
- package/dist/course/course-audio-transcription.service.d.ts.map +1 -1
- package/dist/course/course-audio-transcription.service.js +381 -29
- package/dist/course/course-audio-transcription.service.js.map +1 -1
- package/dist/course/course-export-scorm12.service.d.ts +3 -0
- package/dist/course/course-export-scorm12.service.d.ts.map +1 -1
- package/dist/course/course-export-scorm12.service.js +141 -6
- package/dist/course/course-export-scorm12.service.js.map +1 -1
- package/dist/course/course-export.service.d.ts.map +1 -1
- package/dist/course/course-export.service.js +2 -1
- package/dist/course/course-export.service.js.map +1 -1
- package/dist/course/course-lesson.controller.d.ts +25 -3
- package/dist/course/course-lesson.controller.d.ts.map +1 -1
- package/dist/course/course-lesson.controller.js +71 -8
- package/dist/course/course-lesson.controller.js.map +1 -1
- package/dist/course/course-structure.controller.d.ts +30 -7
- package/dist/course/course-structure.controller.d.ts.map +1 -1
- package/dist/course/course-structure.controller.js +37 -4
- package/dist/course/course-structure.controller.js.map +1 -1
- package/dist/course/course-structure.service.d.ts +37 -5
- package/dist/course/course-structure.service.d.ts.map +1 -1
- package/dist/course/course-structure.service.js +165 -20
- package/dist/course/course-structure.service.js.map +1 -1
- package/dist/course/course-transcription-translation.service.d.ts +31 -0
- package/dist/course/course-transcription-translation.service.d.ts.map +1 -0
- package/dist/course/course-transcription-translation.service.js +227 -0
- package/dist/course/course-transcription-translation.service.js.map +1 -0
- package/dist/course/course-video-agent-pipeline.service.d.ts +70 -0
- package/dist/course/course-video-agent-pipeline.service.d.ts.map +1 -0
- package/dist/course/course-video-agent-pipeline.service.js +398 -0
- package/dist/course/course-video-agent-pipeline.service.js.map +1 -0
- package/dist/course/course-video-hls.service.d.ts +14 -0
- package/dist/course/course-video-hls.service.d.ts.map +1 -1
- package/dist/course/course-video-hls.service.js +25 -8
- package/dist/course/course-video-hls.service.js.map +1 -1
- package/dist/course/course.controller.d.ts +2 -0
- package/dist/course/course.controller.d.ts.map +1 -1
- package/dist/course/course.module.d.ts.map +1 -1
- package/dist/course/course.module.js +9 -0
- package/dist/course/course.module.js.map +1 -1
- package/dist/course/course.service.d.ts +2 -0
- package/dist/course/course.service.d.ts.map +1 -1
- package/dist/course/course.service.js +36 -2
- package/dist/course/course.service.js.map +1 -1
- package/dist/course/dto/create-course-bulk-job.dto.d.ts +2 -1
- package/dist/course/dto/create-course-bulk-job.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course-bulk-job.dto.js +6 -1
- package/dist/course/dto/create-course-bulk-job.dto.js.map +1 -1
- package/dist/course/dto/create-course-export.dto.d.ts +1 -0
- package/dist/course/dto/create-course-export.dto.d.ts.map +1 -1
- package/dist/course/dto/create-course-export.dto.js +6 -0
- package/dist/course/dto/create-course-export.dto.js.map +1 -1
- package/dist/course/ffmpeg.util.d.ts +10 -0
- package/dist/course/ffmpeg.util.d.ts.map +1 -0
- package/dist/course/ffmpeg.util.js +79 -0
- package/dist/course/ffmpeg.util.js.map +1 -0
- package/dist/course/lms-bulk-upload-automation.service.d.ts +3 -1
- package/dist/course/lms-bulk-upload-automation.service.d.ts.map +1 -1
- package/dist/course/lms-bulk-upload-automation.service.js +33 -16
- package/dist/course/lms-bulk-upload-automation.service.js.map +1 -1
- package/dist/course/lms-bulk-upload.controller.d.ts +3 -0
- package/dist/course/lms-bulk-upload.controller.d.ts.map +1 -1
- package/dist/course/lms-bulk-upload.service.d.ts +3 -0
- package/dist/course/lms-bulk-upload.service.d.ts.map +1 -1
- package/dist/course/lms-bulk-upload.service.js +48 -29
- package/dist/course/lms-bulk-upload.service.js.map +1 -1
- package/dist/course/subtitle.util.d.ts +46 -0
- package/dist/course/subtitle.util.d.ts.map +1 -0
- package/dist/course/subtitle.util.js +206 -0
- package/dist/course/subtitle.util.js.map +1 -0
- package/dist/enterprise/training/training-admin.controller.d.ts +2 -0
- package/dist/enterprise/training/training-admin.controller.d.ts.map +1 -1
- package/dist/enterprise/training/training-admin.service.d.ts +2 -0
- package/dist/enterprise/training/training-admin.service.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.service.d.ts +27 -0
- package/dist/enterprise/training/training-student.service.d.ts.map +1 -1
- package/dist/enterprise/training/training-student.service.js +197 -10
- package/dist/enterprise/training/training-student.service.js.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.d.ts +3 -1
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.d.ts.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.js +19 -5
- package/dist/lesson-xp-map/lesson-xp-ai-calculation.service.js.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-map.module.d.ts.map +1 -1
- package/dist/lesson-xp-map/lesson-xp-map.module.js +2 -1
- package/dist/lesson-xp-map/lesson-xp-map.module.js.map +1 -1
- package/dist/libraries/lms/tsconfig.tsbuildinfo +1 -1
- package/dist/lms.module.d.ts.map +1 -1
- package/dist/lms.module.js +14 -0
- package/dist/lms.module.js.map +1 -1
- package/dist/platforma/dto/heartbeat.dto.d.ts +9 -0
- package/dist/platforma/dto/heartbeat.dto.d.ts.map +1 -0
- package/dist/platforma/dto/heartbeat.dto.js +50 -0
- package/dist/platforma/dto/heartbeat.dto.js.map +1 -0
- package/dist/platforma/handlers/emit-certificate.handler.d.ts +27 -0
- package/dist/platforma/handlers/emit-certificate.handler.d.ts.map +1 -0
- package/dist/platforma/handlers/emit-certificate.handler.js +117 -0
- package/dist/platforma/handlers/emit-certificate.handler.js.map +1 -0
- package/dist/platforma/handlers/lesson-heartbeat.handler.d.ts +31 -0
- package/dist/platforma/handlers/lesson-heartbeat.handler.d.ts.map +1 -0
- package/dist/platforma/handlers/lesson-heartbeat.handler.js +281 -0
- package/dist/platforma/handlers/lesson-heartbeat.handler.js.map +1 -0
- package/dist/platforma/platforma-heartbeat.service.d.ts +10 -0
- package/dist/platforma/platforma-heartbeat.service.d.ts.map +1 -0
- package/dist/platforma/platforma-heartbeat.service.js +50 -0
- package/dist/platforma/platforma-heartbeat.service.js.map +1 -0
- package/dist/platforma/platforma-performance.service.d.ts +121 -0
- package/dist/platforma/platforma-performance.service.d.ts.map +1 -0
- package/dist/platforma/platforma-performance.service.js +500 -0
- package/dist/platforma/platforma-performance.service.js.map +1 -0
- package/dist/platforma/platforma-search.service.d.ts +21 -0
- package/dist/platforma/platforma-search.service.d.ts.map +1 -0
- package/dist/platforma/platforma-search.service.js +64 -0
- package/dist/platforma/platforma-search.service.js.map +1 -0
- package/dist/platforma/platforma-video.service.d.ts +8 -0
- package/dist/platforma/platforma-video.service.d.ts.map +1 -1
- package/dist/platforma/platforma-video.service.js +45 -2
- package/dist/platforma/platforma-video.service.js.map +1 -1
- package/dist/platforma/platforma.controller.d.ts +213 -1
- package/dist/platforma/platforma.controller.d.ts.map +1 -1
- package/dist/platforma/platforma.controller.js +159 -2
- package/dist/platforma/platforma.controller.js.map +1 -1
- package/dist/realtime/lms-realtime.controller.d.ts +2 -0
- package/dist/realtime/lms-realtime.controller.d.ts.map +1 -1
- package/dist/realtime/lms-realtime.controller.js +31 -0
- package/dist/realtime/lms-realtime.controller.js.map +1 -1
- package/dist/realtime/lms-realtime.service.d.ts +1 -1
- package/dist/realtime/lms-realtime.service.d.ts.map +1 -1
- package/dist/realtime/lms-realtime.service.js.map +1 -1
- package/dist/training/dto/create-training.dto.d.ts +9 -0
- package/dist/training/dto/create-training.dto.d.ts.map +1 -1
- package/dist/training/dto/create-training.dto.js +45 -1
- package/dist/training/dto/create-training.dto.js.map +1 -1
- package/dist/training/training.controller.d.ts +144 -0
- package/dist/training/training.controller.d.ts.map +1 -1
- package/dist/training/training.service.d.ts +149 -0
- package/dist/training/training.service.d.ts.map +1 -1
- package/dist/training/training.service.js +332 -167
- package/dist/training/training.service.js.map +1 -1
- package/hedhog/data/image_type.yaml +10 -0
- package/hedhog/data/route.yaml +251 -0
- package/hedhog/data/setting_group.yaml +97 -0
- package/hedhog/frontend/app/bulk-upload-sessions/page.tsx.ejs +139 -27
- package/hedhog/frontend/app/certificates/models/page.tsx.ejs +182 -29
- package/hedhog/frontend/app/classes/_components/classes-calendar-view.tsx.ejs +277 -0
- package/hedhog/frontend/app/classes/page.tsx.ejs +127 -20
- package/hedhog/frontend/app/courses/[id]/_components/CourseFlagsCard.tsx.ejs +69 -57
- package/hedhog/frontend/app/courses/[id]/_components/CourseIssuedCertificatesCard.tsx.ejs +168 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-ai-costs-tab.tsx.ejs +191 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-export-sheet.tsx.ejs +81 -1
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-exports-tab.tsx.ejs +12 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-overview-tab.tsx.ejs +141 -30
- package/hedhog/frontend/app/courses/[id]/structure/_components/course-xp-overview-tab.tsx.ejs +13 -13
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-course.tsx.ejs +69 -1
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-lesson-xp-tab.tsx.ejs +11 -23
- package/hedhog/frontend/app/courses/[id]/structure/_components/detail-lesson.tsx.ejs +267 -19
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-bulk.tsx.ejs +114 -86
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-course.tsx.ejs +239 -31
- package/hedhog/frontend/app/courses/[id]/structure/_components/editor-lesson.tsx.ejs +344 -59
- package/hedhog/frontend/app/courses/[id]/structure/_components/lesson-video-preview.tsx.ejs +200 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/tree-row-lesson.tsx.ejs +1 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/types.ts.ejs +3 -0
- package/hedhog/frontend/app/courses/[id]/structure/_components/xp-premium-pills.tsx.ejs +1 -8
- package/hedhog/frontend/app/courses/[id]/structure/_data/adapters/course-structure.adapter.ts.ejs +19 -7
- package/hedhog/frontend/app/courses/[id]/structure/_data/types/api-course.types.ts.ejs +4 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-ai-costs.ts.ejs +40 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-content-overview.ts.ejs +2 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-exports.ts.ejs +25 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-course-structure-mutations.ts.ejs +148 -0
- package/hedhog/frontend/app/courses/[id]/structure/_data/use-transcription-segments.ts.ejs +157 -8
- package/hedhog/frontend/app/courses/_components/CourseRowActions.tsx.ejs +1 -22
- package/hedhog/frontend/app/courses/page.tsx.ejs +66 -13
- package/hedhog/frontend/app/enterprise/[id]/page.tsx.ejs +6 -0
- package/hedhog/frontend/app/enterprise/_components/enterprise-classes-calendar-tab.tsx.ejs +264 -0
- package/hedhog/frontend/app/enterprise/page.tsx.ejs +104 -47
- package/hedhog/frontend/app/exams/page.tsx.ejs +38 -4
- package/hedhog/frontend/app/instructors/page.tsx.ejs +87 -46
- package/hedhog/frontend/app/paths/page.tsx.ejs +650 -168
- package/hedhog/frontend/app/training/page.tsx.ejs +38 -4
- package/hedhog/frontend/messages/en.json +41 -12
- package/hedhog/frontend/messages/pt.json +44 -13
- package/hedhog/query/triggers.sql +33 -0
- package/hedhog/table/course_ai_usage.yaml +46 -0
- package/hedhog/table/course_enrollment.yaml +3 -0
- package/hedhog/table/course_lesson.yaml +3 -0
- package/hedhog/table/course_lesson_answer.yaml +37 -0
- package/hedhog/table/course_lesson_transcription_segment.yaml +8 -0
- package/hedhog/table/learning_path.yaml +6 -0
- package/hedhog/table/learning_path_module.yaml +22 -0
- package/hedhog/table/learning_path_step.yaml +9 -6
- package/hedhog/table/lesson_view_event.yaml +66 -0
- package/package.json +8 -7
- package/src/certificate/certificate.controller.ts +2 -0
- package/src/certificate/certificate.service.ts +99 -0
- package/src/course/course-ai-usage.service.ts +221 -0
- package/src/course/course-audio-transcription.service.ts +471 -43
- package/src/course/course-export-scorm12.service.ts +149 -5
- package/src/course/course-export.service.ts +1 -0
- package/src/course/course-lesson.controller.ts +59 -6
- package/src/course/course-structure.controller.ts +19 -1
- package/src/course/course-structure.service.ts +184 -10
- package/src/course/course-transcription-translation.service.ts +293 -0
- package/src/course/course-video-agent-pipeline.service.ts +471 -0
- package/src/course/course-video-hls.service.ts +30 -10
- package/src/course/course.module.ts +9 -0
- package/src/course/course.service.ts +46 -1
- package/src/course/dto/create-course-bulk-job.dto.ts +7 -3
- package/src/course/dto/create-course-export.dto.ts +6 -0
- package/src/course/ffmpeg.util.ts +65 -0
- package/src/course/lms-bulk-upload-automation.service.ts +33 -8
- package/src/course/lms-bulk-upload.service.ts +20 -1
- package/src/course/subtitle.util.ts +220 -0
- package/src/enterprise/training/training-student.service.ts +224 -4
- package/src/lesson-xp-map/lesson-xp-ai-calculation.service.ts +14 -0
- package/src/lesson-xp-map/lesson-xp-map.module.ts +2 -1
- package/src/lms.module.ts +14 -0
- package/src/platforma/dto/heartbeat.dto.ts +30 -0
- package/src/platforma/handlers/emit-certificate.handler.ts +117 -0
- package/src/platforma/handlers/lesson-heartbeat.handler.ts +343 -0
- package/src/platforma/platforma-heartbeat.service.ts +33 -0
- package/src/platforma/platforma-performance.service.ts +606 -0
- package/src/platforma/platforma-search.service.ts +48 -0
- package/src/platforma/platforma-video.service.ts +59 -3
- package/src/platforma/platforma.controller.ts +130 -0
- package/src/realtime/lms-realtime.controller.ts +27 -1
- package/src/realtime/lms-realtime.service.ts +2 -1
- package/src/training/dto/create-training.dto.ts +36 -0
- package/src/training/training.service.ts +360 -163
|
@@ -448,7 +448,7 @@ const STATUS_MAP: Record<
|
|
|
448
448
|
encerrada: { label: 'Encerrada', variant: 'outline' },
|
|
449
449
|
};
|
|
450
450
|
|
|
451
|
-
const
|
|
451
|
+
const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
|
|
452
452
|
const API_TRAINING_CACHE_KEY = 'lms:training:api-cache';
|
|
453
453
|
|
|
454
454
|
// ── Animations ────────────────────────────────────────────────────────────────
|
|
@@ -564,10 +564,44 @@ export default function TrainingPage() {
|
|
|
564
564
|
|
|
565
565
|
// Pagination
|
|
566
566
|
const [currentPage, setCurrentPage] = useState(1);
|
|
567
|
+
|
|
568
|
+
const { data: generalSettings } = useQuery<{
|
|
569
|
+
data: Array<{ slug: string; value: string }>;
|
|
570
|
+
}>({
|
|
571
|
+
queryKey: ['setting-group-general'],
|
|
572
|
+
queryFn: async () => {
|
|
573
|
+
const response = await request<{
|
|
574
|
+
data: Array<{ slug: string; value: string }>;
|
|
575
|
+
}>({
|
|
576
|
+
url: '/setting/group/general',
|
|
577
|
+
method: 'GET',
|
|
578
|
+
});
|
|
579
|
+
return response.data;
|
|
580
|
+
},
|
|
581
|
+
staleTime: 5 * 60 * 1000,
|
|
582
|
+
});
|
|
583
|
+
|
|
584
|
+
const pageSizeOptions = useMemo(() => {
|
|
585
|
+
const setting = generalSettings?.data?.find(
|
|
586
|
+
(s) => s.slug === 'pagination-page-sizes'
|
|
587
|
+
);
|
|
588
|
+
if (!setting?.value) return DEFAULT_PAGE_SIZES;
|
|
589
|
+
try {
|
|
590
|
+
const parsed = JSON.parse(setting.value) as string[];
|
|
591
|
+
const sizes = parsed
|
|
592
|
+
.map(Number)
|
|
593
|
+
.filter((n) => !isNaN(n) && n > 0)
|
|
594
|
+
.sort((a, b) => a - b);
|
|
595
|
+
return sizes.length > 0 ? sizes : DEFAULT_PAGE_SIZES;
|
|
596
|
+
} catch {
|
|
597
|
+
return DEFAULT_PAGE_SIZES;
|
|
598
|
+
}
|
|
599
|
+
}, [generalSettings]);
|
|
600
|
+
|
|
567
601
|
const [pageSize, setPageSize] = usePersistedPageSize({
|
|
568
602
|
storageKey: 'pagination:global:pageSize',
|
|
569
603
|
defaultValue: 12,
|
|
570
|
-
allowedValues:
|
|
604
|
+
allowedValues: pageSizeOptions,
|
|
571
605
|
});
|
|
572
606
|
|
|
573
607
|
const sensors = useSensors(
|
|
@@ -1490,7 +1524,7 @@ export default function TrainingPage() {
|
|
|
1490
1524
|
],
|
|
1491
1525
|
},
|
|
1492
1526
|
]}
|
|
1493
|
-
|
|
1527
|
+
actions={
|
|
1494
1528
|
<ViewModeToggle
|
|
1495
1529
|
viewMode={viewMode}
|
|
1496
1530
|
onViewModeChange={setViewMode}
|
|
@@ -1838,7 +1872,7 @@ export default function TrainingPage() {
|
|
|
1838
1872
|
setPageSize(nextPageSize);
|
|
1839
1873
|
setCurrentPage(1);
|
|
1840
1874
|
}}
|
|
1841
|
-
pageSizeOptions={
|
|
1875
|
+
pageSizeOptions={pageSizeOptions}
|
|
1842
1876
|
/>
|
|
1843
1877
|
</div>
|
|
1844
1878
|
)}
|
|
@@ -418,10 +418,17 @@
|
|
|
418
418
|
"xp": "XP",
|
|
419
419
|
"media": "Media",
|
|
420
420
|
"resources": "Resources",
|
|
421
|
-
"extra": "
|
|
421
|
+
"extra": "Certificate",
|
|
422
422
|
"publish": "Publish",
|
|
423
423
|
"videoProfiles": "Resolutions"
|
|
424
424
|
},
|
|
425
|
+
"issuedCertificates": {
|
|
426
|
+
"title": "Issued certificates",
|
|
427
|
+
"description": "Certificates already issued to students of this course.",
|
|
428
|
+
"empty": "No certificates issued for this course yet.",
|
|
429
|
+
"issuedAt": "Issued on",
|
|
430
|
+
"openPdf": "Open PDF"
|
|
431
|
+
},
|
|
425
432
|
"structureTab": {
|
|
426
433
|
"summary": {
|
|
427
434
|
"title": "Content summary",
|
|
@@ -555,6 +562,13 @@
|
|
|
555
562
|
"withTranscription": "With transcription",
|
|
556
563
|
"withXp": "With XP"
|
|
557
564
|
},
|
|
565
|
+
"videoPipeline": {
|
|
566
|
+
"title": "Video pipeline",
|
|
567
|
+
"description": "Video lessons by stage: total → has video → processed",
|
|
568
|
+
"total": "Video lessons",
|
|
569
|
+
"withVideo": "With video",
|
|
570
|
+
"withProcessedVideo": "Video processed"
|
|
571
|
+
},
|
|
558
572
|
"areas": {
|
|
559
573
|
"title": "Macro areas",
|
|
560
574
|
"description": "Areas mapped across lessons, ordered by XP weight"
|
|
@@ -588,7 +602,8 @@
|
|
|
588
602
|
"session": "At least one session created",
|
|
589
603
|
"lesson": "At least one lesson created",
|
|
590
604
|
"publishedLessons": "At least one lesson published",
|
|
591
|
-
"certificate": "Certificate template defined (when enabled)"
|
|
605
|
+
"certificate": "Certificate template defined (when enabled)",
|
|
606
|
+
"listed": "Course listed in catalog"
|
|
592
607
|
}
|
|
593
608
|
}
|
|
594
609
|
},
|
|
@@ -695,7 +710,9 @@
|
|
|
695
710
|
"published": "Published",
|
|
696
711
|
"active": "Active",
|
|
697
712
|
"draft": "Draft",
|
|
698
|
-
"archived": "Archived"
|
|
713
|
+
"archived": "Archived",
|
|
714
|
+
"listed": "Listed",
|
|
715
|
+
"unlisted": "Unlisted"
|
|
699
716
|
},
|
|
700
717
|
"table": {
|
|
701
718
|
"headers": {
|
|
@@ -927,14 +944,19 @@
|
|
|
927
944
|
"bulkEditor": {
|
|
928
945
|
"title": "Bulk edit",
|
|
929
946
|
"clearSelection": "Clear selection",
|
|
947
|
+
"apply": "Apply",
|
|
948
|
+
"more": "more",
|
|
930
949
|
"productionStatus": "Production status",
|
|
931
950
|
"keepCurrent": "Keep current",
|
|
932
|
-
"
|
|
951
|
+
"publishTitle": "Publication",
|
|
952
|
+
"publish": {
|
|
953
|
+
"on": "Publish",
|
|
954
|
+
"off": "Unpublish"
|
|
955
|
+
},
|
|
933
956
|
"moveToSession": "Move to session",
|
|
934
957
|
"selectSession": "Select session…",
|
|
935
|
-
"apiNotice": "Bulk changes are not integrated with the API yet. Click save to preview.",
|
|
936
958
|
"toast": {
|
|
937
|
-
"
|
|
959
|
+
"moving": "{count} lessons being moved…",
|
|
938
960
|
"none": "No change selected"
|
|
939
961
|
},
|
|
940
962
|
"types": {
|
|
@@ -949,11 +971,6 @@
|
|
|
949
971
|
"editada": "Edited",
|
|
950
972
|
"finalizada": "Finalized",
|
|
951
973
|
"publicada": "Published"
|
|
952
|
-
},
|
|
953
|
-
"visibility": {
|
|
954
|
-
"publico": "Public",
|
|
955
|
-
"privado": "Private",
|
|
956
|
-
"restrito": "Restricted"
|
|
957
974
|
}
|
|
958
975
|
},
|
|
959
976
|
"multiSelectBar": {
|
|
@@ -1169,7 +1186,7 @@
|
|
|
1169
1186
|
"update": "Update",
|
|
1170
1187
|
"save": "Save lesson",
|
|
1171
1188
|
"tabData": "Data",
|
|
1172
|
-
"tabVideos": "
|
|
1189
|
+
"tabVideos": "Video",
|
|
1173
1190
|
"tabAudios": "Audios",
|
|
1174
1191
|
"tabTranscription": "Transcription",
|
|
1175
1192
|
"tabResources": "Resources",
|
|
@@ -2084,6 +2101,7 @@
|
|
|
2084
2101
|
"selectAtLeastOneItem": "Select at least one item for the training.",
|
|
2085
2102
|
"selectAtLeastOneCourse": "Select at least one course for the training.",
|
|
2086
2103
|
"selectCoursesFromSelectedArea": "Select only courses from the selected area.",
|
|
2104
|
+
"modulesTitleRequired": "All modules must have a title.",
|
|
2087
2105
|
"openingFormacao": "Opening \"{nome}\"...",
|
|
2088
2106
|
"openingDetails": "Opening training..."
|
|
2089
2107
|
}
|
|
@@ -3049,6 +3067,17 @@
|
|
|
3049
3067
|
"cancel": "Cancel",
|
|
3050
3068
|
"delete": "Remove"
|
|
3051
3069
|
}
|
|
3070
|
+
},
|
|
3071
|
+
"viewMode": {
|
|
3072
|
+
"list": "Show as list",
|
|
3073
|
+
"cards": "Show as cards"
|
|
3074
|
+
},
|
|
3075
|
+
"table": {
|
|
3076
|
+
"name": "Name",
|
|
3077
|
+
"slug": "Slug",
|
|
3078
|
+
"status": "Status",
|
|
3079
|
+
"updatedAt": "Updated at",
|
|
3080
|
+
"actions": "Actions"
|
|
3052
3081
|
}
|
|
3053
3082
|
},
|
|
3054
3083
|
"ClassesPage": {
|
|
@@ -427,10 +427,17 @@
|
|
|
427
427
|
"xp": "XP",
|
|
428
428
|
"media": "Mídia",
|
|
429
429
|
"resources": "Recursos",
|
|
430
|
-
"extra": "
|
|
430
|
+
"extra": "Certificado",
|
|
431
431
|
"publish": "Publicação",
|
|
432
432
|
"videoProfiles": "Resoluções"
|
|
433
433
|
},
|
|
434
|
+
"issuedCertificates": {
|
|
435
|
+
"title": "Certificados emitidos",
|
|
436
|
+
"description": "Certificados já emitidos para os alunos deste curso.",
|
|
437
|
+
"empty": "Nenhum certificado emitido para este curso ainda.",
|
|
438
|
+
"issuedAt": "Emitido em",
|
|
439
|
+
"openPdf": "Abrir PDF"
|
|
440
|
+
},
|
|
434
441
|
"structureTab": {
|
|
435
442
|
"summary": {
|
|
436
443
|
"title": "Resumo do conteúdo",
|
|
@@ -564,6 +571,13 @@
|
|
|
564
571
|
"withTranscription": "Com transcrição",
|
|
565
572
|
"withXp": "Com XP"
|
|
566
573
|
},
|
|
574
|
+
"videoPipeline": {
|
|
575
|
+
"title": "Pipeline de vídeo",
|
|
576
|
+
"description": "Aulas de vídeo por estágio: total → com vídeo → processado",
|
|
577
|
+
"total": "Aulas de vídeo",
|
|
578
|
+
"withVideo": "Com vídeo",
|
|
579
|
+
"withProcessedVideo": "Vídeo processado"
|
|
580
|
+
},
|
|
567
581
|
"areas": {
|
|
568
582
|
"title": "Áreas macro",
|
|
569
583
|
"description": "Áreas mapeadas nas aulas, ordenadas por peso de XP"
|
|
@@ -597,7 +611,8 @@
|
|
|
597
611
|
"session": "Pelo menos uma sessão criada",
|
|
598
612
|
"lesson": "Pelo menos uma aula criada",
|
|
599
613
|
"publishedLessons": "Pelo menos uma aula publicada",
|
|
600
|
-
"certificate": "Modelo de certificado definido (quando habilitado)"
|
|
614
|
+
"certificate": "Modelo de certificado definido (quando habilitado)",
|
|
615
|
+
"listed": "Curso listado no catálogo"
|
|
601
616
|
}
|
|
602
617
|
}
|
|
603
618
|
},
|
|
@@ -704,7 +719,9 @@
|
|
|
704
719
|
"published": "Publicado",
|
|
705
720
|
"active": "Ativo",
|
|
706
721
|
"draft": "Rascunho",
|
|
707
|
-
"archived": "Arquivado"
|
|
722
|
+
"archived": "Arquivado",
|
|
723
|
+
"listed": "Listado",
|
|
724
|
+
"unlisted": "Não listado"
|
|
708
725
|
},
|
|
709
726
|
"table": {
|
|
710
727
|
"headers": {
|
|
@@ -936,14 +953,19 @@
|
|
|
936
953
|
"bulkEditor": {
|
|
937
954
|
"title": "Edição em massa",
|
|
938
955
|
"clearSelection": "Limpar seleção",
|
|
956
|
+
"apply": "Aplicar",
|
|
957
|
+
"more": "mais",
|
|
939
958
|
"productionStatus": "Status de produção",
|
|
940
959
|
"keepCurrent": "Manter atual",
|
|
941
|
-
"
|
|
960
|
+
"publishTitle": "Publicação",
|
|
961
|
+
"publish": {
|
|
962
|
+
"on": "Publicar",
|
|
963
|
+
"off": "Despublicar"
|
|
964
|
+
},
|
|
942
965
|
"moveToSession": "Mover para sessão",
|
|
943
966
|
"selectSession": "Selecionar sessão…",
|
|
944
|
-
"apiNotice": "As alterações em massa ainda não estão integradas com a API. Clique em salvar para ver a pré-visualização.",
|
|
945
967
|
"toast": {
|
|
946
|
-
"
|
|
968
|
+
"moving": "{count} aulas sendo movidas…",
|
|
947
969
|
"none": "Nenhuma alteração selecionada"
|
|
948
970
|
},
|
|
949
971
|
"types": {
|
|
@@ -958,11 +980,6 @@
|
|
|
958
980
|
"editada": "Editada",
|
|
959
981
|
"finalizada": "Finalizada",
|
|
960
982
|
"publicada": "Publicada"
|
|
961
|
-
},
|
|
962
|
-
"visibility": {
|
|
963
|
-
"publico": "Público",
|
|
964
|
-
"privado": "Privado",
|
|
965
|
-
"restrito": "Restrito"
|
|
966
983
|
}
|
|
967
984
|
},
|
|
968
985
|
"multiSelectBar": {
|
|
@@ -1178,7 +1195,7 @@
|
|
|
1178
1195
|
"update": "Atualizar",
|
|
1179
1196
|
"save": "Salvar aula",
|
|
1180
1197
|
"tabData": "Dados",
|
|
1181
|
-
"tabVideos": "
|
|
1198
|
+
"tabVideos": "Vídeo",
|
|
1182
1199
|
"tabAudios": "Áudios",
|
|
1183
1200
|
"tabTranscription": "Transcrição",
|
|
1184
1201
|
"tabResources": "Recursos",
|
|
@@ -2108,6 +2125,7 @@
|
|
|
2108
2125
|
"selectAtLeastOneItem": "Selecione pelo menos um item para a formação.",
|
|
2109
2126
|
"selectAtLeastOneCourse": "Selecione pelo menos um curso para a formação.",
|
|
2110
2127
|
"selectCoursesFromSelectedArea": "Selecione apenas cursos da área escolhida.",
|
|
2128
|
+
"modulesTitleRequired": "Todos os módulos precisam de um título.",
|
|
2111
2129
|
"openingFormacao": "Abrindo \"{nome}\"...",
|
|
2112
2130
|
"openingDetails": "Abrindo formação..."
|
|
2113
2131
|
}
|
|
@@ -3071,6 +3089,17 @@
|
|
|
3071
3089
|
"cancel": "Cancelar",
|
|
3072
3090
|
"delete": "Remover"
|
|
3073
3091
|
}
|
|
3092
|
+
},
|
|
3093
|
+
"viewMode": {
|
|
3094
|
+
"list": "Visualizar em lista",
|
|
3095
|
+
"cards": "Visualizar em cards"
|
|
3096
|
+
},
|
|
3097
|
+
"table": {
|
|
3098
|
+
"name": "Nome",
|
|
3099
|
+
"slug": "Slug",
|
|
3100
|
+
"status": "Status",
|
|
3101
|
+
"updatedAt": "Atualizado em",
|
|
3102
|
+
"actions": "Ações"
|
|
3074
3103
|
}
|
|
3075
3104
|
},
|
|
3076
3105
|
"ClassesPage": {
|
|
@@ -3152,7 +3181,8 @@
|
|
|
3152
3181
|
},
|
|
3153
3182
|
"viewMode": {
|
|
3154
3183
|
"list": "Visualizar em lista",
|
|
3155
|
-
"cards": "Visualizar em cards"
|
|
3184
|
+
"cards": "Visualizar em cards",
|
|
3185
|
+
"calendar": "Visualizar em calendário"
|
|
3156
3186
|
},
|
|
3157
3187
|
"pagination": {
|
|
3158
3188
|
"class": "turma",
|
|
@@ -4569,6 +4599,7 @@
|
|
|
4569
4599
|
"users": "Usuários",
|
|
4570
4600
|
"courses": "Cursos",
|
|
4571
4601
|
"classes": "Turmas",
|
|
4602
|
+
"classesCalendar": "Calendário de Turmas",
|
|
4572
4603
|
"billing": "Faturamento",
|
|
4573
4604
|
"students": "Alunos",
|
|
4574
4605
|
"administrators": "Administradores",
|
|
@@ -51,3 +51,36 @@ AFTER INSERT OR UPDATE OR DELETE
|
|
|
51
51
|
ON bitcode_wallet_transaction
|
|
52
52
|
FOR EACH ROW
|
|
53
53
|
EXECUTE FUNCTION sync_bitcode_wallet_balance();
|
|
54
|
+
|
|
55
|
+
-- Keeps course_lesson.has_transcription in sync so the course tree can show
|
|
56
|
+
-- the transcription indicator without loading each lesson's segments.
|
|
57
|
+
CREATE OR REPLACE FUNCTION fn_course_lesson_sync_has_transcription()
|
|
58
|
+
RETURNS TRIGGER
|
|
59
|
+
LANGUAGE plpgsql
|
|
60
|
+
AS $$
|
|
61
|
+
BEGIN
|
|
62
|
+
IF TG_OP = 'INSERT' THEN
|
|
63
|
+
UPDATE course_lesson
|
|
64
|
+
SET has_transcription = true
|
|
65
|
+
WHERE id = NEW.course_lesson_id
|
|
66
|
+
AND has_transcription = false;
|
|
67
|
+
ELSIF TG_OP = 'DELETE' THEN
|
|
68
|
+
UPDATE course_lesson
|
|
69
|
+
SET has_transcription = EXISTS (
|
|
70
|
+
SELECT 1 FROM course_lesson_transcription_segment
|
|
71
|
+
WHERE course_lesson_id = OLD.course_lesson_id
|
|
72
|
+
)
|
|
73
|
+
WHERE id = OLD.course_lesson_id;
|
|
74
|
+
END IF;
|
|
75
|
+
RETURN NULL;
|
|
76
|
+
END;
|
|
77
|
+
$$;
|
|
78
|
+
|
|
79
|
+
DROP TRIGGER IF EXISTS trg_course_lesson_segment_has_transcription
|
|
80
|
+
ON course_lesson_transcription_segment;
|
|
81
|
+
|
|
82
|
+
CREATE TRIGGER trg_course_lesson_segment_has_transcription
|
|
83
|
+
AFTER INSERT OR DELETE
|
|
84
|
+
ON course_lesson_transcription_segment
|
|
85
|
+
FOR EACH ROW
|
|
86
|
+
EXECUTE FUNCTION fn_course_lesson_sync_has_transcription();
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: course_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: course
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: course_lesson_id
|
|
10
|
+
type: fk
|
|
11
|
+
isNullable: true
|
|
12
|
+
references:
|
|
13
|
+
table: course_lesson
|
|
14
|
+
column: id
|
|
15
|
+
onDelete: SET NULL
|
|
16
|
+
- name: job_type
|
|
17
|
+
type: enum
|
|
18
|
+
values: [transcription, translation, xp_calculation]
|
|
19
|
+
- name: provider
|
|
20
|
+
type: varchar
|
|
21
|
+
length: 50
|
|
22
|
+
- name: model
|
|
23
|
+
type: varchar
|
|
24
|
+
length: 100
|
|
25
|
+
- name: input_tokens
|
|
26
|
+
type: int
|
|
27
|
+
isNullable: true
|
|
28
|
+
- name: output_tokens
|
|
29
|
+
type: int
|
|
30
|
+
isNullable: true
|
|
31
|
+
- name: audio_seconds
|
|
32
|
+
type: decimal
|
|
33
|
+
precision: 12
|
|
34
|
+
scale: 3
|
|
35
|
+
isNullable: true
|
|
36
|
+
- name: cost_usd
|
|
37
|
+
type: decimal
|
|
38
|
+
precision: 12
|
|
39
|
+
scale: 6
|
|
40
|
+
default: 0
|
|
41
|
+
- type: created_at
|
|
42
|
+
|
|
43
|
+
indices:
|
|
44
|
+
- columns: [course_id]
|
|
45
|
+
- columns: [course_id, job_type]
|
|
46
|
+
- columns: [course_lesson_id]
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: user_id
|
|
4
|
+
type: int
|
|
5
|
+
- name: course_lesson_id
|
|
6
|
+
type: fk
|
|
7
|
+
references:
|
|
8
|
+
table: course_lesson
|
|
9
|
+
column: id
|
|
10
|
+
onDelete: CASCADE
|
|
11
|
+
- name: question_id
|
|
12
|
+
type: fk
|
|
13
|
+
references:
|
|
14
|
+
table: question
|
|
15
|
+
column: id
|
|
16
|
+
onDelete: CASCADE
|
|
17
|
+
- name: exam_option_id
|
|
18
|
+
type: fk
|
|
19
|
+
isNullable: true
|
|
20
|
+
references:
|
|
21
|
+
table: exam_option
|
|
22
|
+
column: id
|
|
23
|
+
onDelete: SET NULL
|
|
24
|
+
- name: answer_text
|
|
25
|
+
type: text
|
|
26
|
+
isNullable: true
|
|
27
|
+
- name: is_correct
|
|
28
|
+
type: boolean
|
|
29
|
+
isNullable: true
|
|
30
|
+
- type: created_at
|
|
31
|
+
- type: updated_at
|
|
32
|
+
|
|
33
|
+
indices:
|
|
34
|
+
- columns: [user_id, course_lesson_id, question_id]
|
|
35
|
+
isUnique: true
|
|
36
|
+
- columns: [course_lesson_id]
|
|
37
|
+
- columns: [question_id]
|
|
@@ -6,6 +6,13 @@ columns:
|
|
|
6
6
|
table: course_lesson
|
|
7
7
|
column: id
|
|
8
8
|
onDelete: CASCADE
|
|
9
|
+
- name: locale_id
|
|
10
|
+
type: fk
|
|
11
|
+
isNullable: true
|
|
12
|
+
references:
|
|
13
|
+
table: locale
|
|
14
|
+
column: id
|
|
15
|
+
onDelete: SET NULL
|
|
9
16
|
- name: start_seconds
|
|
10
17
|
type: NUMERIC(10,3)
|
|
11
18
|
default: 0
|
|
@@ -19,4 +26,5 @@ columns:
|
|
|
19
26
|
|
|
20
27
|
indices:
|
|
21
28
|
- columns: [course_lesson_id]
|
|
29
|
+
- columns: [course_lesson_id, locale_id]
|
|
22
30
|
- columns: [course_lesson_id, start_seconds]
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: learning_path_id
|
|
4
|
+
type: fk
|
|
5
|
+
references:
|
|
6
|
+
table: learning_path
|
|
7
|
+
column: id
|
|
8
|
+
onDelete: CASCADE
|
|
9
|
+
- name: title
|
|
10
|
+
type: varchar
|
|
11
|
+
length: 255
|
|
12
|
+
- name: description
|
|
13
|
+
type: text
|
|
14
|
+
isNullable: true
|
|
15
|
+
- type: order
|
|
16
|
+
- type: created_at
|
|
17
|
+
- type: updated_at
|
|
18
|
+
|
|
19
|
+
indices:
|
|
20
|
+
- columns: [learning_path_id]
|
|
21
|
+
- columns: [learning_path_id, order]
|
|
22
|
+
isUnique: true
|
|
@@ -6,6 +6,12 @@ columns:
|
|
|
6
6
|
table: learning_path
|
|
7
7
|
column: id
|
|
8
8
|
onDelete: CASCADE
|
|
9
|
+
- name: learning_path_module_id
|
|
10
|
+
type: fk
|
|
11
|
+
references:
|
|
12
|
+
table: learning_path_module
|
|
13
|
+
column: id
|
|
14
|
+
onDelete: CASCADE
|
|
9
15
|
- name: step_type
|
|
10
16
|
type: enum
|
|
11
17
|
values: [course, exam]
|
|
@@ -31,13 +37,10 @@ columns:
|
|
|
31
37
|
- type: updated_at
|
|
32
38
|
|
|
33
39
|
indices:
|
|
34
|
-
- columns: [learning_path_id, order]
|
|
35
|
-
isUnique: true
|
|
36
|
-
- columns: [learning_path_id, course_id]
|
|
37
|
-
isUnique: true
|
|
38
|
-
- columns: [learning_path_id, exam_id]
|
|
39
|
-
isUnique: true
|
|
40
40
|
- columns: [learning_path_id]
|
|
41
|
+
- columns: [learning_path_module_id]
|
|
42
|
+
- columns: [learning_path_module_id, order]
|
|
43
|
+
isUnique: true
|
|
41
44
|
- columns: [step_type]
|
|
42
45
|
- columns: [course_id]
|
|
43
46
|
- columns: [exam_id]
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
columns:
|
|
2
|
+
- type: pk
|
|
3
|
+
- name: user_id
|
|
4
|
+
type: int
|
|
5
|
+
isNullable: true
|
|
6
|
+
- name: course_lesson_id
|
|
7
|
+
type: fk
|
|
8
|
+
isNullable: true
|
|
9
|
+
references:
|
|
10
|
+
table: course_lesson
|
|
11
|
+
column: id
|
|
12
|
+
onDelete: SET NULL
|
|
13
|
+
- name: course_enrollment_id
|
|
14
|
+
type: fk
|
|
15
|
+
isNullable: true
|
|
16
|
+
references:
|
|
17
|
+
table: course_enrollment
|
|
18
|
+
column: id
|
|
19
|
+
onDelete: SET NULL
|
|
20
|
+
- name: session_id
|
|
21
|
+
type: varchar
|
|
22
|
+
length: 36
|
|
23
|
+
isNullable: true
|
|
24
|
+
- name: video_position_seconds
|
|
25
|
+
type: int
|
|
26
|
+
default: 0
|
|
27
|
+
- name: ip
|
|
28
|
+
type: varchar
|
|
29
|
+
length: 45
|
|
30
|
+
isNullable: true
|
|
31
|
+
- name: country
|
|
32
|
+
type: varchar
|
|
33
|
+
length: 2
|
|
34
|
+
isNullable: true
|
|
35
|
+
- name: city
|
|
36
|
+
type: varchar
|
|
37
|
+
length: 100
|
|
38
|
+
isNullable: true
|
|
39
|
+
- name: browser
|
|
40
|
+
type: varchar
|
|
41
|
+
length: 50
|
|
42
|
+
isNullable: true
|
|
43
|
+
- name: os
|
|
44
|
+
type: varchar
|
|
45
|
+
length: 50
|
|
46
|
+
isNullable: true
|
|
47
|
+
- name: device_type
|
|
48
|
+
type: varchar
|
|
49
|
+
length: 20
|
|
50
|
+
isNullable: true
|
|
51
|
+
- name: screen_width
|
|
52
|
+
type: int
|
|
53
|
+
isNullable: true
|
|
54
|
+
- name: screen_height
|
|
55
|
+
type: int
|
|
56
|
+
isNullable: true
|
|
57
|
+
- name: is_touch
|
|
58
|
+
type: boolean
|
|
59
|
+
default: false
|
|
60
|
+
- type: created_at
|
|
61
|
+
|
|
62
|
+
indices:
|
|
63
|
+
- columns: [user_id, created_at]
|
|
64
|
+
- columns: [course_lesson_id, created_at]
|
|
65
|
+
- columns: [created_at]
|
|
66
|
+
- columns: [course_enrollment_id]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hed-hog/lms",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.370",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"dependencies": {
|
|
@@ -17,13 +17,14 @@
|
|
|
17
17
|
"@hed-hog/api-locale": "0.0.14",
|
|
18
18
|
"@hed-hog/api-pagination": "0.0.7",
|
|
19
19
|
"@hed-hog/api-types": "0.0.1",
|
|
20
|
-
"@hed-hog/category": "0.0.365",
|
|
21
|
-
"@hed-hog/crm": "0.0.365",
|
|
22
20
|
"@hed-hog/api": "0.0.8",
|
|
23
|
-
"@hed-hog/
|
|
24
|
-
"@hed-hog/
|
|
25
|
-
"@hed-hog/
|
|
26
|
-
"@hed-hog/
|
|
21
|
+
"@hed-hog/category": "0.0.370",
|
|
22
|
+
"@hed-hog/crm": "0.0.370",
|
|
23
|
+
"@hed-hog/commerce": "0.0.370",
|
|
24
|
+
"@hed-hog/finance": "0.0.370",
|
|
25
|
+
"@hed-hog/core": "0.0.370",
|
|
26
|
+
"@hed-hog/queue": "0.0.370",
|
|
27
|
+
"@hed-hog/agent": "0.0.370"
|
|
27
28
|
},
|
|
28
29
|
"exports": {
|
|
29
30
|
".": {
|
|
@@ -78,12 +78,14 @@ export class LmsCertificateController {
|
|
|
78
78
|
@Query('pageSize') pageSize?: string,
|
|
79
79
|
@Query('search') search?: string,
|
|
80
80
|
@Query('type') type?: string,
|
|
81
|
+
@Query('courseId') courseId?: string,
|
|
81
82
|
) {
|
|
82
83
|
return this.certificateService.listIssued({
|
|
83
84
|
page: page ? Number(page) : 1,
|
|
84
85
|
pageSize: pageSize ? Number(pageSize) : 12,
|
|
85
86
|
search,
|
|
86
87
|
type,
|
|
88
|
+
courseId: courseId ? Number(courseId) : undefined,
|
|
87
89
|
});
|
|
88
90
|
}
|
|
89
91
|
|