---
name: reference_quick_lesson
description: «Быстрый урок» — одиночный урок без курса через скрытый личный курс-контейнер (is_personal)
metadata: 
  node_type: memory
  type: reference
  originSessionId: 60467058-b40e-4bd9-9f7f-d1e362e8039a
---

Одиночного урока без курса в системе нет: `lessons.course_id NOT NULL`, `POST /api/lessons`
требует courseId. Решено через **личный курс-контейнер** (сделано 2026-06-03, commit 6be8a50).

- Миграция 059: `courses.is_personal INTEGER DEFAULT 0` (ADD COLUMN).
- `POST /api/lessons/quick` (teacher/admin, `lessonController.quickLesson`): get-or-create
  контейнер `WHERE created_by=? AND is_personal=1` (subject_slug='personal', title='Мои материалы',
  is_published=1, один на учителя) → создаёт урок → `{lessonId, courseId}`.
- Фронт: кнопка «Быстрый урок» в каталоге `theory.html` (рядом с «Новый курс», видна
  teacher/admin) → POST /quick → редирект `/lesson-editor.html?id=<lessonId>`.
- `courseController.list` СКРЫВАЕТ `is_personal=1` из каталога для всех, кроме владельца
  (`AND (c.is_personal=0 OR c.created_by=?)`; студентам — всегда `is_personal=0`).
- Учитель видит свои быстрые уроки как курс «Мои материалы» (открыв его в каталоге).
- Доступ ученикам: контейнер опубликован, но урок надо ОПУБЛИКОВАТЬ (per-lesson) + доступ
  к курсу-контейнеру идёт через обычный content_access/класс (см. [[project_content_access]]).
  Standalone-урок на уровне схемы (course_id NULL) — НЕ делали (был выбран этот лёгкий путь).
