add sub-category deletion endpoint for course management
Introduce a compatibility delete route and handler for course sub-categories and cascade-delete their linked courses to support admin content cleanup flows. Made-with: Cursor
This commit is contained in:
parent
0cc813d224
commit
9123ff571d
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user