Skip to content

Commit 2c88c75

Browse files
author
Rudge Ferreira
committed
feat: Add swagger to return in root path
- Create swagger by postman collection in https://www.apimatic.io/transformer/
1 parent ac324d3 commit 2c88c75

File tree

5 files changed

+958
-22
lines changed

5 files changed

+958
-22
lines changed

build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ group 'io.realworld'
22
version '1.0-SNAPSHOT'
33

44
ext {
5-
javalin_version = "2.4.0"
5+
javalin_version = "2.6.0"
66
jackson_version = "2.9.7"
77
slf4j_version = "1.7.25"
88
koin_version = "1.0.2"
@@ -13,6 +13,7 @@ ext {
1313
h2_version = "1.4.197"
1414
exposed_version = "0.11.1"
1515
slugify_version = "2.1.+"
16+
swagger_version = "3.17.6"
1617
}
1718

1819
buildscript {
@@ -49,6 +50,7 @@ dependencies {
4950
compile "com.h2database:h2:$h2_version"
5051
compile "org.jetbrains.exposed:exposed:$exposed_version"
5152
compile "com.github.slugify:slugify:$slugify_version"
53+
compile "org.webjars:swagger-ui:$swagger_version"
5254

5355
testCompile "junit:junit:$junit_version"
5456
testCompile "com.mashape.unirest:unirest-java:$unirest_version"

src/main/kotlin/io/realworld/app/App.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package io.realworld.app
33
import io.realworld.app.config.AppConfig
44
import org.h2.tools.Server
55

6-
fun main(args: Array<String>) {
6+
fun main() {
77
Server.createWebServer().start()
88
AppConfig().setup().start()
99
}

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

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,30 @@ class AppConfig : KoinComponent {
2020
private val router: Router by inject()
2121

2222
fun setup(): Javalin {
23-
StandAloneContext.startKoin(allModules,
24-
KoinProperties(true, true))
23+
StandAloneContext.startKoin(
24+
allModules,
25+
KoinProperties(true, true)
26+
)
2527
return Javalin.create()
26-
.also { app ->
27-
this.configureMapper()
28-
app.enableCorsForAllOrigins()
29-
.contextPath(getProperty("context"))
30-
.event(JavalinEvent.SERVER_STOPPING) {
31-
StandAloneContext.stopKoin()
32-
}
33-
authConfig.configure(app)
34-
router.register(app)
35-
ErrorExceptionMapping.register(app)
36-
app.port(getProperty("server_port"))
37-
}
28+
.also { app ->
29+
this.configureMapper()
30+
app.enableCorsForAllOrigins()
31+
.contextPath(getProperty("context"))
32+
.event(JavalinEvent.SERVER_STOPPING) {
33+
StandAloneContext.stopKoin()
34+
}
35+
authConfig.configure(app)
36+
router.register(app)
37+
ErrorExceptionMapping.register(app)
38+
app.port(getProperty("server_port"))
39+
app.enableWebJars()
40+
}
3841
}
3942

4043
private fun configureMapper() {
4144
val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
42-
JavalinJackson.configure(jacksonObjectMapper()
45+
JavalinJackson.configure(
46+
jacksonObjectMapper()
4347
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
4448
.setDateFormat(dateFormat)
4549
.configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, true)

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

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import io.javalin.apibuilder.ApiBuilder.get
66
import io.javalin.apibuilder.ApiBuilder.path
77
import io.javalin.apibuilder.ApiBuilder.post
88
import io.javalin.apibuilder.ApiBuilder.put
9+
import io.javalin.core.util.SwaggerRenderer
910
import io.javalin.security.SecurityUtil.roles
1011
import io.realworld.app.config.Roles
1112
import io.realworld.app.web.controllers.ArticleController
@@ -15,11 +16,13 @@ import io.realworld.app.web.controllers.TagController
1516
import io.realworld.app.web.controllers.UserController
1617
import org.koin.standalone.KoinComponent
1718

18-
class Router(private val userController: UserController,
19-
private val profileController: ProfileController,
20-
private val articleController: ArticleController,
21-
private val commentController: CommentController,
22-
private val tagController: TagController) : KoinComponent {
19+
class Router(
20+
private val userController: UserController,
21+
private val profileController: ProfileController,
22+
private val articleController: ArticleController,
23+
private val commentController: CommentController,
24+
private val tagController: TagController
25+
) : KoinComponent {
2326

2427
fun register(app: Javalin) {
2528
val rolesOptionalAuthenticated = roles(Roles.ANYONE, Roles.AUTHENTICATED)
@@ -61,6 +64,7 @@ class Router(private val userController: UserController,
6164
path("tags") {
6265
get(tagController::get, rolesOptionalAuthenticated)
6366
}
67+
get("", SwaggerRenderer("swagger/api.yaml"), rolesOptionalAuthenticated)
6468
}
6569
}
6670
}

0 commit comments

Comments
 (0)