fix(academy): use proxy path instead of unreachable localhost:8093
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 35s
CI / test-python-backend-compliance (push) Successful in 28s
CI / test-python-document-crawler (push) Successful in 26s
CI / test-python-dsms-gateway (push) Successful in 19s

The Academy API client was using NEXT_PUBLIC_SDK_API_URL with fallback
to http://localhost:8093, which is unreachable from the browser. Changed
to use the existing Next.js proxy at /api/sdk/v1/academy/.
This commit is contained in:
Benjamin Admin
2026-02-25 23:42:25 +01:00
parent 6e715fbd28
commit 76038c43fd

View File

@@ -26,7 +26,7 @@ import {
// CONFIGURATION // CONFIGURATION
// ============================================================================= // =============================================================================
const ACADEMY_API_BASE = process.env.NEXT_PUBLIC_SDK_API_URL || 'http://localhost:8093' const ACADEMY_API_BASE = '/api/sdk/v1/academy'
const API_TIMEOUT = 30000 // 30 seconds const API_TIMEOUT = 30000 // 30 seconds
// ============================================================================= // =============================================================================
@@ -111,7 +111,7 @@ async function fetchWithTimeout<T>(
*/ */
export async function fetchCourses(): Promise<Course[]> { export async function fetchCourses(): Promise<Course[]> {
return fetchWithTimeout<Course[]>( return fetchWithTimeout<Course[]>(
`${ACADEMY_API_BASE}/api/v1/academy/courses` `${ACADEMY_API_BASE}/courses`
) )
} }
@@ -120,7 +120,7 @@ export async function fetchCourses(): Promise<Course[]> {
*/ */
export async function fetchCourse(id: string): Promise<Course> { export async function fetchCourse(id: string): Promise<Course> {
return fetchWithTimeout<Course>( return fetchWithTimeout<Course>(
`${ACADEMY_API_BASE}/api/v1/academy/courses/${id}` `${ACADEMY_API_BASE}/courses/${id}`
) )
} }
@@ -129,7 +129,7 @@ export async function fetchCourse(id: string): Promise<Course> {
*/ */
export async function createCourse(request: CourseCreateRequest): Promise<Course> { export async function createCourse(request: CourseCreateRequest): Promise<Course> {
return fetchWithTimeout<Course>( return fetchWithTimeout<Course>(
`${ACADEMY_API_BASE}/api/v1/academy/courses`, `${ACADEMY_API_BASE}/courses`,
{ {
method: 'POST', method: 'POST',
body: JSON.stringify(request) body: JSON.stringify(request)
@@ -142,7 +142,7 @@ export async function createCourse(request: CourseCreateRequest): Promise<Course
*/ */
export async function updateCourse(id: string, update: CourseUpdateRequest): Promise<Course> { export async function updateCourse(id: string, update: CourseUpdateRequest): Promise<Course> {
return fetchWithTimeout<Course>( return fetchWithTimeout<Course>(
`${ACADEMY_API_BASE}/api/v1/academy/courses/${id}`, `${ACADEMY_API_BASE}/courses/${id}`,
{ {
method: 'PUT', method: 'PUT',
body: JSON.stringify(update) body: JSON.stringify(update)
@@ -155,7 +155,7 @@ export async function updateCourse(id: string, update: CourseUpdateRequest): Pro
*/ */
export async function deleteCourse(id: string): Promise<void> { export async function deleteCourse(id: string): Promise<void> {
await fetchWithTimeout<void>( await fetchWithTimeout<void>(
`${ACADEMY_API_BASE}/api/v1/academy/courses/${id}`, `${ACADEMY_API_BASE}/courses/${id}`,
{ {
method: 'DELETE' method: 'DELETE'
} }
@@ -175,7 +175,7 @@ export async function fetchEnrollments(courseId?: string): Promise<Enrollment[]>
params.set('courseId', courseId) params.set('courseId', courseId)
} }
const queryString = params.toString() const queryString = params.toString()
const url = `${ACADEMY_API_BASE}/api/v1/academy/enrollments${queryString ? `?${queryString}` : ''}` const url = `${ACADEMY_API_BASE}/enrollments${queryString ? `?${queryString}` : ''}`
return fetchWithTimeout<Enrollment[]>(url) return fetchWithTimeout<Enrollment[]>(url)
} }
@@ -185,7 +185,7 @@ export async function fetchEnrollments(courseId?: string): Promise<Enrollment[]>
*/ */
export async function enrollUser(request: EnrollUserRequest): Promise<Enrollment> { export async function enrollUser(request: EnrollUserRequest): Promise<Enrollment> {
return fetchWithTimeout<Enrollment>( return fetchWithTimeout<Enrollment>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments`, `${ACADEMY_API_BASE}/enrollments`,
{ {
method: 'POST', method: 'POST',
body: JSON.stringify(request) body: JSON.stringify(request)
@@ -198,7 +198,7 @@ export async function enrollUser(request: EnrollUserRequest): Promise<Enrollment
*/ */
export async function updateProgress(enrollmentId: string, update: UpdateProgressRequest): Promise<Enrollment> { export async function updateProgress(enrollmentId: string, update: UpdateProgressRequest): Promise<Enrollment> {
return fetchWithTimeout<Enrollment>( return fetchWithTimeout<Enrollment>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments/${enrollmentId}/progress`, `${ACADEMY_API_BASE}/enrollments/${enrollmentId}/progress`,
{ {
method: 'PUT', method: 'PUT',
body: JSON.stringify(update) body: JSON.stringify(update)
@@ -211,7 +211,7 @@ export async function updateProgress(enrollmentId: string, update: UpdateProgres
*/ */
export async function completeEnrollment(enrollmentId: string): Promise<Enrollment> { export async function completeEnrollment(enrollmentId: string): Promise<Enrollment> {
return fetchWithTimeout<Enrollment>( return fetchWithTimeout<Enrollment>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments/${enrollmentId}/complete`, `${ACADEMY_API_BASE}/enrollments/${enrollmentId}/complete`,
{ {
method: 'POST' method: 'POST'
} }
@@ -227,7 +227,7 @@ export async function completeEnrollment(enrollmentId: string): Promise<Enrollme
*/ */
export async function fetchCertificate(id: string): Promise<Certificate> { export async function fetchCertificate(id: string): Promise<Certificate> {
return fetchWithTimeout<Certificate>( return fetchWithTimeout<Certificate>(
`${ACADEMY_API_BASE}/api/v1/academy/certificates/${id}` `${ACADEMY_API_BASE}/certificates/${id}`
) )
} }
@@ -236,7 +236,7 @@ export async function fetchCertificate(id: string): Promise<Certificate> {
*/ */
export async function generateCertificate(enrollmentId: string): Promise<Certificate> { export async function generateCertificate(enrollmentId: string): Promise<Certificate> {
return fetchWithTimeout<Certificate>( return fetchWithTimeout<Certificate>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments/${enrollmentId}/certificate`, `${ACADEMY_API_BASE}/enrollments/${enrollmentId}/certificate`,
{ {
method: 'POST' method: 'POST'
} }
@@ -252,7 +252,7 @@ export async function generateCertificate(enrollmentId: string): Promise<Certifi
*/ */
export async function submitQuiz(lessonId: string, answers: SubmitQuizRequest): Promise<SubmitQuizResponse> { export async function submitQuiz(lessonId: string, answers: SubmitQuizRequest): Promise<SubmitQuizResponse> {
return fetchWithTimeout<SubmitQuizResponse>( return fetchWithTimeout<SubmitQuizResponse>(
`${ACADEMY_API_BASE}/api/v1/academy/lessons/${lessonId}/quiz`, `${ACADEMY_API_BASE}/lessons/${lessonId}/quiz`,
{ {
method: 'POST', method: 'POST',
body: JSON.stringify(answers) body: JSON.stringify(answers)
@@ -269,7 +269,7 @@ export async function submitQuiz(lessonId: string, answers: SubmitQuizRequest):
*/ */
export async function fetchAcademyStatistics(): Promise<AcademyStatistics> { export async function fetchAcademyStatistics(): Promise<AcademyStatistics> {
return fetchWithTimeout<AcademyStatistics>( return fetchWithTimeout<AcademyStatistics>(
`${ACADEMY_API_BASE}/api/v1/academy/statistics` `${ACADEMY_API_BASE}/statistics`
) )
} }