Phase 7: deployment, data import, UI hardening and security fixes
Docker/prod deployment:
- multi-stage Dockerfile (JDK21 build, JRE21 run), docker-compose.prod.yml,
nginx config for lms.our-place.ru, deploy.sh; DEPLOY/IMPORT guides (UI flow)
- Fix Docker 401: LMS_JWT_JWK_SET_URI for academic/progress; forward-headers
Variant distribution (lab page only):
- round-robin by student level, shared random queue across selected groups,
least-used variants, manual pins always preserved; occupied/dup labels
- setup page: single form + one «Сохранить всё», batch level/variant for
selected students (checkboxes)
Grades, defense, materials:
- publication gate + comment lists; defense CSV import (2/3 cols, quotes)
- additional task after defense ("начать заново"); enroll/unenroll students
from group page; temporary-password lock (no navigation until changed) and
persistent "Смена пароля"; forced change once
- chapter page /learn/{c}; header: LMS home, Войти, user -> dashboard,
compact theme toggle; responsive mobile header
- markdown: single newlines are soft breaks; highlight.js with light/dark themes
- lab/content imports ZIP-only (lab.yaml+README+variants/assets,
chapters tree+assets); duplicate lab numbers rejected; variant ordering
and date defaults honored
Fixes:
- 500 on student create (@MapsId set before persist); broken dialogs/JS refs in group page
This commit is contained in:
78
deploy/IMPORT.md
Normal file
78
deploy/IMPORT.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Порядок наполнения LMS данными (через интерфейс)
|
||||
|
||||
Всё делается в админке, порядок: администратор → группы и студенты → лабораторная →
|
||||
раздача вариантов → защита → материалы.
|
||||
|
||||
## Шаг 1. Деплой
|
||||
|
||||
См. [`DEPLOY.md`](DEPLOY.md): Docker + nginx + HTTPS. После старта сервисов
|
||||
откройте домен — попадёте на `/setup`, создайте администратора (логин и пароль
|
||||
храните в секрете, в репозиторий их не писать).
|
||||
|
||||
## Шаг 2. Группы и студенты
|
||||
|
||||
**Группы → Импорт** — загрузите `.xls`/`.xlsx`/`.csv` со списком группы
|
||||
(столбцы: «Студенческий номер», «Фамилия Имя Отчество», «Основа обучения»).
|
||||
Название группы берётся из файла или указывается при импорте. Логином студента
|
||||
становится студенческий номер, пароль генерируется (временный, с обязательной
|
||||
сменой при первом входе).
|
||||
|
||||
Дальше по каждому студенту при необходимости:
|
||||
* **«Сбросить пароль»** — выдать новый временный пароль;
|
||||
* **«Добавить существующего»** — перевести студента из другой группы;
|
||||
* **«Отчислить из группы»** — убрать из группы (аккаунт и данные сохраняются).
|
||||
|
||||
Выгрузить логины: **«Логины XLSX» / «CSV»**.
|
||||
|
||||
## Шаг 3. Лабораторная
|
||||
|
||||
**Лабораторные → Импорт** — ZIP со структурой:
|
||||
|
||||
```text
|
||||
lab.yaml # номер, название, points_max, уровни (code/title), сроки, статус
|
||||
README.md # общее условие (markdown)
|
||||
variants/01.md # вариант: front-matter (level, number, title) + текст задания
|
||||
```
|
||||
|
||||
Примеры — в личном рабочем каталоге (не в репозитории). После импорта на
|
||||
странице лабораторной:
|
||||
|
||||
* «Настроить» — срок сдачи, дата защиты, максимум баллов, статус;
|
||||
* уровни/варианты можно править и добавлять прямо там же.
|
||||
|
||||
## Шаг 4. Раздача вариантов
|
||||
|
||||
На странице лабораторной — **«Распределить»**: выбрать группы, при необходимости
|
||||
«пересоздать заново». Логика: случайная очередь по всем вариантам выбранного
|
||||
уровня; без повторов, пока в уровне есть невыданные варианты; закрепленные
|
||||
вручную не трогаются. Частично/точно — в списке назначений (уровень и вариант по
|
||||
каждому студенту) или массово чекбоксами.
|
||||
|
||||
## Шаг 5. Оценки и защита
|
||||
|
||||
На странице группы (матрица):
|
||||
|
||||
* **«опубликовать оценки»** — показать/скрыть оценки и комментарии студентам;
|
||||
* **«поставить оценку»** — балл + комментарии (позитивный/негативный/нейтральный);
|
||||
* раздел «Индивидуальные задания (защита)»: «Назначить задание» или импорт CSV
|
||||
(`студент;ЛР;задание` или `студент;задание` при выбранной ЛР), «выдать код»,
|
||||
«изменить», «текст», после готовности — «доп. задание: начать заново».
|
||||
|
||||
## Шаг 6. Учебные материалы
|
||||
|
||||
**Лабораторные → материалы (`/learn`)** доступны гостям. Для наполнения:
|
||||
создание глав/разделов/статей в админке или **импорт ZIP** со структурой:
|
||||
|
||||
```text
|
||||
chapters/01-глава/01-раздел/01-статья.md # front-matter: title, slug
|
||||
assets/ # картинки для md
|
||||
```
|
||||
|
||||
Материалы видны всем; для редактирования — «Материалы» с правами администратора.
|
||||
|
||||
## Замечания
|
||||
|
||||
* Данные в `*.xls`/PDF/PDF-пароли содержат персональные сведения — храните их во
|
||||
временном каталоге и не коммитьте в репозиторий.
|
||||
* Пароли студентов выдаются автоматически; временный пароль нужно менять при
|
||||
первом входе (до смены другие страницы недоступны).
|
||||
Reference in New Issue
Block a user