2025-10-29 09:57:29 +01:00
|
|
|
import { TCourseClone,TCourseDownloadContent, TCertificateDownload, ZCertificateDownload, ZCourseDownloadContent } from '$src/types/course';
|
2025-09-21 19:35:41 +01:00
|
|
|
|
|
|
|
|
import { Hono } from 'hono';
|
|
|
|
|
import { generateCertificate } from '$src/utils/certificate';
|
|
|
|
|
import { generateCoursePdf } from '$src/utils/course';
|
|
|
|
|
import { katexRouter } from '$src/routes/course/katex';
|
|
|
|
|
import { lessonRouter } from '$src/routes/course/lesson';
|
|
|
|
|
import { presignRouter } from '$src/routes/course/presign';
|
2025-10-29 09:57:29 +01:00
|
|
|
import { cloneRouter } from '$src/routes/course/clone';
|
2025-09-21 19:35:41 +01:00
|
|
|
import { zValidator } from '@hono/zod-validator';
|
|
|
|
|
|
|
|
|
|
export const courseRouter = new Hono()
|
|
|
|
|
.post('/download/certificate', zValidator('json', ZCertificateDownload), async (c) => {
|
2025-10-29 09:57:29 +01:00
|
|
|
const validatedData = (c.req.valid as (key: 'json') => TCertificateDownload)('json');
|
2025-09-21 19:35:41 +01:00
|
|
|
|
|
|
|
|
const result = await generateCertificate(validatedData);
|
|
|
|
|
|
|
|
|
|
c.header('Content-Type', 'application/pdf');
|
|
|
|
|
c.header(
|
|
|
|
|
'Content-Disposition',
|
|
|
|
|
`attachment; filename="certificate-${validatedData.courseName}.pdf"`
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return c.body(
|
|
|
|
|
new ReadableStream({
|
|
|
|
|
start(controller) {
|
|
|
|
|
controller.enqueue(result);
|
|
|
|
|
controller.close();
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.post('/download/content', zValidator('json', ZCourseDownloadContent), async (c) => {
|
2025-10-29 09:57:29 +01:00
|
|
|
const validatedData = (c.req.valid as (key: 'json') => TCourseDownloadContent)('json');
|
2025-09-21 19:35:41 +01:00
|
|
|
|
|
|
|
|
const pdfBuffer = await generateCoursePdf(validatedData);
|
|
|
|
|
|
|
|
|
|
c.header('Content-Type', 'application/pdf');
|
|
|
|
|
|
|
|
|
|
return c.body(
|
|
|
|
|
new ReadableStream({
|
|
|
|
|
start(controller) {
|
|
|
|
|
controller.enqueue(pdfBuffer);
|
|
|
|
|
controller.close();
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
);
|
|
|
|
|
})
|
|
|
|
|
.route('/katex', katexRouter)
|
|
|
|
|
.route('/lesson', lessonRouter)
|
2025-10-29 09:57:29 +01:00
|
|
|
.route('/presign', presignRouter)
|
|
|
|
|
.route('/clone', cloneRouter);
|