meldestelle/api-gateway/build.gradle.kts
stefan 7a64325196 (fix) Umbau zu SCS
### API-Gateway erweitern
- Bestehenden API-Gateway-Service mit zusätzlichen Funktionen ausstatten:
    - Rate Limiting implementieren
    - Request/Response Logging verbessern
2025-07-21 16:25:12 +02:00

157 lines
5.5 KiB
Plaintext

plugins {
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.kotlin.serialization)
id("org.openapi.generator") version "7.3.0" // Updated to latest version
}
// Get project version for documentation versioning
val projectVersion = project.version.toString()
// Configure OpenAPI Generator
openApiGenerate {
generatorName.set("html2")
inputSpec.set("$projectDir/src/jvmMain/resources/openapi/documentation.yaml")
outputDir.set("$projectDir/build/generated-docs")
// Configure HTML2 generator options
configOptions.set(mapOf(
"infoUrl" to "https://meldestelle.at",
"infoEmail" to "support@meldestelle.at",
"title" to "Meldestelle API Documentation v$projectVersion"
))
// Validate OpenAPI specification before generation
validateSpec.set(true)
}
// Task to validate OpenAPI specification
tasks.register("validateOpenApi") {
group = "documentation"
description = "Validates the OpenAPI specification"
doLast {
// Use the OpenAPI Generator's validate task
tasks.named("openApiValidate").get().actions.forEach { action ->
action.execute(tasks.named("openApiValidate").get())
}
println("OpenAPI specification validated successfully")
}
}
// Task to generate API documentation
tasks.register("generateApiDocs") {
group = "documentation"
description = "Generates API documentation from OpenAPI specification"
doFirst {
// Validate the OpenAPI specification before generating documentation
println("Validating OpenAPI specification...")
tasks.named("validateOpenApi").get().actions.forEach { action ->
action.execute(tasks.named("validateOpenApi").get())
}
}
doLast {
try {
// Ensure the output directory exists
mkdir("$projectDir/build/docs")
// Create version directory for documentation versioning
val docsVersionDir = file("$projectDir/src/jvmMain/resources/static/docs/v$projectVersion")
mkdir(docsVersionDir)
// Copy all generated documentation files to the static docs directory
copy {
from("$projectDir/build/generated-docs")
into("$projectDir/src/jvmMain/resources/static/docs")
include("**/*")
}
// Also copy to the versioned directory
copy {
from("$projectDir/build/generated-docs")
into(docsVersionDir)
include("**/*")
}
// Create a version.json file with version information
val timestamp = System.currentTimeMillis()
file("$projectDir/src/jvmMain/resources/static/docs/version.json").writeText("""
{
"version": "$projectVersion",
"generatedAt": "$timestamp",
"latestVersionUrl": "/docs/v$projectVersion"
}
""".trimIndent())
println("API documentation generated successfully at:")
println("- Latest: $projectDir/src/jvmMain/resources/static/docs/")
println("- Versioned: $projectDir/src/jvmMain/resources/static/docs/v$projectVersion/")
} catch (e: Exception) {
println("Error generating API documentation: ${e.message}")
e.printStackTrace()
throw e
}
}
// This task depends on the openApiGenerate task
dependsOn("openApiGenerate")
}
kotlin {
jvm {
@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class)
mainRun {
mainClass.set("at.mocode.gateway.ApplicationKt")
}
}
sourceSets {
commonMain.dependencies {
implementation(project(":shared-kernel"))
implementation(project(":master-data"))
implementation(project(":member-management"))
implementation(project(":horse-registry"))
implementation(project(":event-management"))
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)
implementation(libs.kotlinx.datetime)
implementation(libs.uuid)
}
commonTest.dependencies {
implementation(libs.kotlin.test)
implementation(libs.kotlinx.coroutines.test)
}
jvmMain.dependencies {
implementation(libs.ktor.server.core)
implementation(libs.ktor.server.netty)
implementation(libs.ktor.server.contentNegotiation)
implementation(libs.ktor.server.cors)
implementation(libs.ktor.server.auth)
implementation(libs.ktor.server.authJwt)
implementation(libs.ktor.server.callLogging)
implementation(libs.ktor.server.statusPages)
implementation(libs.ktor.server.serializationKotlinxJson)
implementation(libs.ktor.server.openapi)
implementation(libs.ktor.server.swagger)
implementation(libs.ktor.server.rateLimit)
implementation(libs.logback)
// Datenbankabhängigkeiten für Migrationen
implementation("com.zaxxer:HikariCP:5.0.1")
implementation(libs.exposed.core)
implementation(libs.exposed.dao)
implementation(libs.exposed.jdbc)
implementation(libs.exposed.kotlinDatetime)
implementation(libs.postgresql.driver)
}
jvmTest.dependencies {
implementation(libs.ktor.server.tests)
}
}
}