feat: optional include_inactive for sub-module lessons list
GET .../sub-modules/:id/lessons?include_inactive=true returns all lessons; default remains active-only. Made-with: Cursor
This commit is contained in:
parent
3e54b5039d
commit
bbd919ca12
|
|
@ -89,6 +89,12 @@ WHERE sub_module_id = $1
|
||||||
AND is_active = TRUE
|
AND is_active = TRUE
|
||||||
ORDER BY display_order ASC, id ASC;
|
ORDER BY display_order ASC, id ASC;
|
||||||
|
|
||||||
|
-- name: GetSubModuleLessonsAll :many
|
||||||
|
SELECT *
|
||||||
|
FROM sub_module_lessons
|
||||||
|
WHERE sub_module_id = $1
|
||||||
|
ORDER BY display_order ASC, id ASC;
|
||||||
|
|
||||||
-- name: GetSubModuleLessonByID :one
|
-- name: GetSubModuleLessonByID :one
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM sub_module_lessons
|
FROM sub_module_lessons
|
||||||
|
|
|
||||||
|
|
@ -1469,6 +1469,46 @@ func (q *Queries) GetSubModuleLessons(ctx context.Context, subModuleID int64) ([
|
||||||
return items, nil
|
return items, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const GetSubModuleLessonsAll = `-- name: GetSubModuleLessonsAll :many
|
||||||
|
SELECT id, sub_module_id, display_order, is_active, created_at, title, description, thumbnail, teaching_text, teaching_image_url, teaching_audio_url, teaching_video_url
|
||||||
|
FROM sub_module_lessons
|
||||||
|
WHERE sub_module_id = $1
|
||||||
|
ORDER BY display_order ASC, id ASC
|
||||||
|
`
|
||||||
|
|
||||||
|
func (q *Queries) GetSubModuleLessonsAll(ctx context.Context, subModuleID int64) ([]SubModuleLesson, error) {
|
||||||
|
rows, err := q.db.Query(ctx, GetSubModuleLessonsAll, subModuleID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
var items []SubModuleLesson
|
||||||
|
for rows.Next() {
|
||||||
|
var i SubModuleLesson
|
||||||
|
if err := rows.Scan(
|
||||||
|
&i.ID,
|
||||||
|
&i.SubModuleID,
|
||||||
|
&i.DisplayOrder,
|
||||||
|
&i.IsActive,
|
||||||
|
&i.CreatedAt,
|
||||||
|
&i.Title,
|
||||||
|
&i.Description,
|
||||||
|
&i.Thumbnail,
|
||||||
|
&i.TeachingText,
|
||||||
|
&i.TeachingImageUrl,
|
||||||
|
&i.TeachingAudioUrl,
|
||||||
|
&i.TeachingVideoUrl,
|
||||||
|
); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, i)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
const GetSubModulePracticeByID = `-- name: GetSubModulePracticeByID :one
|
const GetSubModulePracticeByID = `-- name: GetSubModulePracticeByID :one
|
||||||
SELECT
|
SELECT
|
||||||
smp.id,
|
smp.id,
|
||||||
|
|
|
||||||
|
|
@ -1817,11 +1817,12 @@ func (h *Handler) CreateSubModuleLesson(c *fiber.Ctx) error {
|
||||||
|
|
||||||
// GetSubModuleLessons godoc
|
// GetSubModuleLessons godoc
|
||||||
// @Summary Get lessons under sub-module
|
// @Summary Get lessons under sub-module
|
||||||
// @Description Returns all active lessons for a sub-module (teaching content metadata)
|
// @Description Returns lessons for a sub-module. By default only active lessons; pass include_inactive=true to include inactive rows (e.g. admin / CMS).
|
||||||
// @Tags course-management
|
// @Tags course-management
|
||||||
// @Accept json
|
// @Accept json
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param subModuleId path int true "Sub-module ID"
|
// @Param subModuleId path int true "Sub-module ID"
|
||||||
|
// @Param include_inactive query bool false "Include inactive lessons"
|
||||||
// @Success 200 {object} domain.Response
|
// @Success 200 {object} domain.Response
|
||||||
// @Failure 400 {object} domain.ErrorResponse
|
// @Failure 400 {object} domain.ErrorResponse
|
||||||
// @Failure 500 {object} domain.ErrorResponse
|
// @Failure 500 {object} domain.ErrorResponse
|
||||||
|
|
@ -1835,7 +1836,12 @@ func (h *Handler) GetSubModuleLessons(c *fiber.Ctx) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
lessons, err := h.analyticsDB.GetSubModuleLessons(c.Context(), subModuleID)
|
var lessons []dbgen.SubModuleLesson
|
||||||
|
if c.QueryBool("include_inactive", false) {
|
||||||
|
lessons, err = h.analyticsDB.GetSubModuleLessonsAll(c.Context(), subModuleID)
|
||||||
|
} else {
|
||||||
|
lessons, err = h.analyticsDB.GetSubModuleLessons(c.Context(), subModuleID)
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
|
return c.Status(fiber.StatusInternalServerError).JSON(domain.ErrorResponse{
|
||||||
Message: "Failed to get sub-module lessons",
|
Message: "Failed to get sub-module lessons",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user