From 7ce84b5ec8b7144a402876aff8be4b59fa73ce22 Mon Sep 17 00:00:00 2001 From: andrewwilsonnew Date: Thu, 5 Jun 2025 20:13:38 +0100 Subject: [PATCH 1/2] first pass --- .../languages/KotlinMiskServerCodegen.java | 2 ++ .../resources/kotlin-misk/apiAction.mustache | 8 ++++-- .../kotlin-misk/optionalDataType.mustache | 2 +- .../server/api/api/PetApiAction.kt | 25 +++++++++++++------ .../server/api/api/StoreApiAction.kt | 13 +++++++--- .../server/api/api/UserApiAction.kt | 25 +++++++++++++------ .../server/api/api/PetApiAction.kt | 25 +++++++++++++------ .../server/api/api/StoreApiAction.kt | 13 +++++++--- .../server/api/api/UserApiAction.kt | 25 +++++++++++++------ 9 files changed, 95 insertions(+), 43 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinMiskServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinMiskServerCodegen.java index b652cdadf465..ab71c146112a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinMiskServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinMiskServerCodegen.java @@ -149,6 +149,8 @@ public KotlinMiskServerCodegen() { artifactId = "openapi-kotlin-misk-server"; artifactVersion = apiVersion; + typeMapping.put("File", "Response"); + updateOption(CodegenConstants.API_PACKAGE, apiPackage); updateOption(CodegenConstants.MODEL_PACKAGE, modelPackage); additionalProperties.put(ROOT_PACKAGE, rootPackage); diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache index 92ba9b77ceaa..a4ab68319c1d 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache @@ -25,6 +25,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -46,8 +47,11 @@ class {{classname}}Action @Inject constructor( @RequestContentType({{#consumes}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/consumes}}){{/hasConsumes}}{{#hasProduces}} @ResponseContentType({{#produces}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}){{/hasProduces}} @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) - fun {{operationId}}({{#allParams}} - {{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}}: {{{returnType}}}{{/returnType}} { + fun {{operationId}}( +{{#allParams}} + {{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}} +{{/allParams}} + ): {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Response{{/returnType}} { TODO() } {{/operation}} diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/optionalDataType.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/optionalDataType.mustache index 96a2ec611e60..52777016a805 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/optionalDataType.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/optionalDataType.mustache @@ -1 +1 @@ -{{^isFile}}{{{dataType}}}{{^required}}{{^defaultValue}}?{{/defaultValue}}{{/required}}{{/isFile}}{{#isFile}}{{#isArray}}Array<{{/isArray}}{{#isArray}}>{{/isArray}}{{^isArray}}{{^required}}{{/required}}{{/isArray}}{{/isFile}} \ No newline at end of file +{{^isFile}}{{{dataType}}}{{^required}}{{^defaultValue}}?{{/defaultValue}}{{/required}}{{/isFile}}{{#isFile}}{{#isArray}}List<{{/isArray}}{{#isArray}}>{{/isArray}}{{^isArray}}{{^required}}{{/required}}{{/isArray}}{{/isFile}} \ No newline at end of file diff --git a/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt b/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt index 56bc8edd9d7d..fb7f1844b228 100644 --- a/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt +++ b/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt @@ -23,6 +23,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -43,7 +44,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun addPet( - @Valid @RequestBody pet: Pet): Pet { + @Valid @RequestBody pet: Pet + ): Pet { TODO() } @@ -52,7 +54,8 @@ class PetApiAction @Inject constructor( @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun deletePet( @PathParam("petId") petId: kotlin.Long, - @RequestHeader(value = "api_key") apiKey: kotlin.String?) { + @RequestHeader(value = "api_key") apiKey: kotlin.String? + ): Response { TODO() } @@ -61,7 +64,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun findPetsByStatus( - @QueryParam(value = "status") status: kotlin.Array): kotlin.Array { + @QueryParam(value = "status") status: kotlin.Array + ): kotlin.Array { TODO() } @@ -70,7 +74,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun findPetsByTags( - @QueryParam(value = "tags") tags: kotlin.Array): kotlin.Array { + @QueryParam(value = "tags") tags: kotlin.Array + ): kotlin.Array { TODO() } @@ -79,7 +84,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun getPetById( - @PathParam("petId") petId: kotlin.Long): Pet { + @PathParam("petId") petId: kotlin.Long + ): Pet { TODO() } @@ -89,7 +95,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun updatePet( - @Valid @RequestBody pet: Pet): Pet { + @Valid @RequestBody pet: Pet + ): Pet { TODO() } @@ -100,7 +107,8 @@ class PetApiAction @Inject constructor( fun updatePetWithForm( @PathParam("petId") petId: kotlin.Long, @QueryParam(value = "name") name: kotlin.String? , - @QueryParam(value = "status") status: kotlin.String? ) { + @QueryParam(value = "status") status: kotlin.String? + ): Response { TODO() } @@ -112,7 +120,8 @@ class PetApiAction @Inject constructor( fun uploadFile( @PathParam("petId") petId: kotlin.Long, @QueryParam(value = "additionalMetadata") additionalMetadata: kotlin.String? , - @Valid file: HttpCall): ModelApiResponse { + @Valid file: HttpCall + ): ModelApiResponse { TODO() } } diff --git a/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt b/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt index 015eb93bc29a..0c16becce15d 100644 --- a/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt +++ b/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt @@ -23,6 +23,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -40,7 +41,8 @@ class StoreApiAction @Inject constructor( @Description("Delete purchase order by ID") @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun deleteOrder( - @PathParam("orderId") orderId: kotlin.String) { + @PathParam("orderId") orderId: kotlin.String + ): Response { TODO() } @@ -48,7 +50,8 @@ class StoreApiAction @Inject constructor( @Description("Returns pet inventories by status") @ResponseContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) - fun getInventory(): kotlin.collections.Map { + fun getInventory( + ): kotlin.collections.Map { TODO() } @@ -57,7 +60,8 @@ class StoreApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun getOrderById( - @Min(1L) @Max(5L) @PathParam("orderId") orderId: kotlin.Long): Order { + @Min(1L) @Max(5L) @PathParam("orderId") orderId: kotlin.Long + ): Order { TODO() } @@ -67,7 +71,8 @@ class StoreApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun placeOrder( - @Valid @RequestBody order: Order): Order { + @Valid @RequestBody order: Order + ): Order { TODO() } } diff --git a/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt b/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt index 7813ec3924f5..0de1aab0cb10 100644 --- a/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt +++ b/samples/server/petstore/kotlin-misk-config/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt @@ -23,6 +23,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -41,7 +42,8 @@ class UserApiAction @Inject constructor( @RequestContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun createUser( - @Valid @RequestBody user: User) { + @Valid @RequestBody user: User + ): Response { TODO() } @@ -50,7 +52,8 @@ class UserApiAction @Inject constructor( @RequestContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun createUsersWithArrayInput( - @Valid @RequestBody user: kotlin.Array) { + @Valid @RequestBody user: kotlin.Array + ): Response { TODO() } @@ -59,7 +62,8 @@ class UserApiAction @Inject constructor( @RequestContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun createUsersWithListInput( - @Valid @RequestBody user: kotlin.Array) { + @Valid @RequestBody user: kotlin.Array + ): Response { TODO() } @@ -67,7 +71,8 @@ class UserApiAction @Inject constructor( @Description("Delete user") @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun deleteUser( - @PathParam("username") username: kotlin.String) { + @PathParam("username") username: kotlin.String + ): Response { TODO() } @@ -76,7 +81,8 @@ class UserApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun getUserByName( - @PathParam("username") username: kotlin.String): User { + @PathParam("username") username: kotlin.String + ): User { TODO() } @@ -86,14 +92,16 @@ class UserApiAction @Inject constructor( @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun loginUser( @QueryParam(value = "username") username: kotlin.String, - @QueryParam(value = "password") password: kotlin.String): kotlin.String { + @QueryParam(value = "password") password: kotlin.String + ): kotlin.String { TODO() } @Get("samplePrefix/user/logout") @Description("Logs out current logged in user session") @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) - fun logoutUser() { + fun logoutUser( + ): Response { TODO() } @@ -103,7 +111,8 @@ class UserApiAction @Inject constructor( @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun updateUser( @PathParam("username") username: kotlin.String, - @Valid @RequestBody user: User) { + @Valid @RequestBody user: User + ): Response { TODO() } } diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt index 03dbed65321c..055c83afa55d 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt @@ -23,6 +23,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -43,7 +44,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun addPet( - @Valid @RequestBody pet: Pet): Pet { + @Valid @RequestBody pet: Pet + ): Pet { TODO() } @@ -52,7 +54,8 @@ class PetApiAction @Inject constructor( @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun deletePet( @PathParam("petId") petId: kotlin.Long, - @RequestHeader(value = "api_key") apiKey: kotlin.String?) { + @RequestHeader(value = "api_key") apiKey: kotlin.String? + ): Response { TODO() } @@ -61,7 +64,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun findPetsByStatus( - @QueryParam(value = "status") status: kotlin.Array): kotlin.Array { + @QueryParam(value = "status") status: kotlin.Array + ): kotlin.Array { TODO() } @@ -70,7 +74,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun findPetsByTags( - @QueryParam(value = "tags") tags: kotlin.Array): kotlin.Array { + @QueryParam(value = "tags") tags: kotlin.Array + ): kotlin.Array { TODO() } @@ -79,7 +84,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun getPetById( - @PathParam("petId") petId: kotlin.Long): Pet { + @PathParam("petId") petId: kotlin.Long + ): Pet { TODO() } @@ -89,7 +95,8 @@ class PetApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun updatePet( - @Valid @RequestBody pet: Pet): Pet { + @Valid @RequestBody pet: Pet + ): Pet { TODO() } @@ -100,7 +107,8 @@ class PetApiAction @Inject constructor( fun updatePetWithForm( @PathParam("petId") petId: kotlin.Long, @QueryParam(value = "name") name: kotlin.String? , - @QueryParam(value = "status") status: kotlin.String? ) { + @QueryParam(value = "status") status: kotlin.String? + ): Response { TODO() } @@ -112,7 +120,8 @@ class PetApiAction @Inject constructor( fun uploadFile( @PathParam("petId") petId: kotlin.Long, @QueryParam(value = "additionalMetadata") additionalMetadata: kotlin.String? , - @Valid file: HttpCall): ModelApiResponse { + @Valid file: HttpCall + ): ModelApiResponse { TODO() } } diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt index 0df386215f4d..34ee5d05bd05 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt @@ -23,6 +23,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -40,7 +41,8 @@ class StoreApiAction @Inject constructor( @Description("Delete purchase order by ID") @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun deleteOrder( - @PathParam("orderId") orderId: kotlin.String) { + @PathParam("orderId") orderId: kotlin.String + ): Response { TODO() } @@ -48,7 +50,8 @@ class StoreApiAction @Inject constructor( @Description("Returns pet inventories by status") @ResponseContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) - fun getInventory(): kotlin.collections.Map { + fun getInventory( + ): kotlin.collections.Map { TODO() } @@ -57,7 +60,8 @@ class StoreApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun getOrderById( - @Min(1L) @Max(5L) @PathParam("orderId") orderId: kotlin.Long): Order { + @Min(1L) @Max(5L) @PathParam("orderId") orderId: kotlin.Long + ): Order { TODO() } @@ -67,7 +71,8 @@ class StoreApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun placeOrder( - @Valid @RequestBody order: Order): Order { + @Valid @RequestBody order: Order + ): Order { TODO() } } diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt index 4195eea210f5..6c7e4c313423 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt @@ -23,6 +23,7 @@ import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestContentType import misk.web.RequestHeader +import misk.web.Response import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse @@ -41,7 +42,8 @@ class UserApiAction @Inject constructor( @RequestContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun createUser( - @Valid @RequestBody user: User) { + @Valid @RequestBody user: User + ): Response { TODO() } @@ -50,7 +52,8 @@ class UserApiAction @Inject constructor( @RequestContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun createUsersWithArrayInput( - @Valid @RequestBody user: kotlin.Array) { + @Valid @RequestBody user: kotlin.Array + ): Response { TODO() } @@ -59,7 +62,8 @@ class UserApiAction @Inject constructor( @RequestContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun createUsersWithListInput( - @Valid @RequestBody user: kotlin.Array) { + @Valid @RequestBody user: kotlin.Array + ): Response { TODO() } @@ -67,7 +71,8 @@ class UserApiAction @Inject constructor( @Description("Delete user") @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun deleteUser( - @PathParam("username") username: kotlin.String) { + @PathParam("username") username: kotlin.String + ): Response { TODO() } @@ -76,7 +81,8 @@ class UserApiAction @Inject constructor( @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun getUserByName( - @PathParam("username") username: kotlin.String): User { + @PathParam("username") username: kotlin.String + ): User { TODO() } @@ -86,14 +92,16 @@ class UserApiAction @Inject constructor( @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun loginUser( @QueryParam(value = "username") username: kotlin.String, - @QueryParam(value = "password") password: kotlin.String): kotlin.String { + @QueryParam(value = "password") password: kotlin.String + ): kotlin.String { TODO() } @Get("/user/logout") @Description("Logs out current logged in user session") @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) - fun logoutUser() { + fun logoutUser( + ): Response { TODO() } @@ -103,7 +111,8 @@ class UserApiAction @Inject constructor( @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) fun updateUser( @PathParam("username") username: kotlin.String, - @Valid @RequestBody user: User) { + @Valid @RequestBody user: User + ): Response { TODO() } } From 64337ed9ebe35eb4e19a6f0a27b3c67b866a32f3 Mon Sep 17 00:00:00 2001 From: andrewwilsonnew Date: Thu, 5 Jun 2025 20:38:54 +0100 Subject: [PATCH 2/2] first pass 2 --- .../resources/kotlin-misk/apiAction.mustache | 27 ++++++++++--------- .../resources/kotlin-misk/apiImpl.mustache | 5 ++-- .../kotlin-misk/apiInterface.mustache | 5 ++-- .../resources/kotlin-misk/api_test.mustache | 26 ++++++++++-------- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache index a4ab68319c1d..81dc16924002 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache @@ -13,6 +13,9 @@ import {{javaxPackage}}.validation.constraints.NotNull import {{javaxPackage}}.validation.constraints.Pattern import {{javaxPackage}}.validation.constraints.Size {{/useBeanValidation}} +{{#actionImports}} +import {{{.}}} +{{/actionImports}} import misk.web.Delete import misk.web.Description import misk.web.Get @@ -30,7 +33,8 @@ import misk.web.ResponseContentType import misk.web.actions.WebAction import misk.web.interceptors.LogRequestResponse import misk.web.mediatype.MediaTypes -{{#imports}}import {{import}} +{{#imports}} +import {{import}} {{/imports}} /** @@ -39,21 +43,20 @@ import misk.web.mediatype.MediaTypes {{#operations}} @Singleton class {{classname}}Action @Inject constructor( -) : WebAction { +) : {{actionParentClass}} { {{#operation}} - @{{httpMethod}}("{{actionPathPrefix}}{{path}}") + @{{httpMethod}}("{{{actionPathPrefix}}}{{path}}") @Description("{{{summary}}}"){{#hasConsumes}} - @RequestContentType({{#consumes}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/consumes}}){{/hasConsumes}}{{#hasProduces}} - @ResponseContentType({{#produces}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}){{/hasProduces}} - @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) - fun {{operationId}}( -{{#allParams}} - {{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}} -{{/allParams}} - ): {{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Response{{/returnType}} { + {{{actionRequestContentType}}}({{#consumes}}{{{actionRequestContentTypePrefix}}}.{{{mediaType}}}{{^-last}}, {{/-last}}{{/consumes}}){{/hasConsumes}}{{#hasProduces}} + @ResponseContentType({{#produces}}MediaTypes.{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}){{/hasProduces}} +{{#actionAnnotations}} + {{{.}}} +{{/actionAnnotations}} + fun {{operationId}}({{#allParams}} + {{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}}: {{{returnType}}}{{/returnType}} { TODO() } {{/operation}} } -{{/operations}} +{{/operations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/apiImpl.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/apiImpl.mustache index 8d6111270c4c..b21710519147 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/apiImpl.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/apiImpl.mustache @@ -18,7 +18,8 @@ import misk.web.PathParam import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestHeader -{{#imports}}import {{import}} +{{#imports}} +import {{import}} {{/imports}} /** @@ -36,4 +37,4 @@ class {{classname}}Impl @Inject constructor( } {{/operation}} } -{{/operations}} +{{/operations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/apiInterface.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/apiInterface.mustache index d5ea5e41b7e2..fa671697cfa4 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/apiInterface.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/apiInterface.mustache @@ -16,7 +16,8 @@ import misk.web.PathParam import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestHeader -{{#imports}}import {{import}} +{{#imports}} +import {{import}} {{/imports}} {{#operations}} @@ -27,4 +28,4 @@ interface {{classname}} { {{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}}: {{{returnType}}}{{/returnType}} { {{/operation}} } -{{/operations}} +{{/operations}} \ No newline at end of file diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/api_test.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/api_test.mustache index f689683db043..904c13954fcf 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/api_test.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/api_test.mustache @@ -1,36 +1,40 @@ package {{package}} +import {{{testingModule}}} import {{javaxPackage}}.inject.Inject import misk.testing.MiskTest +import misk.testing.MiskTestModule import org.junit.jupiter.api.Test - import misk.web.HttpCall import misk.web.PathParam import misk.web.QueryParam import misk.web.RequestBody import misk.web.RequestHeader - -{{#imports}}import {{import}} +{{#imports}} +import {{import}} {{/imports}} @MiskTest(startService = true) internal class {{classname}}Test { + @Suppress("unused") + @MiskTestModule + private val module = {{{testingModuleName}}}() + @Inject private lateinit var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}: {{classname}}Action +{{#operations}} +{{#operation}} - {{#operations}} - {{#operation}} /** * To test {{classname}}Action.{{operationId}} */ @Test fun `should handle {{operationId}}`() { - {{#allParams}} +{{#allParams}} val {{{paramName}}} = TODO() - {{/allParams}} +{{/allParams}} val response{{#returnType}}: {{{returnType}}}{{/returnType}} = {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.{{operationId}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) } - - {{/operation}} - {{/operations}} -} +{{/operation}} +{{/operations}} +} \ No newline at end of file