From e0f3ab188996e5e3feaed6934132f0bcad57b4eb Mon Sep 17 00:00:00 2001 From: Sambo Chea Date: Mon, 11 Apr 2022 09:03:04 +0700 Subject: [PATCH] Updated annotation and add openapi, node, health for spring boot template --- .../cubetiqs/web/StaticContextInitializer.kt | 2 +- .../web/annotation/ApiPageableAsQuery.kt | 7 +++++++ .../cubetiqs/web/annotation/ApiParamHidden.kt | 7 +++++++ .../FunctionComponent.kt | 2 +- .../cubetiqs/web/config/OpenApiDocConfig.kt | 17 +++++++++++++++ .../web/controller/IndexController.kt | 8 +++++++ .../web/model/response/HealthResponse.kt | 2 +- .../web/model/response/NodeInfoResponse.kt | 21 +++++++++++++++++++ .../cubetiqs/web/property/AppProperties.kt | 2 +- 9 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 api/src/main/kotlin/com/cubetiqs/web/annotation/ApiPageableAsQuery.kt create mode 100644 api/src/main/kotlin/com/cubetiqs/web/annotation/ApiParamHidden.kt rename api/src/main/kotlin/com/cubetiqs/web/{stereotype => annotation}/FunctionComponent.kt (93%) create mode 100644 api/src/main/kotlin/com/cubetiqs/web/model/response/NodeInfoResponse.kt diff --git a/api/src/main/kotlin/com/cubetiqs/web/StaticContextInitializer.kt b/api/src/main/kotlin/com/cubetiqs/web/StaticContextInitializer.kt index aecc660..1bd50c9 100644 --- a/api/src/main/kotlin/com/cubetiqs/web/StaticContextInitializer.kt +++ b/api/src/main/kotlin/com/cubetiqs/web/StaticContextInitializer.kt @@ -1,6 +1,6 @@ package com.cubetiqs.web -import com.cubetiqs.web.stereotype.FunctionComponent +import com.cubetiqs.web.annotation.FunctionComponent import org.springframework.context.annotation.Lazy @FunctionComponent diff --git a/api/src/main/kotlin/com/cubetiqs/web/annotation/ApiPageableAsQuery.kt b/api/src/main/kotlin/com/cubetiqs/web/annotation/ApiPageableAsQuery.kt new file mode 100644 index 0000000..37bac78 --- /dev/null +++ b/api/src/main/kotlin/com/cubetiqs/web/annotation/ApiPageableAsQuery.kt @@ -0,0 +1,7 @@ +package com.cubetiqs.web.annotation + +import org.springdoc.core.converters.models.PageableAsQueryParam + +@Retention(AnnotationRetention.RUNTIME) +@PageableAsQueryParam +annotation class ApiPageableAsQuery() \ No newline at end of file diff --git a/api/src/main/kotlin/com/cubetiqs/web/annotation/ApiParamHidden.kt b/api/src/main/kotlin/com/cubetiqs/web/annotation/ApiParamHidden.kt new file mode 100644 index 0000000..a43dc37 --- /dev/null +++ b/api/src/main/kotlin/com/cubetiqs/web/annotation/ApiParamHidden.kt @@ -0,0 +1,7 @@ +package com.cubetiqs.web.annotation + +import io.swagger.v3.oas.annotations.Parameter + +@Retention(AnnotationRetention.RUNTIME) +@Parameter(hidden = true) +annotation class ApiParamHidden() \ No newline at end of file diff --git a/api/src/main/kotlin/com/cubetiqs/web/stereotype/FunctionComponent.kt b/api/src/main/kotlin/com/cubetiqs/web/annotation/FunctionComponent.kt similarity index 93% rename from api/src/main/kotlin/com/cubetiqs/web/stereotype/FunctionComponent.kt rename to api/src/main/kotlin/com/cubetiqs/web/annotation/FunctionComponent.kt index be835b5..e4026d3 100644 --- a/api/src/main/kotlin/com/cubetiqs/web/stereotype/FunctionComponent.kt +++ b/api/src/main/kotlin/com/cubetiqs/web/annotation/FunctionComponent.kt @@ -1,4 +1,4 @@ -package com.cubetiqs.web.stereotype +package com.cubetiqs.web.annotation import org.springframework.context.annotation.Lazy import org.springframework.core.annotation.AliasFor diff --git a/api/src/main/kotlin/com/cubetiqs/web/config/OpenApiDocConfig.kt b/api/src/main/kotlin/com/cubetiqs/web/config/OpenApiDocConfig.kt index 59084bb..75bfbf1 100644 --- a/api/src/main/kotlin/com/cubetiqs/web/config/OpenApiDocConfig.kt +++ b/api/src/main/kotlin/com/cubetiqs/web/config/OpenApiDocConfig.kt @@ -12,6 +12,9 @@ import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import io.swagger.v3.oas.annotations.OpenAPIDefinition import io.swagger.v3.oas.annotations.servers.Server +//import org.springdoc.core.SpringDocUtils +//import org.springdoc.core.converters.models.Pageable +//import javax.servlet.http.HttpServletRequest @Configuration @SecurityScheme( @@ -33,6 +36,20 @@ class OpenApiDocConfig @Autowired constructor( private val DEFAULT_API_PATH get() = "/**" } +// init { +// SpringDocUtils.getConfig() +// .replaceParameterObjectWithClass(org.springframework.data.domain.Pageable::class.java, Pageable::class.java) +// .replaceParameterObjectWithClass( +// org.springframework.data.domain.PageRequest::class.java, +// Pageable::class.java +// ) +// .removeRequestWrapperToIgnore( +// HttpServletRequest::class.java, +// org.springframework.data.domain.Pageable::class.java, +// org.springframework.data.domain.PageRequest::class.java, +// ) +// } + @Bean fun defaultApi(): GroupedOpenApi { return GroupedOpenApi.builder() diff --git a/api/src/main/kotlin/com/cubetiqs/web/controller/IndexController.kt b/api/src/main/kotlin/com/cubetiqs/web/controller/IndexController.kt index 492949c..8df4dbb 100644 --- a/api/src/main/kotlin/com/cubetiqs/web/controller/IndexController.kt +++ b/api/src/main/kotlin/com/cubetiqs/web/controller/IndexController.kt @@ -3,6 +3,7 @@ package com.cubetiqs.web.controller import com.cubetiqs.web.model.response.ApiInfoAuthorResponse import com.cubetiqs.web.model.response.ApiInfoResponse import com.cubetiqs.web.model.response.HealthResponse +import com.cubetiqs.web.model.response.NodeInfoResponse import com.cubetiqs.web.util.RouteConstants import io.swagger.v3.oas.annotations.tags.Tag import org.springframework.beans.factory.annotation.Autowired @@ -44,4 +45,11 @@ class IndexController @Autowired constructor( HealthResponse.UP ) } + + @GetMapping("/node") + fun node(): ResponseEntity { + return response( + NodeInfoResponse.INFO + ) + } } \ No newline at end of file diff --git a/api/src/main/kotlin/com/cubetiqs/web/model/response/HealthResponse.kt b/api/src/main/kotlin/com/cubetiqs/web/model/response/HealthResponse.kt index 7f718cc..e520f70 100644 --- a/api/src/main/kotlin/com/cubetiqs/web/model/response/HealthResponse.kt +++ b/api/src/main/kotlin/com/cubetiqs/web/model/response/HealthResponse.kt @@ -2,7 +2,7 @@ package com.cubetiqs.web.model.response import io.swagger.v3.oas.annotations.media.Schema -@Schema(name = "HealthResponse", description = "HealthResponse") +@Schema(name = "HealthResponse", description = "Health Response") data class HealthResponse( @Schema(name = "status", description = "Status for the service") val status: String, diff --git a/api/src/main/kotlin/com/cubetiqs/web/model/response/NodeInfoResponse.kt b/api/src/main/kotlin/com/cubetiqs/web/model/response/NodeInfoResponse.kt new file mode 100644 index 0000000..216c93c --- /dev/null +++ b/api/src/main/kotlin/com/cubetiqs/web/model/response/NodeInfoResponse.kt @@ -0,0 +1,21 @@ +package com.cubetiqs.web.model.response + +import io.swagger.v3.oas.annotations.media.Schema +import org.apache.commons.lang3.SystemUtils +import java.util.* + +@Schema(name = "NodeInfoResponse", description = "Node Info Response") +data class NodeInfoResponse( + @Schema(name = "instance", description = "Instance ID of the node") + val instance: String?, + + @Schema(name = "serverTime", description = "Server Time of the node") + val serverTime: Date, +) : BaseRequestModel { + companion object { + val INFO get() = NodeInfoResponse( + instance = SystemUtils.getHostName(), + serverTime = Date(), + ) + } +} diff --git a/api/src/main/kotlin/com/cubetiqs/web/property/AppProperties.kt b/api/src/main/kotlin/com/cubetiqs/web/property/AppProperties.kt index a2b21c5..a92922e 100644 --- a/api/src/main/kotlin/com/cubetiqs/web/property/AppProperties.kt +++ b/api/src/main/kotlin/com/cubetiqs/web/property/AppProperties.kt @@ -1,6 +1,6 @@ package com.cubetiqs.web.property -import com.cubetiqs.web.stereotype.FunctionComponent +import com.cubetiqs.web.annotation.FunctionComponent import org.springframework.beans.factory.annotation.Value @FunctionComponent