# План доработок конструктора курса --- ## 📊 Текущее состояние ### ✅ Реализовано: - Форма создания курса (название, описание, уровень) - Vditor редактор с русской локализацией и поддержкой KaTeX - Структура модулей (добавление, редактирование, удаление) - Автосохранение в localStorage - Загрузка файлов на бэкенд - Рендеринг markdown на сервере ### ❌ Не реализовано: - Создание/сохранение курсов через API (publishCourse — демо) - Загрузка существующего курса для редактирования - Синхронизация модулей с БД (только localStorage) - API для создания модулей, уроков, шагов - Валидация контента перед публикацией - Управление черновиками (несколько курсов) - Восстановление черновиков --- ## 🎯 ЭТАП 1: Базовый функционал создания курсов (ПРИОРИТЕТ) ### Задачи: #### 1.1 **API для создания курса** ``` POST /api/course-builder/create - title, description, level, content (markdown) - response: Course с id ``` | Backend | Схема | Priority | |---------|-------|----------| | Создать endpoint в `routes/course_builder.py` | `CourseCreateRequest` schema | P0 | | Реализовать CRUD операции в `crud.py` | `create_course_with_content()` | P0 | - Связать с автором (current_user.id) #### 1.2 **Фронтенд: Реализовать publishCourse** ``` - Заменить демо на API вызов - Сохранение структуры модулей - Очистка формы после успеха ``` | Компонент | Функция | Priority | |-----------|--------|----------| | `courseBuilder.js`, publishCourse() | API вызов на `/api/course-builder/create` | P0 | | | Отправка structure.modules | P0 | - Обработка ошибок (ошибки валидации) #### 1.3 **API для сохранения черновика** ``` POST /api/course-builder/save-draft - content (markdown) - structure (modules, lessons, steps) - duration - response: { draft_id, saved_at } ``` | Endpoint | CRUD | Priority | |----------|------|----------| | Добавить в `course_builder.py` | `save_draft()` | P1 | - Связать с current_user #### 1.4 **API для загрузки черновика** ``` GET /api/course-builder/drafts GET /api/course-builder/drafts/{draft_id} ``` --- ## 🔗 ЭТАП 2: Управление структурой курса ### Задачи: #### 2.1 **API для создания модулей** ``` POST /api/course-builder/modules - course_id, title, description, duration, order_index - response: Module ``` #### 2.2 **API для создания уроков** ``` POST /api/course-builder/lessons - module_id, title, description, order_index - response: Lesson ``` #### 2.3 **API для создания шагов** ``` POST /api/course-builder/steps - lesson_id, step_type, title, content, order_index - response: Step ``` #### 2.4 **Frontend: Синхронизация с БД** ``` - Сохранять module/lesson после создания - Обновлять courseStructure при редактировании - Удалять из БД при удалении модуля ``` --- ## 📋 ЭТАП 3: Редактирование существующих курсов ### Задачи: #### 3.1 **API для загрузки курса для редактирования** ``` GET /api/course-builder/courses/{course_id}/edit - return: { title, description, level, content, structure } ``` #### 3.2 **Frontend: Загрузка существующего курса** ``` - Добавить параметр ?course_id=123 в route - Запрос данных при входе - Заполнять форму и редактор - Отображать структуру ``` #### 3.3 **API для обновления курса** ``` PUT /api/course-builder/courses/{course_id} - обновление: title, description, level, content - response: Course ``` #### 3.4 **API для обновления модулей/уроков** ``` PUT /api/course-builder/modules/{module_id} PUT /api/course-builder/lessons/{lesson_id} PUT /api/course-builder/steps/{step_id} DELETE /api/{modules|lessons|steps}/{id} ``` --- ## 🔍 ЭТАП 4: Валидация и безопасность ### Задачи: #### 4.1 **Валидация на бэкенде** ``` - Схемы Pydantic для всех API запросов - Проверка обязательных полей - Ограничение длины полей - Валидация содержимого markdown (размер) ``` #### 4.2 **Проверки доступа** ``` - Проверка авторства курса при редактировании - Доступ только к своим的课程 - Проверка авторизации при всех операциях ``` #### 4.3 **Rate limiting** ``` - Ограничение количества создаваемых курсов - Ограничение размера загружаемых файлов - Ограничение количества модулей/уроков ``` --- ## 💾 ЭТАП 5: Улучшения UX ### Задачи: #### 5.1 **Управление черновиками** ``` DELETE /api/course-builder/drafts/{id} GET /api/course-builder/drafts (с пагинацией) - Фронтенд: список черновиков ``` #### 5.2 **Автосохранение с индикацией** ``` - Индикатор сохранения (last saved at...) - Лайв preview контента - Быстрая вставка модулей (drag & drop) ``` #### 5.3 **Медиа библиотека** ``` - Список загруженных файлов - Вставка в редактор по клику - Управление файлами (удаление) ``` --- ## 🚀 ЭТАП 6: Продвинутые функции (опционально) ### Задачи: #### 6.1 **Клонирование курсов** ``` POST /api/course-builder/courses/{id}/clone - Создает копию курса ``` #### 6.2 **Импорт/экспорт** ``` - Экспорт курса в JSON/ZIP - Импорт курса из файла ``` #### 6.3 **Коллаборация** (будущее) ``` - Совместная редактирование - История изменений - Версионирование контента ``` --- ## 📝 Рекомендуемый порядок реализации | Этап | Приоритет | Сложность | Ожидаемое время | |---|---|---|---| | **Этап 1.1** | P0 | Низкая | 2-3 часа | | **Этап 1.2** | P0 | Средняя | 2-3 часа | | **Этап 1.3** | P1 | Низкая | 1-2 часа | | **Этап 1.4** | P1 | Низкая | 1 час | | **Этап 2** | P1 | Средняя | 3-4 часа | | **Этап 3** | P2 | Средняя | 4-5 часов | | **Этап 4** | P2 | Средняя | 2-3 часа | | **Этап 5** | P3 | Средняя | 4-5 часов | | **Этап 6** | P4 | Высокая | TBD | --- ## ❓ Вопросы для уточнения 1. **С приоритетом хотите начать?** - С минимального функционала (быстро, базовое) - С полного функционала (медленно, полноценно) 2. **Нужно ли:** - Версионирование редакций курса? - Автосохранение с откатом? - Публикация без модерации? Соблюдение одного этапа за один раз или сразу запускать полную разработку?