- **Network Discovery Service:** - Added platform-specific `DiscoveryModule` with JmDNS-based `JmDnsDiscoveryService` for JVM and no-op implementation for JS. - Implemented service and device discovery using mDNS to enable peer-to-peer synchronization within LAN. - Registered the module in Koin for dependency injection and integrated it with `networkModule`. - **Frontend Integration:** - Enhanced `BewerbViewModel` with intents and actions for starting, stopping, and refreshing network scans. - Introduced polling for discovered services during an active scan. - **UI Additions:** - Added a `NetworkDiscoveryPanel` in `TurnierBewerbeTab` to display discovered services and indicate scan state. - Updated action buttons to include toggle functionality for network scans.
416 lines
21 KiB
TOML
416 lines
21 KiB
TOML
# This file is the SINGLE SOURCE OF TRUTH for all project dependencies.
|
||
# Organized by Domain: Frontend (KMP) vs. Backend (Spring/JVM)
|
||
# Last updated: 2026-02-03
|
||
|
||
[versions]
|
||
# ==============================================================================
|
||
# === FRONTEND & KMP CORE ===
|
||
# ==============================================================================
|
||
# Kotlin & Tooling
|
||
kotlin = "2.3.20"
|
||
ksp = "2.3.4"
|
||
|
||
# KotlinX (Core Libraries)
|
||
kotlinx-coroutines = "1.10.2"
|
||
kotlinx-serialization-json = "1.9.0"
|
||
kotlinx-datetime = "0.7.1"
|
||
|
||
# UI: Compose Multiplatform
|
||
# Aligned with Kotlin 2.3.0
|
||
composeMultiplatform = "1.11.0-alpha04"
|
||
composeHotReload = "1.0.0"
|
||
androidx-lifecycle = "2.9.6"
|
||
uiDesktop = "1.7.0"
|
||
|
||
# Network: Ktor (Client & Server)
|
||
# Align with Kotlin 2.3.0 – upgrade to 3.4.0 (runtime OpenAPI + lifecycle improvements)
|
||
ktor = "3.4.1"
|
||
|
||
# Dependency Injection
|
||
koin = "4.1.1"
|
||
koinCompose = "4.1.1"
|
||
|
||
# Local Persistence (Frontend)
|
||
# Room removed in favor of SQLDelight for JS/Wasm support
|
||
sqldelight = "2.2.1"
|
||
sqlite = "2.6.2"
|
||
|
||
# Web Tooling (NPM)
|
||
copyWebpackPlugin = "11.0.0"
|
||
sqliteWasm = "3.51.1-build2"
|
||
|
||
# ==============================================================================
|
||
# === BACKEND & INFRASTRUCTURE ===
|
||
# ==============================================================================
|
||
# Spring Ecosystem
|
||
springBoot = "3.5.9"
|
||
# Downgraded from 2025.1.0 (Oakwood) to 2025.0.1 (Northfields) for Spring Boot 3.5.x compatibility
|
||
springCloud = "2025.0.1"
|
||
springDependencyManagement = "1.1.7"
|
||
springdoc = "2.8.9"
|
||
|
||
# Server Persistence
|
||
# Final release 1.0.0 (UUID API refinements vs. rc-4)
|
||
exposed = "1.1.1"
|
||
postgresql = "42.7.8"
|
||
hikari = "7.0.2"
|
||
h2 = "2.4.240"
|
||
flyway = "11.19.1"
|
||
redisson = "4.0.0"
|
||
# Spring Boot 3.5.x manages Lettuce 6.6.x; keep aligned to avoid binary/API mismatches.
|
||
lettuce = "6.6.0.RELEASE"
|
||
springDataValkey = "0.2.0"
|
||
|
||
# Observability
|
||
micrometer = "1.16.1"
|
||
micrometerTracing = "1.6.1"
|
||
zipkin = "3.5.1"
|
||
zipkinReporter = "3.5.1"
|
||
resilience4j = "2.3.0"
|
||
|
||
# Auth & Security
|
||
auth0Jwt = "4.5.0"
|
||
keycloakAdminClient = "26.0.7"
|
||
|
||
# Utilities
|
||
bignum = "0.3.10"
|
||
jmdns = "3.5.12"
|
||
logback = "1.5.25"
|
||
caffeine = "3.2.3"
|
||
reactorKafka = "1.3.23"
|
||
jackson = "3.0.3"
|
||
jakartaAnnotation = "3.0.0"
|
||
slf4j = "2.0.17"
|
||
kotlin-logging = "7.0.13"
|
||
|
||
# Testing
|
||
junitJupiter = "5.11.3"
|
||
junitPlatform = "1.11.3"
|
||
mockk = "1.14.7"
|
||
assertj = "3.27.7"
|
||
testcontainers = "2.0.3"
|
||
testcontainersKeycloak = "4.0.1"
|
||
testcontainersJunitJupiter = "1.21.4"
|
||
testcontainersPostgresql = "1.21.4"
|
||
testcontainersKafka = "1.21.4"
|
||
archunit = "1.4.1"
|
||
|
||
# Gradle Plugins
|
||
foojayResolver = "1.0.0"
|
||
benManesVersions = "0.51.0"
|
||
detekt = "1.23.6"
|
||
ktlint = "12.1.1"
|
||
dokka = "2.2.0"
|
||
firebaseDatabaseKtx = "22.0.1"
|
||
|
||
[libraries]
|
||
# ==============================================================================
|
||
# === FRONTEND: KOTLIN MULTIPLATFORM CORE ===
|
||
# ==============================================================================
|
||
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
|
||
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
|
||
kotlin-test-junit5 = { module = "org.jetbrains.kotlin:kotlin-test-junit5", version.ref = "kotlin" }
|
||
|
||
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
|
||
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
|
||
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
|
||
|
||
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }
|
||
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
|
||
|
||
# ==============================================================================
|
||
# === FRONTEND: COMPOSE UI ===
|
||
# ==============================================================================
|
||
# Note: Core Compose libraries (runtime, foundation, material3) are usually added via the
|
||
# 'compose' Gradle plugin extension (e.g. implementation(compose.runtime)).
|
||
# These entries are for specific additional artifacts.
|
||
|
||
androidx-lifecycle-viewmodelCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
|
||
androidx-lifecycle-runtimeCompose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" }
|
||
ui-desktop = { module = "androidx.compose.ui:ui-desktop", version.ref = "uiDesktop" }
|
||
composeHotReloadApi = { module = "org.jetbrains.compose.hot-reload:hot-reload-runtime-api", version.ref = "composeHotReload" }
|
||
|
||
# ==============================================================================
|
||
# === FRONTEND: NETWORK (KTOR CLIENT) ===
|
||
# ==============================================================================
|
||
ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" }
|
||
ktor-client-contentNegotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" }
|
||
ktor-client-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" }
|
||
ktor-client-auth = { module = "io.ktor:ktor-client-auth", version.ref = "ktor" }
|
||
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
|
||
ktor-client-mock = { module = "io.ktor:ktor-client-mock", version.ref = "ktor" }
|
||
|
||
# Engines
|
||
ktor-client-cio = { module = "io.ktor:ktor-client-cio-jvm", version.ref = "ktor" } # JVM/Desktop
|
||
ktor-client-js = { module = "io.ktor:ktor-client-js", version.ref = "ktor" } # JS/Wasm
|
||
|
||
# ==============================================================================
|
||
# === FRONTEND: DEPENDENCY INJECTION (KOIN) ===
|
||
# ==============================================================================
|
||
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
|
||
koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koinCompose" }
|
||
koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koinCompose" }
|
||
|
||
# ==============================================================================
|
||
# === FRONTEND: LOCAL PERSISTENCE (SQLDelight) ===
|
||
# ==============================================================================
|
||
sqldelight-gradle = { module = "app.cash.sqldelight:gradle-plugin", version.ref = "sqldelight" }
|
||
sqldelight-runtime = { module = "app.cash.sqldelight:runtime", version.ref = "sqldelight" }
|
||
sqldelight-coroutines = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" }
|
||
sqldelight-driver-sqlite = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" } # JVM
|
||
sqldelight-driver-web = { module = "app.cash.sqldelight:web-worker-driver", version.ref = "sqldelight" } # JS/Wasm
|
||
|
||
# ==============================================================================
|
||
# === BACKEND: SPRING BOOT & CLOUD ===
|
||
# ==============================================================================
|
||
spring-boot-dependencies = { module = "org.springframework.boot:spring-boot-dependencies", version.ref = "springBoot" }
|
||
spring-cloud-dependencies = { module = "org.springframework.cloud:spring-cloud-dependencies", version.ref = "springCloud" }
|
||
|
||
spring-boot-starter-web = { module = "org.springframework.boot:spring-boot-starter-web" }
|
||
spring-boot-starter-validation = { module = "org.springframework.boot:spring-boot-starter-validation" }
|
||
spring-boot-starter-actuator = { module = "org.springframework.boot:spring-boot-starter-actuator" }
|
||
spring-boot-starter-data-jpa = { module = "org.springframework.boot:spring-boot-starter-data-jpa" }
|
||
spring-boot-starter-data-redis = { module = "org.springframework.boot:spring-boot-starter-data-redis" }
|
||
spring-boot-starter-test = { module = "org.springframework.boot:spring-boot-starter-test" }
|
||
spring-boot-starter-oauth2-client = { module = "org.springframework.boot:spring-boot-starter-oauth2-client" }
|
||
spring-boot-starter-oauth2-resource-server = { module = "org.springframework.boot:spring-boot-starter-oauth2-resource-server" }
|
||
spring-boot-starter-security = { module = "org.springframework.boot:spring-boot-starter-security" }
|
||
spring-security-test = { module = "org.springframework.security:spring-security-test" }
|
||
spring-boot-starter-webflux = { module = "org.springframework.boot:spring-boot-starter-webflux" }
|
||
spring-boot-starter-json = { module = "org.springframework.boot:spring-boot-starter-json" }
|
||
spring-boot-starter-aop = { module = "org.springframework.boot:spring-boot-starter-aop", version.ref = "springBoot" }
|
||
|
||
spring-kafka = { module = "org.springframework.kafka:spring-kafka" }
|
||
spring-security-oauth2-jose = { module = "org.springframework.security:spring-security-oauth2-jose" }
|
||
spring-web = { module = "org.springframework:spring-web" }
|
||
|
||
springdoc-openapi-starter-common = { module = "org.springdoc:springdoc-openapi-starter-common", version.ref = "springdoc" }
|
||
springdoc-openapi-starter-webmvc-ui = { module = "org.springdoc:springdoc-openapi-starter-webmvc-ui", version.ref = "springdoc" }
|
||
springdoc-openapi-starter-webflux-ui = { module = "org.springdoc:springdoc-openapi-starter-webflux-ui", version.ref = "springdoc" }
|
||
|
||
spring-cloud-starter-gateway-server-webflux = { module = "org.springframework.cloud:spring-cloud-starter-gateway-server-webflux" }
|
||
spring-cloud-starter-consul-discovery = { module = "org.springframework.cloud:spring-cloud-starter-consul-discovery" }
|
||
spring-cloud-starter-circuitbreaker-resilience4j = { module = "org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j" }
|
||
spring-cloud-starter-circuitbreaker-reactor-resilience4j = { module = "org.springframework.cloud:spring-cloud-starter-circuitbreaker-reactor-resilience4j" }
|
||
|
||
# ==============================================================================
|
||
# === BACKEND: KTOR SERVER ===
|
||
# ==============================================================================
|
||
ktor-server-core = { module = "io.ktor:ktor-server-core-jvm", version.ref = "ktor" }
|
||
ktor-server-netty = { module = "io.ktor:ktor-server-netty-jvm", version.ref = "ktor" }
|
||
ktor-server-contentNegotiation = { module = "io.ktor:ktor-server-content-negotiation-jvm", version.ref = "ktor" }
|
||
ktor-server-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json-jvm", version.ref = "ktor" }
|
||
ktor-server-statusPages = { module = "io.ktor:ktor-server-status-pages-jvm", version.ref = "ktor" }
|
||
ktor-server-auth = { module = "io.ktor:ktor-server-auth-jvm", version.ref = "ktor" }
|
||
ktor-server-authJwt = { module = "io.ktor:ktor-server-auth-jwt-jvm", version.ref = "ktor" }
|
||
ktor-server-cors = { module = "io.ktor:ktor-server-cors-jvm", version.ref = "ktor" }
|
||
ktor-server-callLogging = { module = "io.ktor:ktor-server-call-logging-jvm", version.ref = "ktor" }
|
||
ktor-server-defaultHeaders = { module = "io.ktor:ktor-server-default-headers-jvm", version.ref = "ktor" }
|
||
ktor-server-rateLimit = { module = "io.ktor:ktor-server-rate-limit-jvm", version.ref = "ktor" }
|
||
ktor-server-metrics-micrometer = { module = "io.ktor:ktor-server-metrics-micrometer-jvm", version.ref = "ktor" }
|
||
ktor-server-openapi = { module = "io.ktor:ktor-server-openapi", version.ref = "ktor" }
|
||
ktor-server-swagger = { module = "io.ktor:ktor-server-swagger", version.ref = "ktor" }
|
||
ktor-server-tests = { module = "io.ktor:ktor-server-tests-jvm", version.ref = "ktor" }
|
||
ktor-server-testHost = { module = "io.ktor:ktor-server-test-host-jvm", version.ref = "ktor" }
|
||
ktor-server-routing-openapi = { module = "io.ktor:ktor-server-routing-openapi", version.ref = "ktor" }
|
||
|
||
# ==============================================================================
|
||
# === BACKEND: PERSISTENCE & INFRA ===
|
||
# ==============================================================================
|
||
exposed-core = { module = "org.jetbrains.exposed:exposed-core", version.ref = "exposed" }
|
||
exposed-dao = { module = "org.jetbrains.exposed:exposed-dao", version.ref = "exposed" }
|
||
exposed-jdbc = { module = "org.jetbrains.exposed:exposed-jdbc", version.ref = "exposed" }
|
||
exposed-kotlin-datetime = { module = "org.jetbrains.exposed:exposed-kotlin-datetime", version.ref = "exposed" }
|
||
exposed-migration-jdbc = { module = "org.jetbrains.exposed:exposed-migration-jdbc", version.ref = "exposed" }
|
||
exposed-java-time = { module = "org.jetbrains.exposed:exposed-java-time", version.ref = "exposed" }
|
||
exposed-json = { module = "org.jetbrains.exposed:exposed-json", version.ref = "exposed" }
|
||
exposed-money = { module = "org.jetbrains.exposed:exposed-money", version.ref = "exposed" }
|
||
|
||
postgresql-driver = { module = "org.postgresql:postgresql", version.ref = "postgresql" }
|
||
hikari-cp = { module = "com.zaxxer:HikariCP", version.ref = "hikari" }
|
||
h2-driver = { module = "com.h2database:h2", version.ref = "h2" }
|
||
flyway-core = { module = "org.flywaydb:flyway-core", version.ref = "flyway" }
|
||
flyway-postgresql = { module = "org.flywaydb:flyway-database-postgresql", version.ref = "flyway" }
|
||
|
||
redisson = { module = "org.redisson:redisson", version.ref = "redisson" }
|
||
lettuce-core = { module = "io.lettuce:lettuce-core", version.ref = "lettuce" }
|
||
spring-data-valkey = { module = "io.valkey.springframework.data:spring-data-valkey", version.ref = "springDataValkey" }
|
||
|
||
micrometer-prometheus = { module = "io.micrometer:micrometer-registry-prometheus", version.ref = "micrometer" }
|
||
micrometer-tracing-bridge-brave = { module = "io.micrometer:micrometer-tracing-bridge-brave", version.ref = "micrometerTracing" }
|
||
zipkin-reporter-brave = { module = "io.zipkin.reporter2:zipkin-reporter-brave", version.ref = "zipkinReporter" }
|
||
zipkin-sender-okhttp3 = { module = "io.zipkin.reporter2:zipkin-sender-okhttp3", version.ref = "zipkinReporter" }
|
||
zipkin-server = { module = "io.zipkin:zipkin-server", version.ref = "zipkin" }
|
||
|
||
resilience4j-spring-boot3 = { module = "io.github.resilience4j:resilience4j-spring-boot3", version.ref = "resilience4j" }
|
||
resilience4j-reactor = { module = "io.github.resilience4j:resilience4j-reactor", version.ref = "resilience4j" }
|
||
|
||
auth0-java-jwt = { module = "com.auth0:java-jwt", version.ref = "auth0Jwt" }
|
||
keycloak-admin-client = { module = "org.keycloak:keycloak-admin-client", version.ref = "keycloakAdminClient" }
|
||
|
||
# ==============================================================================
|
||
# === SHARED UTILITIES & TESTING ===
|
||
# ==============================================================================
|
||
bignum = { module = "com.ionspin.kotlin:bignum", version.ref = "bignum" }
|
||
slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
|
||
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
|
||
logback-core = { module = "ch.qos.logback:logback-core", version.ref = "logback" }
|
||
kotlin-logging-jvm = { module = "io.github.oshai:kotlin-logging-jvm", version.ref = "kotlin-logging" }
|
||
caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" }
|
||
reactor-kafka = { module = "io.projectreactor.kafka:reactor-kafka", version.ref = "reactorKafka" }
|
||
jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin" }
|
||
jackson-datatype-jsr310 = { module = "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" }
|
||
jakarta-annotation-api = { module = "jakarta.annotation:jakarta.annotation-api", version.ref = "jakartaAnnotation" }
|
||
jmdns = { module = "org.jmdns:jmdns", version.ref = "jmdns" }
|
||
|
||
junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.ref = "junitJupiter" }
|
||
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junitJupiter" }
|
||
junit-jupiter-params = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junitJupiter" }
|
||
junit-platform-launcher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junitPlatform" }
|
||
reactor-test = { module = "io.projectreactor:reactor-test" }
|
||
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
|
||
assertj-core = { module = "org.assertj:assertj-core", version.ref = "assertj" }
|
||
testcontainers-core = { module = "org.testcontainers:testcontainers", version.ref = "testcontainers" }
|
||
testcontainers-junit-jupiter = { module = "org.testcontainers:junit-jupiter", version.ref = "testcontainersJunitJupiter" }
|
||
testcontainers-postgresql = { module = "org.testcontainers:postgresql", version.ref = "testcontainersPostgresql" }
|
||
testcontainers-kafka = { module = "org.testcontainers:kafka", version.ref = "testcontainersKafka" }
|
||
testcontainers-keycloak = { module = "com.github.dasniko:testcontainers-keycloak", version.ref = "testcontainersKeycloak" }
|
||
|
||
archunit-junit5-api = { module = "com.tngtech.archunit:archunit-junit5-api", version.ref = "archunit" }
|
||
archunit-junit5-engine = { module = "com.tngtech.archunit:archunit-junit5-engine", version.ref = "archunit" }
|
||
|
||
# BOMs
|
||
kotlin-bom = { module = "org.jetbrains.kotlin:kotlin-bom", version.ref = "kotlin" }
|
||
kotlinx-coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bom", version.ref = "kotlinx-coroutines" }
|
||
kotlinx-coroutines-reactor = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactor", version.ref = "kotlinx-coroutines" }
|
||
firebase-database-ktx = { group = "com.google.firebase", name = "firebase-database-ktx", version.ref = "firebaseDatabaseKtx" }
|
||
|
||
[bundles]
|
||
# === FRONTEND BUNDLES ===
|
||
# Use these in commonMain to reduce boilerplate
|
||
kmp-common = [
|
||
"kotlinx-coroutines-core",
|
||
"kotlinx-serialization-json",
|
||
"kotlinx-datetime"
|
||
]
|
||
|
||
ktor-client-common = [
|
||
"ktor-client-core",
|
||
"ktor-client-contentNegotiation",
|
||
"ktor-client-serialization-kotlinx-json",
|
||
"ktor-client-auth",
|
||
"ktor-client-logging"
|
||
]
|
||
|
||
compose-common = [
|
||
"androidx-lifecycle-viewmodelCompose",
|
||
"androidx-lifecycle-runtimeCompose"
|
||
]
|
||
|
||
# === BACKEND BUNDLES ===
|
||
testing-jvm = [
|
||
"junit-jupiter-api",
|
||
"junit-jupiter-engine",
|
||
"junit-jupiter-params",
|
||
"junit-platform-launcher",
|
||
"mockk",
|
||
"assertj-core"
|
||
]
|
||
test-spring = [
|
||
"spring-boot-starter-test",
|
||
"spring-security-test"
|
||
]
|
||
spring-boot-service-complete = [
|
||
"spring-boot-starter-web",
|
||
"spring-boot-starter-validation",
|
||
"spring-boot-starter-actuator",
|
||
"spring-boot-starter-json",
|
||
"spring-boot-starter-aop",
|
||
"jackson-module-kotlin",
|
||
"jackson-datatype-jsr310",
|
||
"micrometer-prometheus",
|
||
"micrometer-tracing-bridge-brave",
|
||
"zipkin-reporter-brave",
|
||
"zipkin-sender-okhttp3"
|
||
]
|
||
|
||
# Standard dependencies for a "secure" Spring Boot microservice (architecture-approved baseline)
|
||
spring-boot-secure-service = [
|
||
"spring-boot-starter-web",
|
||
"spring-boot-starter-actuator",
|
||
"spring-boot-starter-security",
|
||
"spring-boot-starter-oauth2-resource-server",
|
||
"spring-cloud-starter-consul-discovery"
|
||
]
|
||
database-complete = [
|
||
"spring-boot-starter-data-jpa",
|
||
"postgresql-driver",
|
||
"hikari-cp",
|
||
"flyway-core",
|
||
"flyway-postgresql"
|
||
]
|
||
valkey-cache = [
|
||
"spring-data-valkey",
|
||
"jackson-module-kotlin",
|
||
"jackson-datatype-jsr310"
|
||
]
|
||
testcontainers = [
|
||
"testcontainers-core",
|
||
"testcontainers-junit-jupiter",
|
||
"testcontainers-postgresql",
|
||
"testcontainers-kafka",
|
||
"testcontainers-keycloak"
|
||
]
|
||
kafka-config = [
|
||
"spring-kafka",
|
||
"reactor-kafka",
|
||
"jackson-module-kotlin",
|
||
"jackson-datatype-jsr310"
|
||
]
|
||
monitoring-client = [
|
||
"spring-boot-starter-actuator",
|
||
"micrometer-prometheus",
|
||
"micrometer-tracing-bridge-brave",
|
||
"zipkin-reporter-brave",
|
||
"zipkin-sender-okhttp3"
|
||
]
|
||
jackson-kotlin = [
|
||
"jackson-module-kotlin",
|
||
"jackson-datatype-jsr310"
|
||
]
|
||
resilience = [
|
||
"resilience4j-spring-boot3",
|
||
"resilience4j-reactor"
|
||
]
|
||
|
||
[plugins]
|
||
# --- Kotlin & Android ---
|
||
kotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||
kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||
kotlinSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
|
||
kotlinJpa = { id = "org.jetbrains.kotlin.plugin.jpa", version.ref = "kotlin" }
|
||
kotlinSpring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" }
|
||
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
|
||
|
||
# --- Compose ---
|
||
composeHotReload = { id = "org.jetbrains.compose.hot-reload", version.ref = "composeHotReload" }
|
||
composeMultiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" }
|
||
composeCompiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
|
||
|
||
# --- Spring ---
|
||
spring-boot = { id = "org.springframework.boot", version.ref = "springBoot" }
|
||
spring-dependencyManagement = { id = "io.spring.dependency-management", version.ref = "springDependencyManagement" }
|
||
|
||
# --- Ktor ---
|
||
ktor = { id = "io.ktor.plugin", version.ref = "ktor" }
|
||
|
||
# --- Persistence ---
|
||
sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" }
|
||
|
||
# --- Tools ---
|
||
foojayResolver = { id = "org.gradle.toolchains.foojay-resolver-convention", version.ref = "foojayResolver" }
|
||
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
|
||
benManesVersions = { id = "com.github.ben-manes.versions", version.ref = "benManesVersions" }
|
||
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
|
||
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" }
|