- 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
81 lines
4.7 KiB
TOML
81 lines
4.7 KiB
TOML
# Version catalog: central place for dependency versions.
|
|
# https://docs.gradle.org/current/userguide/platforms.html#sub:version-catalog
|
|
|
|
[versions]
|
|
# Spring Boot 4.0.x is the release train matched by Spring Cloud 2025.1.x.
|
|
springBoot = "4.0.8"
|
|
springCloud = "2025.1.3"
|
|
kotlin = "2.4.20"
|
|
springdoc = "3.0.3"
|
|
flexmark = "0.64.8"
|
|
owaspSanitizer = "20260313.1"
|
|
apachePoi = "5.5.1"
|
|
|
|
[libraries]
|
|
# --- Gradle plugins used from buildSrc ---
|
|
kotlinGradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
|
|
kotlinAllopenPlugin = { module = "org.jetbrains.kotlin:kotlin-allopen", version.ref = "kotlin" }
|
|
kotlinNoargPlugin = { module = "org.jetbrains.kotlin:kotlin-noarg", version.ref = "kotlin" }
|
|
springBootGradlePlugin = { module = "org.springframework.boot:spring-boot-gradle-plugin", version.ref = "springBoot" }
|
|
|
|
# --- Platform BOMs (versions only) ---
|
|
springBootBom = { module = "org.springframework.boot:spring-boot-dependencies", version.ref = "springBoot" }
|
|
springCloudBom = { module = "org.springframework.cloud:spring-cloud-dependencies", version.ref = "springCloud" }
|
|
|
|
# --- Spring Boot starters (versions managed by the Boot BOM) ---
|
|
springBootStarterWeb = { module = "org.springframework.boot:spring-boot-starter-web" }
|
|
springBootStarterWebflux = { module = "org.springframework.boot:spring-boot-starter-webflux" }
|
|
springBootStarterValidation = { module = "org.springframework.boot:spring-boot-starter-validation" }
|
|
springBootStarterActuator = { module = "org.springframework.boot:spring-boot-starter-actuator" }
|
|
springBootStarterDataJpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa" }
|
|
springBootStarterFlyway = { module = "org.springframework.boot:spring-boot-starter-flyway" }
|
|
springBootStarterSecurity = { module = "org.springframework.boot:spring-boot-starter-security" }
|
|
springBootStarterOauth2ResourceServer = { module = "org.springframework.boot:spring-boot-starter-oauth2-resource-server" }
|
|
springBootStarterThymeleaf = { module = "org.springframework.boot:spring-boot-starter-thymeleaf" }
|
|
springBootStarterTest = { module = "org.springframework.boot:spring-boot-starter-test" }
|
|
springBootDevtools = { module = "org.springframework.boot:spring-boot-devtools" }
|
|
springSecurityTest = { module = "org.springframework.security:spring-security-test" }
|
|
|
|
# --- Spring Cloud ---
|
|
springCloudStarterGatewayWebflux = { module = "org.springframework.cloud:spring-cloud-starter-gateway-server-webflux" }
|
|
|
|
# --- Plain Spring libraries (for shared modules) ---
|
|
springWeb = { module = "org.springframework:spring-web" }
|
|
springContext = { module = "org.springframework:spring-context" }
|
|
springBootAutoconfigure = { module = "org.springframework.boot:spring-boot-autoconfigure" }
|
|
springSecurityConfig = { module = "org.springframework.security:spring-security-config" }
|
|
springSecurityWeb = { module = "org.springframework.security:spring-security-web" }
|
|
springSecurityOauth2Jose = { module = "org.springframework.security:spring-security-oauth2-jose" }
|
|
|
|
# --- Persistence / migrations ---
|
|
flywayCore = { module = "org.flywaydb:flyway-core" }
|
|
flywayPostgresql = { module = "org.flywaydb:flyway-database-postgresql" }
|
|
postgresql = { module = "org.postgresql:postgresql" }
|
|
jacksonYaml = { module = "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml" }
|
|
jacksonModuleKotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin" }
|
|
|
|
# --- API docs ---
|
|
springdocStarterWebmvcUi = { module = "org.springdoc:springdoc-openapi-starter-webmvc-ui", version.ref = "springdoc" }
|
|
|
|
# --- Markdown rendering ---
|
|
flexmarkAll = { module = "com.vladsch.flexmark:flexmark-all", version.ref = "flexmark" }
|
|
owaspHtmlSanitizer = { module = "com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer", version.ref = "owaspSanitizer" }
|
|
|
|
# --- Spreadsheet import/export ---
|
|
apachePoiOoxml = { module = "org.apache.poi:poi-ooxml", version.ref = "apachePoi" }
|
|
|
|
# --- Tests / Testcontainers (versions managed by the Boot BOM) ---
|
|
springBootTestcontainers = { module = "org.springframework.boot:spring-boot-testcontainers" }
|
|
testcontainersPostgresql = { module = "org.testcontainers:testcontainers-postgresql" }
|
|
testcontainersJunitJupiter = { module = "org.testcontainers:testcontainers-junit-jupiter" }
|
|
|
|
[bundles]
|
|
springWeb = ["springBootStarterWeb", "springBootStarterValidation", "springBootStarterActuator"]
|
|
springPersistence = ["springBootStarterDataJpa", "flywayCore", "flywayPostgresql", "postgresql"]
|
|
|
|
[plugins]
|
|
kotlinPluginJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
|
kotlinPluginSpring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" }
|
|
kotlinPluginJpa = { id = "org.jetbrains.kotlin.plugin.jpa", version.ref = "kotlin" }
|
|
springBootPlugin = { id = "org.springframework.boot", version.ref = "springBoot" }
|