diff --git a/gen/db/compat_course_management.go b/gen/db/compat_course_management.go index a8e3a4d..8d3e78e 100644 --- a/gen/db/compat_course_management.go +++ b/gen/db/compat_course_management.go @@ -43,6 +43,11 @@ func (q *Queries) DeleteSubModuleCompat(ctx context.Context, id int64) error { return err } +func (q *Queries) DeleteModuleCompat(ctx context.Context, id int64) error { + _, err := q.db.Exec(ctx, `DELETE FROM modules WHERE id = $1`, id) + return err +} + func (q *Queries) UpdateSubModuleVideoCompat(ctx context.Context, id int64, title string, description string, videoURL string) error { _, err := q.db.Exec(ctx, ` UPDATE sub_module_videos diff --git a/internal/web_server/handlers/hierarchy_handler.go b/internal/web_server/handlers/hierarchy_handler.go index c6c7208..abfa101 100644 --- a/internal/web_server/handlers/hierarchy_handler.go +++ b/internal/web_server/handlers/hierarchy_handler.go @@ -865,6 +865,18 @@ func (h *Handler) DeleteSubModule(c *fiber.Ctx) error { return c.JSON(domain.Response{Message: "Sub-module deleted"}) } +func (h *Handler) DeleteModule(c *fiber.Ctx) error { + moduleID, err := strconv.ParseInt(c.Params("moduleId"), 10, 64) + if err != nil || moduleID <= 0 { + return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{Message: "Invalid module ID", Error: "moduleId must be a positive integer"}) + } + + if err := h.analyticsDB.DeleteModuleCompat(c.Context(), moduleID); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{Message: "Failed to delete module", Error: err.Error()}) + } + return c.JSON(domain.Response{Message: "Module deleted"}) +} + func (h *Handler) UpdateSubModuleVideo(c *fiber.Ctx) error { videoID, err := strconv.ParseInt(c.Params("videoId"), 10, 64) if err != nil || videoID <= 0 { diff --git a/internal/web_server/routes.go b/internal/web_server/routes.go index e4db791..15b1af7 100644 --- a/internal/web_server/routes.go +++ b/internal/web_server/routes.go @@ -92,6 +92,7 @@ func (a *App) initAppRoutes() { groupV1.Delete("/course-management/sub-categories/:subCategoryId", a.authMiddleware, a.RequirePermission("course_categories.delete"), h.DeleteCourseSubCategory) groupV1.Post("/course-management/levels", a.authMiddleware, a.RequirePermission("subcourses.create"), h.CreateLevel) groupV1.Post("/course-management/modules", a.authMiddleware, a.RequirePermission("subcourses.create"), h.CreateModule) + groupV1.Delete("/course-management/modules/:moduleId", a.authMiddleware, a.RequirePermission("subcourses.delete"), h.DeleteModule) groupV1.Post("/course-management/sub-modules", a.authMiddleware, a.RequirePermission("subcourses.create"), h.CreateSubModule) groupV1.Put("/course-management/sub-modules/:subModuleId", a.authMiddleware, a.RequirePermission("subcourses.update"), h.UpdateSubModule) groupV1.Delete("/course-management/sub-modules/:subModuleId", a.authMiddleware, a.RequirePermission("subcourses.delete"), h.DeleteSubModule)