diff --git a/gen/db/compat_course_management.go b/gen/db/compat_course_management.go index 0688beb..a8e3a4d 100644 --- a/gen/db/compat_course_management.go +++ b/gen/db/compat_course_management.go @@ -166,3 +166,13 @@ RETURNING id, category_id, title, description, is_active, thumbnail, intro_video } return i, nil } + +func (q *Queries) DeleteCourseSubCategoryCompat(ctx context.Context, subCategoryID int64) error { + _, err := q.db.Exec(ctx, `DELETE FROM courses WHERE sub_category_id = $1`, subCategoryID) + if err != nil { + return err + } + + _, err = q.db.Exec(ctx, `DELETE FROM course_sub_categories WHERE id = $1`, subCategoryID) + return err +} diff --git a/internal/web_server/handlers/hierarchy_handler.go b/internal/web_server/handlers/hierarchy_handler.go index 7bbdb93..c6c7208 100644 --- a/internal/web_server/handlers/hierarchy_handler.go +++ b/internal/web_server/handlers/hierarchy_handler.go @@ -569,6 +569,19 @@ func (h *Handler) CreateCourseSubCategory(c *fiber.Ctx) error { return c.Status(fiber.StatusCreated).JSON(domain.Response{Message: "Course sub-category created", Data: created}) } +func (h *Handler) DeleteCourseSubCategory(c *fiber.Ctx) error { + subCategoryID, err := strconv.ParseInt(c.Params("subCategoryId"), 10, 64) + if err != nil || subCategoryID <= 0 { + return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{Message: "Invalid sub-category ID", Error: "subCategoryId must be a positive integer"}) + } + + if err := h.analyticsDB.DeleteCourseSubCategoryCompat(c.Context(), subCategoryID); err != nil { + return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{Message: "Failed to delete sub-category", Error: err.Error()}) + } + + return c.JSON(domain.Response{Message: "Course sub-category deleted"}) +} + // CreateLevel godoc // @Summary Create level // @Description Creates a CEFR level under a course diff --git a/internal/web_server/routes.go b/internal/web_server/routes.go index 3e44337..e4db791 100644 --- a/internal/web_server/routes.go +++ b/internal/web_server/routes.go @@ -89,6 +89,7 @@ func (a *App) initAppRoutes() { groupV1.Get("/course-management/human-language/hierarchy", a.authMiddleware, a.RequirePermission("learning_tree.get"), h.UnifiedHierarchy) groupV1.Get("/course-management/courses/:courseId/hierarchy", a.authMiddleware, a.RequirePermission("learning_tree.get"), h.UnifiedHierarchyByCourse) groupV1.Post("/course-management/sub-categories", a.authMiddleware, a.RequirePermission("course_categories.create"), h.CreateCourseSubCategory) + 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.Post("/course-management/sub-modules", a.authMiddleware, a.RequirePermission("subcourses.create"), h.CreateSubModule)