Skip to content

Commit f949cdc

Browse files
committed
feat(openapi): provide swagger ui of model-server.yaml at endpoint /swagger
1 parent cf389fa commit f949cdc

File tree

10 files changed

+32
-14
lines changed

10 files changed

+32
-14
lines changed

api/model-server-deprecated.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ openapi: "3.0.3"
1111
info:
1212
title: "model-server deprecated API"
1313
description: "modelix deprecated API"
14-
version: "0.0.1"
14+
version: "1.0.0"
1515
servers:
16-
- url: 'http://127.0.0.1:28101'
17-
description: local model-server
16+
- url: '/'
17+
description: model-server
1818
paths:
1919
/json:
2020
get:

api/model-server-html.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ openapi: "3.0.3"
1313
info:
1414
title: "model-server content browser API"
1515
description: "modelix content browser API"
16-
version: "0.0.1"
16+
version: "1.0.0"
1717
servers:
18-
- url: 'http://127.0.0.1:28101'
19-
description: local model-server
18+
- url: '/'
19+
description: model-server
2020
paths:
2121
/:
2222
get:

api/model-server-light.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ openapi: "3.0.3"
1111
info:
1212
title: "model-server light API"
1313
description: "modelix light API"
14-
version: "0.0.1"
14+
version: "1.0.0"
1515
servers:
16-
- url: 'http://127.0.0.1:28101'
17-
description: local model-server
16+
- url: '/'
17+
description: model-server
1818
paths:
1919
# TODO: this is a WS, openAPI will not help here
2020
/json/v2/{repositoryId}/ws:

api/model-server.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ openapi: "3.0.3"
1111
info:
1212
title: "model-server public API"
1313
description: "modelix public API"
14-
version: "0.0.1"
14+
version: "1.0.0"
1515
servers:
16-
- url: 'http://127.0.0.1:28101'
17-
description: local model-server
16+
- url: '/'
17+
description: model-server
1818
paths:
1919
/v2/server-id:
2020
get:

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ ktor-server-status-pages = { group = "io.ktor", name = "ktor-server-status-pages
6060
ktor-server-test-host = { group = "io.ktor", name = "ktor-server-test-host", version.ref = "ktor" }
6161
ktor-server-websockets = { group = "io.ktor", name = "ktor-server-websockets", version.ref = "ktor" }
6262
ktor-server-resources = { group = "io.ktor", name = "ktor-server-resources", version.ref = "ktor" }
63+
ktor-server-swagger = { group = "io.ktor", name = "ktor-server-swagger", version.ref = "ktor" }
6364

6465
ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" }
6566
ktor-client-content-negotiation = { group = "io.ktor", name = "ktor-client-content-negotiation", version.ref = "ktor" }

model-server/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ dependencies {
5252
implementation(libs.ktor.server.content.negotiation)
5353
implementation(libs.ktor.server.resources)
5454
implementation(libs.ktor.serialization.json)
55+
implementation(libs.ktor.server.swagger)
5556

5657
implementation(libs.bundles.ignite)
5758

@@ -190,7 +191,7 @@ spotless {
190191

191192
// OpenAPI integration
192193
val basePackage = project.group.toString()
193-
val openAPIgenerationPath = "${project.layout.buildDirectory}/generated/openapi"
194+
val openAPIgenerationPath = "${project.layout.buildDirectory.get()}/generated/openapi"
194195

195196
// Pairs of the different OpenAPI files we use. Each pair must have its own 'category' as first argument as these
196197
// are used to generate corresponding packages

model-server/src/main/kotlin/org/modelix/model/server/CmdLineArgs.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ internal class CmdLineArgs {
4040
)
4141
var schemaInit = false
4242

43+
@Parameter(names = ["-noswagger"], description = "Disables SwaggerUI at endpoint '/swagger'", converter = BooleanConverter::class)
44+
var noSwaggerUi: Boolean = false
45+
4346
@Parameter(names = ["-h", "--help"], help = true)
4447
var help = false
4548
}

model-server/src/main/kotlin/org/modelix/model/server/Main.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import io.ktor.server.netty.NettyApplicationEngine
2929
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
3030
import io.ktor.server.plugins.cors.routing.CORS
3131
import io.ktor.server.plugins.forwardedheaders.ForwardedHeaders
32+
import io.ktor.server.plugins.swagger.swaggerUI
3233
import io.ktor.server.resources.Resources
3334
import io.ktor.server.response.respondText
3435
import io.ktor.server.routing.IgnoreTrailingSlash
@@ -90,6 +91,8 @@ object Main {
9091
LOG.info("Path to JDBC configuration file: " + cmdLineArgs.jdbcConfFile)
9192
LOG.info("Schema initialization: " + cmdLineArgs.schemaInit)
9293
LOG.info("Set values: " + cmdLineArgs.setValues)
94+
LOG.info("Disable Swagger-UI: " + cmdLineArgs.noSwaggerUi)
95+
9396
if (cmdLineArgs.dumpOutName != null && !cmdLineArgs.inmemory) {
9497
throw RuntimeException("For now dumps are supported only with the inmemory option")
9598
}
@@ -224,11 +227,21 @@ object Main {
224227
li {
225228
a("user") { +"View JWT token and permissions" }
226229
}
230+
li {
231+
a("swagger") { +"SwaggerUI" }
232+
}
227233
}
228234
}
229235
}
230236
call.respondText("Model Server")
231237
}
238+
if (cmdLineArgs.noSwaggerUi) {
239+
get("swagger") {
240+
call.respondText("SwaggerUI is disabled")
241+
}
242+
} else {
243+
swaggerUI(path = "swagger", swaggerFile = "../api/model-server.yaml")
244+
}
232245
}
233246
}
234247
ktorServer.start(wait = true)

model-server/src/main/kotlin/org/modelix/model/server/handlers/ModelReplicationServer.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import io.ktor.server.resources.post
2525
import io.ktor.server.response.respond
2626
import io.ktor.server.response.respondText
2727
import io.ktor.server.routing.Route
28-
import io.ktor.server.routing.get
2928
import io.ktor.server.routing.route
3029
import io.ktor.server.routing.routing
3130
import io.ktor.server.websocket.webSocket

model-server/src/main/kotlin/org/modelix/model/server/templates/PageWithMenuBar.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class PageWithMenuBar(val activePage: String, val baseUrl: String) : Template<HT
3939
"json/" to "JSON API",
4040
"headers" to "HTTP Headers",
4141
"user" to "JWT token and permissions",
42+
"swagger" to "SwaggerUI",
4243
)
4344
var classes = "menuItem"
4445
if (activePage == "root") {

0 commit comments

Comments
 (0)