Skip to content

Commit b041554

Browse files
committed
Add OpenApiPlugin
1 parent ca1aa32 commit b041554

File tree

2 files changed

+43
-18
lines changed

2 files changed

+43
-18
lines changed

src/main/kotlin/io/realworld/app/config/AppConfig.kt

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,17 @@ package io.realworld.app.config
33
import com.fasterxml.jackson.databind.SerializationFeature
44
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
55
import io.javalin.Javalin
6+
import io.javalin.core.plugin.Plugin
7+
import io.javalin.core.security.SecurityUtil.roles
68
import io.javalin.plugin.json.JavalinJackson
9+
import io.javalin.plugin.openapi.OpenApiOptions
10+
import io.javalin.plugin.openapi.OpenApiPlugin
11+
import io.javalin.plugin.openapi.ui.SwaggerOptions
712
import io.realworld.app.config.ModulesConfig.allModules
813
import io.realworld.app.web.ErrorExceptionMapping
914
import io.realworld.app.web.Router
15+
import io.swagger.v3.oas.models.info.Info
16+
import org.eclipse.jetty.server.Server
1017
import org.koin.core.KoinProperties
1118
import org.koin.standalone.KoinComponent
1219
import org.koin.standalone.StandAloneContext
@@ -23,24 +30,26 @@ class AppConfig : KoinComponent {
2330
allModules,
2431
KoinProperties(true, true)
2532
)
26-
return Javalin.create()
27-
.also { app ->
28-
this.configureMapper()
29-
app.config!!.apply {
30-
this.enableWebjars()
31-
this.enableCorsForAllOrigins()
32-
this.contextPath = getProperty("context")
33-
}
34-
app.events {
35-
it.serverStopping {
36-
StandAloneContext.stopKoin()
37-
}
38-
}
39-
authConfig.configure(app)
40-
router.register(app)
41-
ErrorExceptionMapping.register(app)
42-
app.server()!!.serverPort = getProperty("server_port")
33+
this.configureMapper()
34+
val app = Javalin.create { config ->
35+
config.apply {
36+
enableWebjars()
37+
enableCorsForAllOrigins()
38+
contextPath = getProperty("context")
39+
registerPlugin(getConfiguredOpenApiPlugin())
40+
server {
41+
Server(getProperty("server_port") as Int)
4342
}
43+
}
44+
}.events {
45+
it.serverStopping {
46+
StandAloneContext.stopKoin()
47+
}
48+
}
49+
authConfig.configure(app)
50+
router.register(app)
51+
ErrorExceptionMapping.register(app)
52+
return app
4453
}
4554

4655
private fun configureMapper() {
@@ -52,5 +61,22 @@ class AppConfig : KoinComponent {
5261
.configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, true)
5362
)
5463
}
64+
65+
fun getConfiguredOpenApiPlugin() = OpenApiPlugin(
66+
OpenApiOptions(
67+
Info().apply {
68+
title("Conduit")
69+
version("1.0")
70+
description(
71+
"|-\n" +
72+
" Collection for testing the Conduit API\n" +
73+
" https://github.com/Rudge/kotlin-javalin-realworld-example-app")
74+
}
75+
).apply {
76+
path("/swagger-docs") // endpoint for OpenAPI json
77+
swagger(SwaggerOptions("/swagger-ui")) // endpoint for swagger-ui
78+
roles(roles(Roles.ANYONE, Roles.AUTHENTICATED))
79+
}
80+
)
5581
}
5682

src/main/kotlin/io/realworld/app/web/Router.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ class Router(
6363
path("tags") {
6464
get(tagController::get, rolesOptionalAuthenticated)
6565
}
66-
//get("", SwaggerRenderer("swagger/api.yaml"), rolesOptionalAuthenticated)
6766
}
6867
}
6968
}

0 commit comments

Comments
 (0)