feed600d43a02c8ef25e59ee8eea5ec35038b58e
- progress-service: POST /api/v1/assign (manual variant), GET /api/v1/assignments?labId= (enriched assignments), fixed enrich() to return real variant number/title/statement - gateway: routes for /api/v1/assign and /api/v1/levels (exact paths) - web: lab detail page shows students grouped with level and variant selects, group filter, distribute/redistribute buttons, source badge (auto/manual) - web: student dashboard renders variant statement via libs/markdown (spoilers, code highlight, sanitized) - academic-service: unquote YAML front-matter values (variant numbers were quoted) - academic-service: LabLevelDetail.id for level references
LMS
Микросервисная система для проведения практических занятий (Kotlin + Spring Boot + PostgreSQL 18).
Модули
libs/common-http— общий формат ошибок и обработчик исключений.libs/security-jwt— выпуск/проверка JWT (RSA) иPasswordEncoder.libs/markdown— серверный рендер markdown со спойлерами и санитизацией.libs/test-support— общая тестовая инфраструктура (Testcontainers,postgres:18).services/identity-service— аккаунты, студенты, группы, зачисления (схемаidentity).services/academic-service— курсы, статьи, лабораторные, уровни, варианты (схемаacademic).services/progress-service— уровни студентов, распределение вариантов, работы, оценки (схемаprogress).services/gateway— Spring Cloud Gateway, маршрутизация и проверка JWT.web— серверный веб-интерфейс (Thymeleaf + htmx), BFF.
Требования
- JDK 21+ (сборка использует toolchain 21)
- Docker (для PostgreSQL 18)
Запуск
cp .env.example .env
docker compose up -d postgres
./gradlew :services:identity-service:bootRun
./gradlew :services:academic-service:bootRun
./gradlew :services:progress-service:bootRun
./gradlew :services:gateway:bootRun
./gradlew :web:bootRun
Порты по умолчанию: gateway :8080, identity :8081, academic :8082,
progress :8083, web :8090. Проверка: GET :8080/actuator/health.
Текущий функционал
Открыть http://localhost:8090. При первом запуске будет предложено создать
аккаунт администратора (/setup); далее — вход по логину и паролю.
- вход администратора и студентов, обязательная смена пароля при первом входе;
- группы: создание, импорт студентов из
.xls/.xlsx/.csv, выгрузка логинов и паролей в XLSX/CSV, сброс пароля студента; - JWT (RSA, ключи генерируются при первом старте identity и не хранятся в репозитории), проверка токена на gateway, роли ADMIN/STUDENT.
Сборка и тесты
./gradlew build # сборка всех модулей
./gradlew check # тесты и проверки
Переменные окружения для БД: LMS_DB_URL, LMS_DB_USER, LMS_DB_PASSWORD.
Description
Languages
Kotlin
55.2%
HTML
26.4%
JavaScript
12.5%
CSS
5.2%
Shell
0.5%
Other
0.2%