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
// =============================================================================
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
// =============================================================================
@@ -111,7 +111,7 @@ async function fetchWithTimeout<T>(
*/
export async function fetchCourses(): Promise<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> {
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> {
return fetchWithTimeout<Course>(
`${ACADEMY_API_BASE}/api/v1/academy/courses`,
`${ACADEMY_API_BASE}/courses`,
{
method: 'POST',
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> {
return fetchWithTimeout<Course>(
`${ACADEMY_API_BASE}/api/v1/academy/courses/${id}`,
`${ACADEMY_API_BASE}/courses/${id}`,
{
method: 'PUT',
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> {
await fetchWithTimeout<void>(
`${ACADEMY_API_BASE}/api/v1/academy/courses/${id}`,
`${ACADEMY_API_BASE}/courses/${id}`,
{
method: 'DELETE'
}
@@ -175,7 +175,7 @@ export async function fetchEnrollments(courseId?: string): Promise<Enrollment[]>
params.set('courseId', courseId)
}
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)
}
@@ -185,7 +185,7 @@ export async function fetchEnrollments(courseId?: string): Promise<Enrollment[]>
*/
export async function enrollUser(request: EnrollUserRequest): Promise<Enrollment> {
return fetchWithTimeout<Enrollment>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments`,
`${ACADEMY_API_BASE}/enrollments`,
{
method: 'POST',
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> {
return fetchWithTimeout<Enrollment>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments/${enrollmentId}/progress`,
`${ACADEMY_API_BASE}/enrollments/${enrollmentId}/progress`,
{
method: 'PUT',
body: JSON.stringify(update)
@@ -211,7 +211,7 @@ export async function updateProgress(enrollmentId: string, update: UpdateProgres
*/
export async function completeEnrollment(enrollmentId: string): Promise<Enrollment> {
return fetchWithTimeout<Enrollment>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments/${enrollmentId}/complete`,
`${ACADEMY_API_BASE}/enrollments/${enrollmentId}/complete`,
{
method: 'POST'
}
@@ -227,7 +227,7 @@ export async function completeEnrollment(enrollmentId: string): Promise<Enrollme
*/
export async function fetchCertificate(id: string): Promise<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> {
return fetchWithTimeout<Certificate>(
`${ACADEMY_API_BASE}/api/v1/academy/enrollments/${enrollmentId}/certificate`,
`${ACADEMY_API_BASE}/enrollments/${enrollmentId}/certificate`,
{
method: 'POST'
}
@@ -252,7 +252,7 @@ export async function generateCertificate(enrollmentId: string): Promise<Certifi
*/
export async function submitQuiz(lessonId: string, answers: SubmitQuizRequest): Promise<SubmitQuizResponse> {
return fetchWithTimeout<SubmitQuizResponse>(
`${ACADEMY_API_BASE}/api/v1/academy/lessons/${lessonId}/quiz`,
`${ACADEMY_API_BASE}/lessons/${lessonId}/quiz`,
{
method: 'POST',
body: JSON.stringify(answers)
@@ -269,7 +269,7 @@ export async function submitQuiz(lessonId: string, answers: SubmitQuizRequest):
*/
export async function fetchAcademyStatistics(): Promise<AcademyStatistics> {
return fetchWithTimeout<AcademyStatistics>(
`${ACADEMY_API_BASE}/api/v1/academy/statistics`
`${ACADEMY_API_BASE}/statistics`
)
}