Initial commit: LMS microservices scaffold

- Gradle multi-module: libs/{common-http,security-jwt,markdown,test-support},
  services/{identity,academic,progress,gateway}, web (Thymeleaf+htmx)
- identity-service: JWT auth (RSA), accounts, students, groups, enrollment,
  import from XLSX/CSV, credentials export, password reset
- academic-service: lab import from JSON/zip (markdown + YAML + variants),
  levels, API
- progress-service: schema for student levels and variant assignments
- gateway: Spring Cloud Gateway, JWT validation, route propagation
- web: Server-side UI with flex/footer layout, light/dark theme toggle,
  admin dashboard, groups CRUD, student portal placeholder
- docker-compose: PostgreSQL 18
- Tests: identity smoke test with Testcontainers
This commit is contained in:
2026-09-10 19:46:13 +03:00
commit 2cee104633
125 changed files with 4752 additions and 0 deletions

57
README.md Normal file
View File

@@ -0,0 +1,57 @@
# 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)
## Запуск
```bash
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.
## Сборка и тесты
```bash
./gradlew build # сборка всех модулей
./gradlew check # тесты и проверки
```
Переменные окружения для БД: `LMS_DB_URL`, `LMS_DB_USER`, `LMS_DB_PASSWORD`.