Vladislav Kopnin 0de6d3f2d8 Lab assignment management UI and student variant view
- 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
2026-09-10 23:25:36 +03:00

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
No description provided
Readme 5.9 MiB
Languages
Kotlin 55.2%
HTML 26.4%
JavaScript 12.5%
CSS 5.2%
Shell 0.5%
Other 0.2%