feat(lessons): ListVideos — плоский endpoint для раздела «Видео-уроки»
LessonRepository.ListVideos: SELECT с INNER JOIN courses, фильтр
video_key != '' + (course.is_published OR course.owner_user_id = viewer).
Возвращает LessonWithCourse — урок + denorm course_{title,slug,
is_published,owner_user_id} чтобы фронт сгруппировал по курсу
без N+1.
LessonHandler.ListVideos: GET /lessons?has_video=true. Гейт уже на
SQL-уровне, в коде только X-User-Id из headers.
Route регистрируется ДО /lessons/{id}, иначе chi бы заматчил
{id}="lessons".
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -123,6 +123,10 @@ func main() {
|
||||
r.Get("/courses/{courseId}/lessons", lessonH.ListByCourse)
|
||||
r.Post("/courses/{courseId}/lessons", lessonH.Create)
|
||||
r.Post("/courses/{courseId}/lessons/reorder", lessonH.Reorder)
|
||||
// Flat-список уроков с видео для отдельной страницы «Видео-уроки».
|
||||
// has_video=true игнорируется — у нас только этот режим; флаг
|
||||
// зарезервирован для будущего фильтра «и без видео тоже».
|
||||
r.Get("/lessons", lessonH.ListVideos)
|
||||
r.Get("/lessons/{id}", lessonH.Get)
|
||||
r.Patch("/lessons/{id}", lessonH.Update)
|
||||
r.Delete("/lessons/{id}", lessonH.Delete)
|
||||
|
||||
Reference in New Issue
Block a user