MCPcopy Create free account
hub / github.com/adcontextprotocol/adcp / createCertificationRouters

Function createCertificationRouters

server/src/routes/certification.ts:44–1052  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

42 * and orgRouter (mounted at /api/organizations).
43 */
44export function createCertificationRouters() {
45 const publicRouter = Router();
46 const userRouter = Router();
47 const orgRouter = Router();
48
49 // =====================================================
50 // PUBLIC ROUTES (/api/certification/*)
51 // =====================================================
52
53 // GET /api/certification/tracks — list all tracks with module summaries
54 publicRouter.get('/tracks', async (_req, res) => {
55 try {
56 const tracks = await certDb.getTracks();
57 const modules = await certDb.getModules();
58
59 const tracksWithModules = tracks.map(track => ({
60 ...track,
61 modules: modules
62 .filter(m => m.track_id === track.id)
63 .map(m => ({
64 id: m.id,
65 title: m.title,
66 description: m.description,
67 format: m.format,
68 duration_minutes: m.duration_minutes,
69 is_free: m.is_free,
70 prerequisites: m.prerequisites,
71 sort_order: m.sort_order,
72 })),
73 }));
74
75 res.json({ tracks: tracksWithModules });
76 } catch (error) {
77 logger.error({ error }, 'Failed to get certification tracks');
78 res.status(500).json({ error: 'Internal server error' });
79 }
80 });
81
82 // GET /api/certification/modules/:id — module detail
83 publicRouter.get('/modules/:id', optionalAuth, async (req, res) => {
84 try {
85 const mod = await certDb.getModule(req.params.id);
86 if (!mod) {
87 return res.status(404).json({ error: 'Module not found' });
88 }
89
90 const isAuthenticated = !!req.user;
91 if (isAuthenticated) {
92 await enrichUserWithMembership(req.user as any);
93 }
94 const isMember = isAuthenticated && (req.user as any).isMember;
95
96 // Omit lesson plan and exercise details for gated modules if not a member
97 if (!mod.is_free && !isMember) {
98 return res.json({
99 ...mod,
100 lesson_plan: null,
101 exercise_definitions: null,

Callers 1

setupRoutesMethod · 0.85

Calls 14

enrichUserWithMembershipFunction · 0.85
isUuidFunction · 0.85
notifyUserFunction · 0.85
isCertifierConfiguredFunction · 0.85
getCredentialBadgeUrlFunction · 0.85
issueCredentialFunction · 0.85
hasMethod · 0.80
warnMethod · 0.80
addMethod · 0.80
deleteMethod · 0.80
isOrgMemberFunction · 0.70
trimMethod · 0.65

Tested by

no test coverage detected