Старт
This commit is contained in:
254
plan130226.md
Normal file
254
plan130226.md
Normal file
@@ -0,0 +1,254 @@
|
||||
# План доработок конструктора курса
|
||||
|
||||
---
|
||||
|
||||
## 📊 Текущее состояние
|
||||
|
||||
### ✅ Реализовано:
|
||||
- Форма создания курса (название, описание, уровень)
|
||||
- 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. **Нужно ли:**
|
||||
- Версионирование редакций курса?
|
||||
- Автосохранение с откатом?
|
||||
- Публикация без модерации?
|
||||
|
||||
Соблюдение одного этапа за один раз или сразу запускать полную разработку?
|
||||
Reference in New Issue
Block a user