feat(training): register training routes and add missing academy API functions

Connect the existing training engine handlers (40+ endpoints) to the router
in main.go. This was the critical blocker preventing the training content
pipeline from being accessible. Also adds generateCourse, generateVideos,
and getVideoStatus functions to the academy API client, plus the
GenerateCourseRequest type.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-02-26 09:46:16 +01:00
parent 76038c43fd
commit e5cb5e37ad
3 changed files with 120 additions and 0 deletions

View File

@@ -10,6 +10,7 @@ import {
CourseCategory,
CourseCreateRequest,
CourseUpdateRequest,
GenerateCourseRequest,
Enrollment,
EnrollmentStatus,
EnrollmentListResponse,
@@ -273,6 +274,52 @@ export async function fetchAcademyStatistics(): Promise<AcademyStatistics> {
)
}
// =============================================================================
// COURSE GENERATION (via Training Engine)
// =============================================================================
/**
* KI-gestuetzten Kurs generieren (nutzt intern Training Content Pipeline)
*/
export async function generateCourse(request: GenerateCourseRequest): Promise<Course> {
return fetchWithTimeout<Course>(
`${ACADEMY_API_BASE}/courses/generate`,
{
method: 'POST',
body: JSON.stringify(request)
},
120000 // 2 min timeout for LLM generation
)
}
/**
* Videos fuer alle Lektionen eines Kurses generieren
*/
export async function generateVideos(courseId: string): Promise<{ status: string; jobId?: string }> {
return fetchWithTimeout<{ status: string; jobId?: string }>(
`${ACADEMY_API_BASE}/courses/${courseId}/generate-videos`,
{
method: 'POST'
},
300000 // 5 min timeout for video generation
)
}
/**
* Video-Generierungsstatus abrufen
*/
export async function getVideoStatus(courseId: string): Promise<{
status: string
total: number
completed: number
failed: number
videos: Array<{ lessonId: string; status: string; url?: string }>
}> {
return fetchWithTimeout(
`${ACADEMY_API_BASE}/courses/${courseId}/video-status`
)
}
// =============================================================================
// SDK PROXY FUNCTION (wraps fetchCourses + fetchAcademyStatistics)
// =============================================================================

View File

@@ -215,6 +215,15 @@ export interface CourseUpdateRequest {
requiredForRoles?: string[]
}
export interface GenerateCourseRequest {
title: string
category: CourseCategory
description?: string
regulationArea?: string
language?: string
durationMinutes?: number
}
export interface EnrollUserRequest {
courseId: string
userId: string