Files
classroomio/apps/api/src/routes/course/compliance.ts
T
2026-04-27 11:40:38 +01:00

136 lines
3.6 KiB
TypeScript

import {
ZCourseComplianceExtend,
ZCourseComplianceLearnerParam,
ZCourseComplianceParam,
ZCourseComplianceReset,
ZCourseComplianceWaive
} from '@cio/utils/validation/course/compliance';
import {
extendCourseCompliance,
getCourseComplianceOverview,
getLearnerComplianceHistory,
resetCourseCompliance,
waiveCourseCompliance
} from '@api/services/course/compliance';
import { Hono } from '@api/utils/hono';
import { authMiddleware } from '@api/middlewares/auth';
import { courseMemberMiddleware } from '@api/middlewares/course-member';
import { courseTeamMemberMiddleware } from '@api/middlewares/course-team-member';
import { handleError } from '@api/utils/errors';
import { zValidator } from '@hono/zod-validator';
export const complianceRouter = new Hono()
.get('/', authMiddleware, courseTeamMemberMiddleware, zValidator('param', ZCourseComplianceParam), async (c) => {
try {
const { courseId } = c.req.valid('param');
const data = await getCourseComplianceOverview(courseId);
return c.json(
{
success: true,
data
},
200
);
} catch (error) {
return handleError(c, error, 'Failed to fetch course compliance overview');
}
})
.get(
'/learners/:profileId',
authMiddleware,
courseMemberMiddleware,
zValidator('param', ZCourseComplianceLearnerParam),
async (c) => {
try {
const { courseId, profileId } = c.req.valid('param');
const user = c.get('user')!;
const data = await getLearnerComplianceHistory(courseId, user.id, profileId);
return c.json(
{
success: true,
data
},
200
);
} catch (error) {
return handleError(c, error, 'Failed to fetch learner compliance history');
}
}
)
.post(
'/reset',
authMiddleware,
courseTeamMemberMiddleware,
zValidator('param', ZCourseComplianceParam),
zValidator('json', ZCourseComplianceReset),
async (c) => {
try {
const { courseId } = c.req.valid('param');
const payload = c.req.valid('json');
const data = await resetCourseCompliance(courseId, payload);
return c.json(
{
success: true,
data
},
200
);
} catch (error) {
return handleError(c, error, 'Failed to reset course compliance');
}
}
)
.post(
'/extend',
authMiddleware,
courseTeamMemberMiddleware,
zValidator('param', ZCourseComplianceParam),
zValidator('json', ZCourseComplianceExtend),
async (c) => {
try {
const { courseId } = c.req.valid('param');
const payload = c.req.valid('json');
const data = await extendCourseCompliance(courseId, payload);
return c.json(
{
success: true,
data
},
200
);
} catch (error) {
return handleError(c, error, 'Failed to extend course compliance');
}
}
)
.post(
'/waive',
authMiddleware,
courseTeamMemberMiddleware,
zValidator('param', ZCourseComplianceParam),
zValidator('json', ZCourseComplianceWaive),
async (c) => {
try {
const { courseId } = c.req.valid('param');
const payload = c.req.valid('json');
const user = c.get('user')!;
const data = await waiveCourseCompliance(courseId, user.id, payload);
return c.json(
{
success: true,
data
},
200
);
} catch (error) {
return handleError(c, error, 'Failed to waive course compliance');
}
}
);