diff --git a/README.md b/README.md index ad6f544c63b..3fa2939f112 100644 --- a/README.md +++ b/README.md @@ -1139,7 +1139,7 @@ Here is a list of template creators: * Kotlin (Spring Boot): @dr4ke616 * Kotlin (Vertx): @Wooyme * Kotlin (JAX-RS): @anttileppa - * Kotlin Misk: @andrewwilsonnew + * Kotlin Misk: @andrewwilsonnew @guiarn * Kotlin WireMock: @stefankoppier * NodeJS Express: @YishTish * PHP Flight: @daniel-sc 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 41b5e9b86de..ced734ba4eb 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 @@ -57,8 +57,7 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be protected String rootPackage = "org.openapitools.server.api"; protected String apiVersion = "1.0.0-SNAPSHOT"; - @Setter - protected String moduleClassName = "OpenApiModule"; + @Setter protected String moduleClassName = "OpenApiModule"; @Override public CodegenType getTag() { @@ -122,7 +121,7 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be supportingFiles.clear(); apiTemplateFiles.clear(); - apiTemplateFiles.put("apiController.mustache", "Controller.kt"); + apiTemplateFiles.put("apiAction.mustache", "Action.kt"); apiTemplateFiles.put("apiImpl.mustache", "Impl.kt"); apiTemplateFiles.put("apiInterface.mustache", ".kt"); modelTemplateFiles.put("model.mustache", ".kt"); @@ -199,30 +198,38 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be } private String mapMediaType(String mediaType) { - return MEDIA_MAPPING.getOrDefault(mediaType, "MediaTypes.APPLICATION_OCTETSTREAM /* unknown -> " + mediaType + " */ "); + return MEDIA_MAPPING.getOrDefault(mediaType, "MediaTypes.APPLICATION_OCTETSTREAM /* @todo(unknown) -> " + mediaType + " */ "); } private final static Map MEDIA_MAPPING = getMappings(); private static Map getMappings() { + // add new values in order Map result = new HashMap<>(); - result.put("application/json", "MediaTypes.APPLICATION_JSON"); - result.put("application/xml", "MediaTypes.APPLICATION_XML"); - result.put("application/javascript", "MediaTypes.APPLICATION_JAVASCRIPT"); result.put("*/*", "MediaTypes.ALL"); - result.put("application/x-www-form-urlencoded", "MediaTypes.APPLICATION_FORM_URLENCODED"); + + result.put("application/grpc", "MediaTypes.APPLICATION_GRPC"); + result.put("application/javascript", "MediaTypes.APPLICATION_JAVASCRIPT"); + result.put("application/json", "MediaTypes.APPLICATION_JSON"); result.put("application/octetstream", "MediaTypes.APPLICATION_OCTETSTREAM"); result.put("application/pdf", "MediaTypes.APPLICATION_OCTETSTREAM"); result.put("application/x-protobuf", "MediaTypes.APPLICATION_PROTOBUF"); - result.put("application/grpc", "MediaTypes.APPLICATION_GRPC"); + result.put("application/x-www-form-urlencoded", "MediaTypes.APPLICATION_FORM_URLENCODED"); + result.put("application/xml", "MediaTypes.APPLICATION_XML"); + result.put("application/zip", "MediaTypes.APPLICATION_ZIP"); + + result.put("image/gif", "MediaTypes.IMAGE_GIF"); + result.put("image/jpeg", "MediaTypes.IMAGE_JPEG"); + result.put("image/png", "MediaTypes.IMAGE_PNG"); + result.put("image/svg+xml", "MediaTypes.IMAGE_SVG"); + result.put("image/x-icon", "MediaTypes.IMAGE_ICO"); + + result.put("multipart/form-data", "MediaTypes.FORM_DATA"); + result.put("text/css", "MediaTypes.TEXT_CSS"); result.put("text/html", "MediaTypes.TEXT_HTML"); result.put("text/plain", "MediaTypes.TEXT_PLAIN_UTF8"); - result.put("image/png", "MediaTypes.IMAGE_PNG"); - result.put("image/svg+xml", "MediaTypes.IMAGE_SVG"); - result.put("image/jpeg", "MediaTypes.IMAGE_JPEG"); - result.put("image/gif", "MediaTypes.IMAGE_GIF"); - result.put("image/x-icon", "MediaTypes.IMAGE_ICO"); + return result; } } diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/apiController.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache similarity index 94% rename from modules/openapi-generator/src/main/resources/kotlin-misk/apiController.mustache rename to modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache index 9c655f72d3a..33096b107f7 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/apiController.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/apiAction.mustache @@ -34,10 +34,10 @@ import misk.web.mediatype.MediaTypes {{#operations}} /** - * Generated file, please change {{classname}}Controller. + * Generated file, please change {{classname}}Impl. */ @Singleton -class {{classname}}Controller @Inject constructor( +class {{classname}}Action @Inject constructor( private val {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}: {{classname}} ) : WebAction, {{classname}} { {{#operation}} 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 a54748ce0bf..c7246308eee 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 @@ -21,7 +21,7 @@ internal class {{classname}}Test { {{#operations}} {{#operation}} /** - * To test {{classname}}Controller.{{operationId}} + * To test {{classname}}Action.{{operationId}} */ @Test fun `should handle {{operationId}}`() { diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/build.gradle.kts.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/build.gradle.kts.mustache index 0f5d4e86562..15467331036 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/build.gradle.kts.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/build.gradle.kts.mustache @@ -9,7 +9,7 @@ version = "{{artifactVersion}}" dependencies { implementation("jakarta.validation:jakarta.validation-api:3.1.1") - implementation("com.squareup.misk:misk:2025.03.17.160337-2c6953c") + implementation("com.squareup.misk:misk:2025.04.02.195630-a61d550") //implementation("com.squareup.wire:wire-runtime:5.2.1") testImplementation("com.squareup.misk:misk-testing:2025.02.11.123913-8a41324") diff --git a/modules/openapi-generator/src/main/resources/kotlin-misk/miskModule.mustache b/modules/openapi-generator/src/main/resources/kotlin-misk/miskModule.mustache index 38d235b33a5..41eaf2349c0 100644 --- a/modules/openapi-generator/src/main/resources/kotlin-misk/miskModule.mustache +++ b/modules/openapi-generator/src/main/resources/kotlin-misk/miskModule.mustache @@ -6,7 +6,7 @@ import {{javaxPackage}}.inject.Singleton {{#apiInfo}} {{#apis}} {{#operations}} -import {{apiPackage}}.{{classname}}Controller +import {{apiPackage}}.{{classname}}Action {{/operations}} {{/apis}} {{/apiInfo}} @@ -17,7 +17,7 @@ class {{moduleClassName}} : KAbstractModule() { {{#apiInfo}} {{#apis}} {{#operations}} - install(WebActionModule.create<{{classname}}Controller>()) + install(WebActionModule.create<{{classname}}Action>()) {{/operations}} {{/apis}} {{/apiInfo}} diff --git a/samples/server/petstore/kotlin-misk/.openapi-generator/FILES b/samples/server/petstore/kotlin-misk/.openapi-generator/FILES index 6f07b4ceb39..ed8ab6f1232 100644 --- a/samples/server/petstore/kotlin-misk/.openapi-generator/FILES +++ b/samples/server/petstore/kotlin-misk/.openapi-generator/FILES @@ -11,14 +11,14 @@ docs/User.md docs/UserApi.md settings.gradle.kts src/main/kotlin/org/openapitools/server/api/api/PetApi.kt -src/main/kotlin/org/openapitools/server/api/api/PetApiController.kt +src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt src/main/kotlin/org/openapitools/server/api/api/PetApiImpl.kt src/main/kotlin/org/openapitools/server/api/api/PetStoreModule.kt src/main/kotlin/org/openapitools/server/api/api/StoreApi.kt -src/main/kotlin/org/openapitools/server/api/api/StoreApiController.kt +src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt src/main/kotlin/org/openapitools/server/api/api/StoreApiImpl.kt src/main/kotlin/org/openapitools/server/api/api/UserApi.kt -src/main/kotlin/org/openapitools/server/api/api/UserApiController.kt +src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt src/main/kotlin/org/openapitools/server/api/api/UserApiImpl.kt src/main/kotlin/org/openapitools/server/api/model/Category.kt src/main/kotlin/org/openapitools/server/api/model/ModelApiResponse.kt diff --git a/samples/server/petstore/kotlin-misk/build.gradle.kts b/samples/server/petstore/kotlin-misk/build.gradle.kts index e831fc00dc9..84459bb4e50 100644 --- a/samples/server/petstore/kotlin-misk/build.gradle.kts +++ b/samples/server/petstore/kotlin-misk/build.gradle.kts @@ -9,7 +9,7 @@ version = "1.0.0-SNAPSHOT" dependencies { implementation("jakarta.validation:jakarta.validation-api:3.1.1") - implementation("com.squareup.misk:misk:2025.03.17.160337-2c6953c") + implementation("com.squareup.misk:misk:2025.04.02.195630-a61d550") //implementation("com.squareup.wire:wire-runtime:5.2.1") testImplementation("com.squareup.misk:misk-testing:2025.02.11.123913-8a41324") diff --git a/samples/server/petstore/kotlin-misk/docs/PetApi.md b/samples/server/petstore/kotlin-misk/docs/PetApi.md index 0e6c0c3b061..3d700679033 100644 --- a/samples/server/petstore/kotlin-misk/docs/PetApi.md +++ b/samples/server/petstore/kotlin-misk/docs/PetApi.md @@ -395,6 +395,6 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: MediaTypes.APPLICATION_OCTETSTREAM /* unknown -> multipart/form-data */ + - **Content-Type**: MediaTypes.FORM_DATA - **Accept**: MediaTypes.APPLICATION_JSON diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiController.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt similarity index 95% rename from samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiController.kt rename to samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt index 2f302f2410d..cf73a2047cd 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiController.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetApiAction.kt @@ -31,10 +31,10 @@ import org.openapitools.server.api.model.ModelApiResponse import org.openapitools.server.api.model.Pet /** - * Generated file, please change PetApiController. + * Generated file, please change PetApiImpl. */ @Singleton -class PetApiController @Inject constructor( +class PetApiAction @Inject constructor( private val petApi: PetApi ) : WebAction, PetApi { @@ -97,7 +97,7 @@ class PetApiController @Inject constructor( @Post("/pet/{petId}/uploadImage") @Description("uploads an image") - @RequestContentType(MediaTypes.APPLICATION_OCTETSTREAM /* unknown -> multipart/form-data */ ) + @RequestContentType(MediaTypes.FORM_DATA) @ResponseContentType(MediaTypes.APPLICATION_JSON) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) override fun uploadFile(@PathParam("petId") petId: kotlin.Long, @QueryParam(value = "additionalMetadata") additionalMetadata: kotlin.String? , @Valid file: HttpCall): ModelApiResponse { diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetStoreModule.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetStoreModule.kt index dd7be986219..8fd723ef00d 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetStoreModule.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/PetStoreModule.kt @@ -3,15 +3,15 @@ package org.openapitools.server.api.api import misk.inject.KAbstractModule import misk.web.WebActionModule import jakarta.inject.Singleton -import org.openapitools.server.api.api.PetApiController -import org.openapitools.server.api.api.StoreApiController -import org.openapitools.server.api.api.UserApiController +import org.openapitools.server.api.api.PetApiAction +import org.openapitools.server.api.api.StoreApiAction +import org.openapitools.server.api.api.UserApiAction @Singleton class PetStoreModule : KAbstractModule() { override fun configure() { - install(WebActionModule.create()) - install(WebActionModule.create()) - install(WebActionModule.create()) + install(WebActionModule.create()) + install(WebActionModule.create()) + install(WebActionModule.create()) } } \ No newline at end of file diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiController.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt similarity index 95% rename from samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiController.kt rename to samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt index 9d206cf5ae1..9a214c42a0d 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiController.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/StoreApiAction.kt @@ -30,10 +30,10 @@ import misk.web.mediatype.MediaTypes import org.openapitools.server.api.model.Order /** - * Generated file, please change StoreApiController. + * Generated file, please change StoreApiImpl. */ @Singleton -class StoreApiController @Inject constructor( +class StoreApiAction @Inject constructor( private val storeApi: StoreApi ) : WebAction, StoreApi { diff --git a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiController.kt b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt similarity index 97% rename from samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiController.kt rename to samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt index 423d6f7bebd..2fd31911598 100644 --- a/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiController.kt +++ b/samples/server/petstore/kotlin-misk/src/main/kotlin/org/openapitools/server/api/api/UserApiAction.kt @@ -30,10 +30,10 @@ import misk.web.mediatype.MediaTypes import org.openapitools.server.api.model.User /** - * Generated file, please change UserApiController. + * Generated file, please change UserApiImpl. */ @Singleton -class UserApiController @Inject constructor( +class UserApiAction @Inject constructor( private val userApi: UserApi ) : WebAction, UserApi { diff --git a/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/PetApiTest.kt b/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/PetApiTest.kt index 7df329bf7f6..148ff40fe47 100644 --- a/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/PetApiTest.kt +++ b/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/PetApiTest.kt @@ -19,7 +19,7 @@ internal class PetApiTest { @Inject private lateinit var petApi: PetApi /** - * To test PetApiController.addPet + * To test PetApiAction.addPet */ @Test fun `should handle addPet`() { @@ -28,7 +28,7 @@ internal class PetApiTest { } /** - * To test PetApiController.deletePet + * To test PetApiAction.deletePet */ @Test fun `should handle deletePet`() { @@ -38,7 +38,7 @@ internal class PetApiTest { } /** - * To test PetApiController.findPetsByStatus + * To test PetApiAction.findPetsByStatus */ @Test fun `should handle findPetsByStatus`() { @@ -47,7 +47,7 @@ internal class PetApiTest { } /** - * To test PetApiController.findPetsByTags + * To test PetApiAction.findPetsByTags */ @Test fun `should handle findPetsByTags`() { @@ -56,7 +56,7 @@ internal class PetApiTest { } /** - * To test PetApiController.getPetById + * To test PetApiAction.getPetById */ @Test fun `should handle getPetById`() { @@ -65,7 +65,7 @@ internal class PetApiTest { } /** - * To test PetApiController.updatePet + * To test PetApiAction.updatePet */ @Test fun `should handle updatePet`() { @@ -74,7 +74,7 @@ internal class PetApiTest { } /** - * To test PetApiController.updatePetWithForm + * To test PetApiAction.updatePetWithForm */ @Test fun `should handle updatePetWithForm`() { @@ -85,7 +85,7 @@ internal class PetApiTest { } /** - * To test PetApiController.uploadFile + * To test PetApiAction.uploadFile */ @Test fun `should handle uploadFile`() { diff --git a/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/StoreApiTest.kt b/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/StoreApiTest.kt index bc831cf9a2f..f225ab26ace 100644 --- a/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/StoreApiTest.kt +++ b/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/StoreApiTest.kt @@ -18,7 +18,7 @@ internal class StoreApiTest { @Inject private lateinit var storeApi: StoreApi /** - * To test StoreApiController.deleteOrder + * To test StoreApiAction.deleteOrder */ @Test fun `should handle deleteOrder`() { @@ -27,7 +27,7 @@ internal class StoreApiTest { } /** - * To test StoreApiController.getInventory + * To test StoreApiAction.getInventory */ @Test fun `should handle getInventory`() { @@ -35,7 +35,7 @@ internal class StoreApiTest { } /** - * To test StoreApiController.getOrderById + * To test StoreApiAction.getOrderById */ @Test fun `should handle getOrderById`() { @@ -44,7 +44,7 @@ internal class StoreApiTest { } /** - * To test StoreApiController.placeOrder + * To test StoreApiAction.placeOrder */ @Test fun `should handle placeOrder`() { diff --git a/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/UserApiTest.kt b/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/UserApiTest.kt index d3b5efc46c2..141087ecefc 100644 --- a/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/UserApiTest.kt +++ b/samples/server/petstore/kotlin-misk/src/test/kotlin/org/openapitools/server/api/api/UserApiTest.kt @@ -18,7 +18,7 @@ internal class UserApiTest { @Inject private lateinit var userApi: UserApi /** - * To test UserApiController.createUser + * To test UserApiAction.createUser */ @Test fun `should handle createUser`() { @@ -27,7 +27,7 @@ internal class UserApiTest { } /** - * To test UserApiController.createUsersWithArrayInput + * To test UserApiAction.createUsersWithArrayInput */ @Test fun `should handle createUsersWithArrayInput`() { @@ -36,7 +36,7 @@ internal class UserApiTest { } /** - * To test UserApiController.createUsersWithListInput + * To test UserApiAction.createUsersWithListInput */ @Test fun `should handle createUsersWithListInput`() { @@ -45,7 +45,7 @@ internal class UserApiTest { } /** - * To test UserApiController.deleteUser + * To test UserApiAction.deleteUser */ @Test fun `should handle deleteUser`() { @@ -54,7 +54,7 @@ internal class UserApiTest { } /** - * To test UserApiController.getUserByName + * To test UserApiAction.getUserByName */ @Test fun `should handle getUserByName`() { @@ -63,7 +63,7 @@ internal class UserApiTest { } /** - * To test UserApiController.loginUser + * To test UserApiAction.loginUser */ @Test fun `should handle loginUser`() { @@ -73,7 +73,7 @@ internal class UserApiTest { } /** - * To test UserApiController.logoutUser + * To test UserApiAction.logoutUser */ @Test fun `should handle logoutUser`() { @@ -81,7 +81,7 @@ internal class UserApiTest { } /** - * To test UserApiController.updateUser + * To test UserApiAction.updateUser */ @Test fun `should handle updateUser`() {