add course category deletion endpoint
Expose delete support for top-level course categories and cascade removal of linked sub-categories/courses for content-management cleanup. Made-with: Cursor
This commit is contained in:
parent
542a597f41
commit
83f5541650
|
|
@ -181,3 +181,18 @@ func (q *Queries) DeleteCourseSubCategoryCompat(ctx context.Context, subCategory
|
||||||
_, err = q.db.Exec(ctx, `DELETE FROM course_sub_categories WHERE id = $1`, subCategoryID)
|
_, err = q.db.Exec(ctx, `DELETE FROM course_sub_categories WHERE id = $1`, subCategoryID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *Queries) DeleteCourseCategoryCompat(ctx context.Context, categoryID int64) error {
|
||||||
|
_, err := q.db.Exec(ctx, `DELETE FROM courses WHERE category_id = $1`, categoryID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = q.db.Exec(ctx, `DELETE FROM course_sub_categories WHERE category_id = $1`, categoryID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = q.db.Exec(ctx, `DELETE FROM course_categories WHERE id = $1`, categoryID)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -219,6 +219,19 @@ func (h *Handler) CreateCourseCategory(c *fiber.Ctx) error {
|
||||||
return c.Status(fiber.StatusCreated).JSON(domain.Response{Message: "Course category created", Data: created})
|
return c.Status(fiber.StatusCreated).JSON(domain.Response{Message: "Course category created", Data: created})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *Handler) DeleteCourseCategory(c *fiber.Ctx) error {
|
||||||
|
categoryID, err := strconv.ParseInt(c.Params("categoryId"), 10, 64)
|
||||||
|
if err != nil || categoryID <= 0 {
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{Message: "Invalid category ID", Error: "categoryId must be a positive integer"})
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := h.analyticsDB.DeleteCourseCategoryCompat(c.Context(), categoryID); err != nil {
|
||||||
|
return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{Message: "Failed to delete category", Error: err.Error()})
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(domain.Response{Message: "Course category deleted"})
|
||||||
|
}
|
||||||
|
|
||||||
// CreateCourse godoc
|
// CreateCourse godoc
|
||||||
// @Summary Create course
|
// @Summary Create course
|
||||||
// @Description Legacy-compatible endpoint for creating a course
|
// @Description Legacy-compatible endpoint for creating a course
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,7 @@ func (a *App) initAppRoutes() {
|
||||||
// Unified Course Management (single hierarchy model)
|
// Unified Course Management (single hierarchy model)
|
||||||
groupV1.Get("/course-management/categories", a.authMiddleware, a.RequirePermission("learning_tree.get"), h.ListCourseCategories)
|
groupV1.Get("/course-management/categories", a.authMiddleware, a.RequirePermission("learning_tree.get"), h.ListCourseCategories)
|
||||||
groupV1.Post("/course-management/categories", a.authMiddleware, a.RequirePermission("course_categories.create"), h.CreateCourseCategory)
|
groupV1.Post("/course-management/categories", a.authMiddleware, a.RequirePermission("course_categories.create"), h.CreateCourseCategory)
|
||||||
|
groupV1.Delete("/course-management/categories/:categoryId", a.authMiddleware, a.RequirePermission("course_categories.delete"), h.DeleteCourseCategory)
|
||||||
groupV1.Post("/course-management/courses", a.authMiddleware, a.RequirePermission("courses.create"), h.CreateCourse)
|
groupV1.Post("/course-management/courses", a.authMiddleware, a.RequirePermission("courses.create"), h.CreateCourse)
|
||||||
groupV1.Put("/course-management/courses/:courseId", a.authMiddleware, a.RequirePermission("courses.update"), h.UpdateCourse)
|
groupV1.Put("/course-management/courses/:courseId", a.authMiddleware, a.RequirePermission("courses.update"), h.UpdateCourse)
|
||||||
groupV1.Delete("/course-management/courses/:courseId", a.authMiddleware, a.RequirePermission("courses.delete"), h.DeleteCourse)
|
groupV1.Delete("/course-management/courses/:courseId", a.authMiddleware, a.RequirePermission("courses.delete"), h.DeleteCourse)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user