Files
pyisu/plan130226.md
2026-03-13 14:39:43 +08:00

254 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# План доработок конструктора курса
---
## 📊 Текущее состояние
### ✅ Реализовано:
- Форма создания курса (название, описание, уровень)
- 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. **Нужно ли:**
- Версионирование редакций курса?
- Автосохранение с откатом?
- Публикация без модерации?
Соблюдение одного этапа за один раз или сразу запускать полную разработку?