diff --git a/admin-compliance/lib/sdk/training/api.ts b/admin-compliance/lib/sdk/training/api.ts index 8d2e50d..2fb4f26 100644 --- a/admin-compliance/lib/sdk/training/api.ts +++ b/admin-compliance/lib/sdk/training/api.ts @@ -292,11 +292,11 @@ export async function getModuleMedia(moduleId: string): Promise<{ media: Trainin } export async function getMediaURL(mediaId: string): Promise<{ bucket: string; object_key: string; mime_type: string }> { - return apiFetch(`/media/module/${mediaId}/url`) + return apiFetch(`/media/${mediaId}/url`) } export async function publishMedia(mediaId: string, publish?: boolean): Promise<{ status: string; is_published: boolean }> { - return apiFetch(`/media/module/${mediaId}/publish`, { + return apiFetch(`/media/${mediaId}/publish`, { method: 'POST', body: JSON.stringify({ publish: publish !== false }), }) diff --git a/ai-compliance-sdk/cmd/server/main.go b/ai-compliance-sdk/cmd/server/main.go index 66254c3..6e7efa7 100644 --- a/ai-compliance-sdk/cmd/server/main.go +++ b/ai-compliance-sdk/cmd/server/main.go @@ -519,15 +519,26 @@ func main() { trainingRoutes.POST("/content/generate-all", trainingHandlers.GenerateAllContent) trainingRoutes.POST("/content/generate-all-quiz", trainingHandlers.GenerateAllQuizzes) trainingRoutes.GET("/content/:moduleId", trainingHandlers.GetContent) - trainingRoutes.POST("/content/:id/publish", trainingHandlers.PublishContent) + // PublishContent expects c.Param("id") but route uses :moduleId for Gin compatibility + trainingRoutes.POST("/content/:moduleId/publish", func(c *gin.Context) { + c.Params = append(c.Params, gin.Param{Key: "id", Value: c.Param("moduleId")}) + trainingHandlers.PublishContent(c) + }) // Media (Audio/Video via TTS Service) trainingRoutes.POST("/content/:moduleId/generate-audio", trainingHandlers.GenerateAudio) trainingRoutes.POST("/content/:moduleId/generate-video", trainingHandlers.GenerateVideo) trainingRoutes.POST("/content/:moduleId/preview-script", trainingHandlers.PreviewVideoScript) trainingRoutes.GET("/media/module/:moduleId", trainingHandlers.GetModuleMedia) - trainingRoutes.GET("/media/:id/url", trainingHandlers.GetMediaURL) - trainingRoutes.POST("/media/:id/publish", trainingHandlers.PublishMedia) + // Media detail routes use :mediaId consistently + trainingRoutes.GET("/media/:mediaId/url", func(c *gin.Context) { + c.Params = append(c.Params, gin.Param{Key: "id", Value: c.Param("mediaId")}) + trainingHandlers.GetMediaURL(c) + }) + trainingRoutes.POST("/media/:mediaId/publish", func(c *gin.Context) { + c.Params = append(c.Params, gin.Param{Key: "id", Value: c.Param("mediaId")}) + trainingHandlers.PublishMedia(c) + }) // Deadlines & Escalation trainingRoutes.GET("/deadlines", trainingHandlers.GetDeadlines)