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

8.1 KiB
Raw Blame History

План доработок конструктора курса


📊 Текущее состояние

Реализовано:

  • Форма создания курса (название, описание, уровень)
  • 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. Нужно ли:

    • Версионирование редакций курса?
    • Автосохранение с откатом?
    • Публикация без модерации?

Соблюдение одного этапа за один раз или сразу запускать полную разработку?