Kotlin Misk Add Extra Parameters (#21271)

* first pass

* squash

* fixing FILES
This commit is contained in:
Andrew Wilson 2025-05-16 07:37:49 +01:00 committed by GitHub
parent cfe0b6fae3
commit 9b39c05563
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
27 changed files with 283 additions and 143 deletions

View File

@ -3,9 +3,16 @@ outputDir: samples/server/petstore/kotlin-misk-config
inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml inputSpec: modules/openapi-generator/src/test/resources/3_0/petstore.yaml
templateDir: modules/openapi-generator/src/main/resources/kotlin-misk templateDir: modules/openapi-generator/src/main/resources/kotlin-misk
validateSpec: false validateSpec: false
useBeanValidation: true
additionalProperties: additionalProperties:
hideGenerationTimestamp: "true" hideGenerationTimestamp: "true"
moduleClassName: "PetStoreModule" moduleClassName: "PetStoreModule"
generateStubImplClasses: true generateStubImplClasses: true
addModelMoshiJsonAnnotation: true addModelMoshiJsonAnnotation: true
actionPathPrefix: "samplePrefix" actionPathPrefix: "samplePrefix"
actionAnnotations: "@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0);@Suppress(\"unused\")"
actionImports: "misk.web.actions.WebAction;misk.web.interceptors.LogRequestResponse"
actionParentClass: "WebAction"
actionRequestContentType: "@RequestContentType"
actionRequestContentTypePrefix: "MediaTypes"
testingModule: "misk.web.MiskWebModule"

View File

@ -18,7 +18,12 @@ These options may be applied as additional-properties (cli) or configOptions (pl
| Option | Description | Values | Default | | Option | Description | Values | Default |
| ------ | ----------- | ------ | ------- | | ------ | ----------- | ------ | ------- |
|actionAnnotations|String Annotations for Actions separated by a semicolon(;)| |@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0)|
|actionImports|String Imports for Actions separated by a semicolon(;)| |misk.web.actions.WebAction;misk.web.interceptors.LogRequestResponse|
|actionParentClass|Parent Class for Action| |WebAction|
|actionPathPrefix|Prefix for action path| || |actionPathPrefix|Prefix for action path| ||
|actionRequestContentType|Request ContentType for Action| |@RequestContentType|
|actionRequestContentTypePrefix|Request ContentType Prefix for Action| |MediaTypes|
|addModelMoshiJsonAnnotation|Add a Moshi JSON adapter annotation to all model classes| |true| |addModelMoshiJsonAnnotation|Add a Moshi JSON adapter annotation to all model classes| |true|
|additionalModelTypeAnnotations|Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)| |null| |additionalModelTypeAnnotations|Additional annotations for model type(class level annotations). List separated by semicolon(;) or new line (Linux or Windows)| |null|
|apiSuffix|suffix for api classes| |Api| |apiSuffix|suffix for api classes| |Api|
@ -35,6 +40,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
|sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |null| |sortModelPropertiesByRequiredFlag|Sort model properties to place required parameters before optional parameters.| |null|
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |null| |sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |null|
|sourceFolder|source folder for generated code| |src/main/kotlin| |sourceFolder|source folder for generated code| |src/main/kotlin|
|testingModule|Testing module class| |misk.testing.MiskTestModule|
|useBeanValidation|Use BeanValidation API annotations to validate data types| |true| |useBeanValidation|Use BeanValidation API annotations to validate data types| |true|
## IMPORT MAPPING ## IMPORT MAPPING

View File

@ -37,6 +37,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.util.Arrays;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -55,6 +56,13 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
private static final String ROOT_PACKAGE = "rootPackage"; private static final String ROOT_PACKAGE = "rootPackage";
public static final String GENERATE_STUB_IMPL_CLASSES = "generateStubImplClasses"; public static final String GENERATE_STUB_IMPL_CLASSES = "generateStubImplClasses";
public static final String ADD_MODEL_MOSHI_JSON_ANNOTATION = "addModelMoshiJsonAnnotation"; public static final String ADD_MODEL_MOSHI_JSON_ANNOTATION = "addModelMoshiJsonAnnotation";
public static final String ACTION_ANNOTATIONS = "actionAnnotations";
public static final String ACTION_IMPORTS = "actionImports";
public static final String ACTION_PARENT_CLASS = "actionParentClass";
public static final String ACTION_REQUEST_CONTENT_TYPE = "actionRequestContentType";
public static final String ACTION_REQUEST_CONTENT_TYPE_PREFIX = "actionRequestContentTypePrefix";
public static final String TESTING_MODULE = "testingModule";
private static final String TESTING_MODULE_NAME = "testingModuleName";
private boolean useBeanValidation = true; private boolean useBeanValidation = true;
@ -69,6 +77,15 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
@Setter protected String moduleClassName = "OpenApiModule"; @Setter protected String moduleClassName = "OpenApiModule";
@Setter protected String actionPathPrefix = ""; @Setter protected String actionPathPrefix = "";
@Setter protected List<String> actionAnnotations =
List.of("@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0)");
@Setter protected List<String> actionImports =
List.of("misk.web.actions.WebAction","misk.web.interceptors.LogRequestResponse");
@Setter protected String actionParentClass = "WebAction";
@Setter protected String actionRequestContentType = "@RequestContentType";
@Setter protected String actionRequestContentTypePrefix = "MediaTypes";
@Setter protected String testingModule = "misk.testing.MiskTestModule";
@Setter protected String testingModuleName;
@Override @Override
public CodegenType getTag() { public CodegenType getTag() {
@ -122,6 +139,12 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
addOption(MODULE_CLASS_NAME, "Name of the generated module class", moduleClassName); addOption(MODULE_CLASS_NAME, "Name of the generated module class", moduleClassName);
addOption(ACTION_PATH_PREFIX, "Prefix for action path", actionPathPrefix); addOption(ACTION_PATH_PREFIX, "Prefix for action path", actionPathPrefix);
addOption(ACTION_IMPORTS, "String Imports for Actions separated by a semicolon(;)", String.join(";", actionImports));
addOption(ACTION_ANNOTATIONS, "String Annotations for Actions separated by a semicolon(;)", String.join(";", actionAnnotations));
addOption(ACTION_PARENT_CLASS, "Parent Class for Action", actionParentClass);
addOption(ACTION_REQUEST_CONTENT_TYPE, "Request ContentType for Action", actionRequestContentType);
addOption(ACTION_REQUEST_CONTENT_TYPE_PREFIX, "Request ContentType Prefix for Action", actionRequestContentTypePrefix);
addOption(TESTING_MODULE, "Testing module class", testingModule);
apiTestTemplateFiles.clear(); apiTestTemplateFiles.clear();
apiTestTemplateFiles.put("api_test.mustache", ".kt"); apiTestTemplateFiles.put("api_test.mustache", ".kt");
@ -163,6 +186,23 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
public void processOpts() { public void processOpts() {
super.processOpts(); super.processOpts();
if (additionalProperties.containsKey(ACTION_ANNOTATIONS)) {
convertPropertyToTypeAndWriteBack(ACTION_ANNOTATIONS,
it -> Arrays.asList(it.split(";")), this::setActionAnnotations);
}
writePropertyBack(ACTION_ANNOTATIONS, actionAnnotations);
if (additionalProperties.containsKey(ACTION_IMPORTS)) {
convertPropertyToTypeAndWriteBack(ACTION_IMPORTS,
it -> Arrays.asList(it.split(";")), this::setActionImports);
}
writePropertyBack(ACTION_IMPORTS, actionImports);
if (additionalProperties.containsKey(ACTION_PARENT_CLASS)) {
setActionParentClass((String) additionalProperties.get(ACTION_PARENT_CLASS));
}
writePropertyBack(ACTION_PARENT_CLASS, actionParentClass);
if (additionalProperties.containsKey(MODULE_CLASS_NAME)) { if (additionalProperties.containsKey(MODULE_CLASS_NAME)) {
setModuleClassName((String) additionalProperties.get(MODULE_CLASS_NAME)); setModuleClassName((String) additionalProperties.get(MODULE_CLASS_NAME));
} }
@ -173,6 +213,23 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
} }
writePropertyBack(ACTION_PATH_PREFIX, actionPathPrefix); writePropertyBack(ACTION_PATH_PREFIX, actionPathPrefix);
if (additionalProperties.containsKey(ACTION_REQUEST_CONTENT_TYPE)) {
setActionRequestContentType((String) additionalProperties.get(ACTION_REQUEST_CONTENT_TYPE));
}
writePropertyBack(ACTION_REQUEST_CONTENT_TYPE, actionRequestContentType);
if (additionalProperties.containsKey(ACTION_REQUEST_CONTENT_TYPE_PREFIX)) {
setActionRequestContentTypePrefix((String) additionalProperties.get(ACTION_REQUEST_CONTENT_TYPE_PREFIX));
}
writePropertyBack(ACTION_REQUEST_CONTENT_TYPE_PREFIX, actionRequestContentTypePrefix);
if (additionalProperties.containsKey(TESTING_MODULE)) {
setTestingModule((String) additionalProperties.get(TESTING_MODULE));
}
writePropertyBack(TESTING_MODULE, testingModule);
writePropertyBack(TESTING_MODULE_NAME, getTestingModuleName());
if (additionalProperties.containsKey(USE_BEANVALIDATION)) { if (additionalProperties.containsKey(USE_BEANVALIDATION)) {
this.setUseBeanValidation(convertPropertyToBoolean(USE_BEANVALIDATION)); this.setUseBeanValidation(convertPropertyToBoolean(USE_BEANVALIDATION));
} }
@ -187,6 +244,7 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
setAddModelMoshiJsonAnnotation(convertPropertyToBoolean(ADD_MODEL_MOSHI_JSON_ANNOTATION)); setAddModelMoshiJsonAnnotation(convertPropertyToBoolean(ADD_MODEL_MOSHI_JSON_ANNOTATION));
} }
writePropertyBack(ADD_MODEL_MOSHI_JSON_ANNOTATION, addModelMoshiJsonAnnotation); writePropertyBack(ADD_MODEL_MOSHI_JSON_ANNOTATION, addModelMoshiJsonAnnotation);
applyJakartaPackage(); applyJakartaPackage();
String apiModuleFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator); String apiModuleFolder = (sourceFolder + File.separator + apiPackage).replace(".", File.separator);
@ -230,7 +288,11 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
} }
private String mapMediaType(String mediaType) { private String mapMediaType(String mediaType) {
return MEDIA_MAPPING.getOrDefault(mediaType, "MediaTypes.APPLICATION_OCTETSTREAM /* @todo(unknown) -> " + mediaType + " */ "); return MEDIA_MAPPING.getOrDefault(mediaType, "APPLICATION_OCTETSTREAM /* @todo(unknown) -> " + mediaType + " */ ");
}
public String getTestingModuleName() {
return testingModule.substring(testingModule.lastIndexOf(".")+1);
} }
private final static Map<String, String> MEDIA_MAPPING = getMappings(); private final static Map<String, String> MEDIA_MAPPING = getMappings();
@ -238,31 +300,31 @@ public class KotlinMiskServerCodegen extends AbstractKotlinCodegen implements Be
private static Map<String, String> getMappings() { private static Map<String, String> getMappings() {
// add new values in order // add new values in order
Map<String, String> result = new HashMap<>(); Map<String, String> result = new HashMap<>();
result.put("*/*", "MediaTypes.ALL"); result.put("*/*", "ALL");
result.put("application/grpc", "MediaTypes.APPLICATION_GRPC"); result.put("application/grpc", "APPLICATION_GRPC");
result.put("application/javascript", "MediaTypes.APPLICATION_JAVASCRIPT"); result.put("application/javascript", "APPLICATION_JAVASCRIPT");
result.put("application/json", "MediaTypes.APPLICATION_JSON"); result.put("application/json", "APPLICATION_JSON");
result.put("application/jwt", "MediaTypes.APPLICATION_JWT"); result.put("application/jwt", "APPLICATION_JWT");
result.put("application/octetstream", "MediaTypes.APPLICATION_OCTETSTREAM"); result.put("application/octetstream", "APPLICATION_OCTETSTREAM");
result.put("application/pdf", "MediaTypes.APPLICATION_OCTETSTREAM"); result.put("application/pdf", "APPLICATION_OCTETSTREAM");
result.put("application/x-protobuf", "MediaTypes.APPLICATION_PROTOBUF"); result.put("application/x-protobuf", "APPLICATION_PROTOBUF");
result.put("application/x-www-form-urlencoded", "MediaTypes.APPLICATION_FORM_URLENCODED"); result.put("application/x-www-form-urlencoded", "APPLICATION_FORM_URLENCODED");
result.put("application/xml", "MediaTypes.APPLICATION_XML"); result.put("application/xml", "APPLICATION_XML");
result.put("application/zip", "MediaTypes.APPLICATION_ZIP"); result.put("application/zip", "APPLICATION_ZIP");
result.put("image/gif", "MediaTypes.IMAGE_GIF"); result.put("image/gif", "IMAGE_GIF");
result.put("image/x-icon", "MediaTypes.IMAGE_ICO"); result.put("image/x-icon", "IMAGE_ICO");
result.put("image/jpeg", "MediaTypes.IMAGE_JPEG"); result.put("image/jpeg", "IMAGE_JPEG");
result.put("image/png", "MediaTypes.IMAGE_PNG"); result.put("image/png", "IMAGE_PNG");
result.put("image/svg+xml", "MediaTypes.IMAGE_SVG"); result.put("image/svg+xml", "IMAGE_SVG");
result.put("image/tiff", "MediaTypes.IMAGE_TIFF"); result.put("image/tiff", "IMAGE_TIFF");
result.put("multipart/form-data", "MediaTypes.FORM_DATA"); result.put("multipart/form-data", "FORM_DATA");
result.put("text/css", "MediaTypes.TEXT_CSS"); result.put("text/css", "TEXT_CSS");
result.put("text/html", "MediaTypes.TEXT_HTML"); result.put("text/html", "TEXT_HTML");
result.put("text/plain", "MediaTypes.TEXT_PLAIN_UTF8"); result.put("text/plain", "TEXT_PLAIN_UTF8");
return result; return result;
} }

View File

@ -13,6 +13,9 @@ import {{javaxPackage}}.validation.constraints.NotNull
import {{javaxPackage}}.validation.constraints.Pattern import {{javaxPackage}}.validation.constraints.Pattern
import {{javaxPackage}}.validation.constraints.Size import {{javaxPackage}}.validation.constraints.Size
{{/useBeanValidation}} {{/useBeanValidation}}
{{#actionImports}}
import {{{.}}}
{{/actionImports}}
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -26,10 +29,9 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
{{#imports}}import {{import}} {{#imports}}
import {{import}}
{{/imports}} {{/imports}}
/** /**
@ -38,14 +40,16 @@ import misk.web.mediatype.MediaTypes
{{#operations}} {{#operations}}
@Singleton @Singleton
class {{classname}}Action @Inject constructor( class {{classname}}Action @Inject constructor(
) : WebAction { ) : {{actionParentClass}} {
{{#operation}} {{#operation}}
@{{httpMethod}}("{{actionPathPrefix}}{{path}}") @{{httpMethod}}("{{{actionPathPrefix}}}{{path}}")
@Description("{{{summary}}}"){{#hasConsumes}} @Description("{{{summary}}}"){{#hasConsumes}}
@RequestContentType({{#consumes}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/consumes}}){{/hasConsumes}}{{#hasProduces}} {{{actionRequestContentType}}}({{#consumes}}{{{actionRequestContentTypePrefix}}}.{{{mediaType}}}{{^-last}}, {{/-last}}{{/consumes}}){{/hasConsumes}}{{#hasProduces}}
@ResponseContentType({{#produces}}{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}){{/hasProduces}} @ResponseContentType({{#produces}}MediaTypes.{{{mediaType}}}{{^-last}}, {{/-last}}{{/produces}}){{/hasProduces}}
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) {{#actionAnnotations}}
{{{.}}}
{{/actionAnnotations}}
fun {{operationId}}({{#allParams}} fun {{operationId}}({{#allParams}}
{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}}: {{{returnType}}}{{/returnType}} { {{>queryParams}}{{>pathParams}}{{>headerParams}}{{>cookieParams}}{{>bodyParams}}{{>formParams}}{{^-last}}, {{/-last}}{{/allParams}}){{#returnType}}: {{{returnType}}}{{/returnType}} {
TODO() TODO()

View File

@ -18,7 +18,8 @@ import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
{{#imports}}import {{import}} {{#imports}}
import {{import}}
{{/imports}} {{/imports}}
/** /**

View File

@ -16,7 +16,8 @@ import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
{{#imports}}import {{import}} {{#imports}}
import {{import}}
{{/imports}} {{/imports}}
{{#operations}} {{#operations}}

View File

@ -1,25 +1,30 @@
package {{package}} package {{package}}
import {{{testingModule}}}
import {{javaxPackage}}.inject.Inject import {{javaxPackage}}.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
{{#imports}}
{{#imports}}import {{import}} import {{import}}
{{/imports}} {{/imports}}
@MiskTest(startService = true) @MiskTest(startService = true)
internal class {{classname}}Test { internal class {{classname}}Test {
@Inject private lateinit var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}: {{classname}}Action @Suppress("unused")
@MiskTestModule
private val module = {{{testingModuleName}}}()
@Inject private lateinit var {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}: {{classname}}Action
{{#operations}} {{#operations}}
{{#operation}} {{#operation}}
/** /**
* To test {{classname}}Action.{{operationId}} * To test {{classname}}Action.{{operationId}}
*/ */
@ -30,7 +35,6 @@ internal class {{classname}}Test {
{{/allParams}} {{/allParams}}
val response{{#returnType}}: {{{returnType}}}{{/returnType}} = {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.{{operationId}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}}) val response{{#returnType}}: {{{returnType}}}{{/returnType}} = {{#lambda.camelcase}}{{classname}}{{/lambda.camelcase}}.{{operationId}}({{#allParams}}{{{paramName}}}{{^-last}}, {{/-last}}{{/allParams}})
} }
{{/operation}} {{/operation}}
{{/operations}} {{/operations}}
} }

View File

@ -39,6 +39,11 @@ public class KotlinMiskServerCodegenOptionsTest extends AbstractOptionsTest {
verify(codegen).setUseBeanValidation(Boolean.valueOf(KotlinMiskServerCodegenOptionsProvider.USE_BEAN_VALIDATION)); verify(codegen).setUseBeanValidation(Boolean.valueOf(KotlinMiskServerCodegenOptionsProvider.USE_BEAN_VALIDATION));
verify(codegen).setModuleClassName(KotlinMiskServerCodegenOptionsProvider.MODULE_CLASS_NAME); verify(codegen).setModuleClassName(KotlinMiskServerCodegenOptionsProvider.MODULE_CLASS_NAME);
verify(codegen).setActionPathPrefix(KotlinMiskServerCodegenOptionsProvider.ACTION_PATH_PREFIX); verify(codegen).setActionPathPrefix(KotlinMiskServerCodegenOptionsProvider.ACTION_PATH_PREFIX);
verify(codegen).setActionImports(List.of("a.x","b.y"));
verify(codegen).setActionAnnotations(List.of("@c()","@d()"));
verify(codegen).setActionParentClass(KotlinMiskServerCodegenOptionsProvider.ACTION_PARENT_CLASS);
verify(codegen).setActionRequestContentType(KotlinMiskServerCodegenOptionsProvider.ACTION_REQUEST_CONTENT_TYPE);
verify(codegen).setActionRequestContentTypePrefix(KotlinMiskServerCodegenOptionsProvider.ACTION_REQUEST_CONTENT_TYPE_PREFIX);
verify(codegen).setGenerateStubImplClasses(Boolean.valueOf(KotlinMiskServerCodegenOptionsProvider.GENERATE_STUB_IMPL_CLASSES)); verify(codegen).setGenerateStubImplClasses(Boolean.valueOf(KotlinMiskServerCodegenOptionsProvider.GENERATE_STUB_IMPL_CLASSES));
verify(codegen).setAddModelMoshiJsonAnnotation(Boolean.valueOf(KotlinMiskServerCodegenOptionsProvider.ADD_MODEL_MOSHI_JSON_ANNOTATION)); verify(codegen).setAddModelMoshiJsonAnnotation(Boolean.valueOf(KotlinMiskServerCodegenOptionsProvider.ADD_MODEL_MOSHI_JSON_ANNOTATION));
} }

View File

@ -26,7 +26,13 @@ public class KotlinMiskServerCodegenOptionsProvider implements OptionsProvider {
public static final String GENERATE_STUB_IMPL_CLASSES = "false"; public static final String GENERATE_STUB_IMPL_CLASSES = "false";
public static final String ADD_MODEL_MOSHI_JSON_ANNOTATION = "true"; public static final String ADD_MODEL_MOSHI_JSON_ANNOTATION = "true";
public static final String MODULE_CLASS_NAME = "OpenApiModule"; public static final String MODULE_CLASS_NAME = "OpenApiModule";
public static final String ACTION_PATH_PREFIX = "samplePrefix"; public static final String ACTION_PATH_PREFIX = "samplePrefix<";
public static final String ACTION_IMPORTS = "a.x;b.y";
public static final String ACTION_ANNOTATIONS = "@c();@d()";
public static final String ACTION_PARENT_CLASS = "class<";
public static final String ACTION_REQUEST_CONTENT_TYPE = "contentType<";
public static final String ACTION_REQUEST_CONTENT_TYPE_PREFIX = "contentTypePrefix<";
public static final String TESTING_MODULE = "testingModule";
@Override @Override
public String getLanguage() { public String getLanguage() {
@ -55,8 +61,14 @@ public class KotlinMiskServerCodegenOptionsProvider implements OptionsProvider {
.put(KotlinMiskServerCodegen.MODULE_CLASS_NAME, MODULE_CLASS_NAME) .put(KotlinMiskServerCodegen.MODULE_CLASS_NAME, MODULE_CLASS_NAME)
.put(BeanValidationFeatures.USE_BEANVALIDATION, USE_BEAN_VALIDATION) .put(BeanValidationFeatures.USE_BEANVALIDATION, USE_BEAN_VALIDATION)
.put(KotlinMiskServerCodegen.ACTION_PATH_PREFIX, ACTION_PATH_PREFIX) .put(KotlinMiskServerCodegen.ACTION_PATH_PREFIX, ACTION_PATH_PREFIX)
.put(KotlinMiskServerCodegen.ACTION_IMPORTS, ACTION_IMPORTS)
.put(KotlinMiskServerCodegen.ACTION_ANNOTATIONS, ACTION_ANNOTATIONS)
.put(KotlinMiskServerCodegen.ACTION_PARENT_CLASS, ACTION_PARENT_CLASS)
.put(KotlinMiskServerCodegen.ACTION_REQUEST_CONTENT_TYPE, ACTION_REQUEST_CONTENT_TYPE)
.put(KotlinMiskServerCodegen.ACTION_REQUEST_CONTENT_TYPE_PREFIX, ACTION_REQUEST_CONTENT_TYPE_PREFIX)
.put(KotlinMiskServerCodegen.ADD_MODEL_MOSHI_JSON_ANNOTATION, ADD_MODEL_MOSHI_JSON_ANNOTATION) .put(KotlinMiskServerCodegen.ADD_MODEL_MOSHI_JSON_ANNOTATION, ADD_MODEL_MOSHI_JSON_ANNOTATION)
.put(KotlinMiskServerCodegen.GENERATE_STUB_IMPL_CLASSES, GENERATE_STUB_IMPL_CLASSES) .put(KotlinMiskServerCodegen.GENERATE_STUB_IMPL_CLASSES, GENERATE_STUB_IMPL_CLASSES)
.put(KotlinMiskServerCodegen.TESTING_MODULE, TESTING_MODULE)
.build(); .build();
} }

View File

@ -58,8 +58,8 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML - **Content-Type**: APPLICATION_JSON, APPLICATION_XML
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="deletePet"></a> <a name="deletePet"></a>
# **deletePet** # **deletePet**
@ -154,7 +154,7 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="findPetsByTags"></a> <a name="findPetsByTags"></a>
# **findPetsByTags** # **findPetsByTags**
@ -201,7 +201,7 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="getPetById"></a> <a name="getPetById"></a>
# **getPetById** # **getPetById**
@ -248,7 +248,7 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="updatePet"></a> <a name="updatePet"></a>
# **updatePet** # **updatePet**
@ -294,8 +294,8 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML - **Content-Type**: APPLICATION_JSON, APPLICATION_XML
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="updatePetWithForm"></a> <a name="updatePetWithForm"></a>
# **updatePetWithForm** # **updatePetWithForm**
@ -344,7 +344,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_FORM_URLENCODED - **Content-Type**: APPLICATION_FORM_URLENCODED
- **Accept**: Not defined - **Accept**: Not defined
<a name="uploadFile"></a> <a name="uploadFile"></a>
@ -395,6 +395,6 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.FORM_DATA - **Content-Type**: FORM_DATA
- **Accept**: MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_JSON

View File

@ -97,7 +97,7 @@ This endpoint does not need any parameter.
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_JSON
<a name="getOrderById"></a> <a name="getOrderById"></a>
# **getOrderById** # **getOrderById**
@ -144,7 +144,7 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="placeOrder"></a> <a name="placeOrder"></a>
# **placeOrder** # **placeOrder**
@ -190,6 +190,6 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON

View File

@ -57,7 +57,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined
<a name="createUsersWithArrayInput"></a> <a name="createUsersWithArrayInput"></a>
@ -103,7 +103,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined
<a name="createUsersWithListInput"></a> <a name="createUsersWithListInput"></a>
@ -149,7 +149,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined
<a name="deleteUser"></a> <a name="deleteUser"></a>
@ -243,7 +243,7 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="loginUser"></a> <a name="loginUser"></a>
# **loginUser** # **loginUser**
@ -292,7 +292,7 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="logoutUser"></a> <a name="logoutUser"></a>
# **logoutUser** # **logoutUser**
@ -381,6 +381,6 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined

View File

@ -11,6 +11,8 @@ import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size import jakarta.validation.constraints.Size
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -24,8 +26,6 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
import org.openapitools.server.api.model.ModelApiResponse import org.openapitools.server.api.model.ModelApiResponse
import org.openapitools.server.api.model.Pet import org.openapitools.server.api.model.Pet
@ -41,7 +41,8 @@ class PetApiAction @Inject constructor(
@Description("Add a new pet to the store") @Description("Add a new pet to the store")
@RequestContentType(MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML) @RequestContentType(MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML)
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun addPet( fun addPet(
@Valid @RequestBody pet: Pet): Pet { @Valid @RequestBody pet: Pet): Pet {
TODO() TODO()
@ -49,7 +50,8 @@ class PetApiAction @Inject constructor(
@Delete("samplePrefix/pet/{petId}") @Delete("samplePrefix/pet/{petId}")
@Description("Deletes a pet") @Description("Deletes a pet")
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun deletePet( fun deletePet(
@PathParam("petId") petId: kotlin.Long, @PathParam("petId") petId: kotlin.Long,
@RequestHeader(value = "api_key") apiKey: kotlin.String?) { @RequestHeader(value = "api_key") apiKey: kotlin.String?) {
@ -59,7 +61,8 @@ class PetApiAction @Inject constructor(
@Get("samplePrefix/pet/findByStatus") @Get("samplePrefix/pet/findByStatus")
@Description("Finds Pets by status") @Description("Finds Pets by status")
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun findPetsByStatus( fun findPetsByStatus(
@QueryParam(value = "status") status: kotlin.Array<kotlin.String>): kotlin.Array<Pet> { @QueryParam(value = "status") status: kotlin.Array<kotlin.String>): kotlin.Array<Pet> {
TODO() TODO()
@ -68,7 +71,8 @@ class PetApiAction @Inject constructor(
@Get("samplePrefix/pet/findByTags") @Get("samplePrefix/pet/findByTags")
@Description("Finds Pets by tags") @Description("Finds Pets by tags")
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun findPetsByTags( fun findPetsByTags(
@QueryParam(value = "tags") tags: kotlin.Array<kotlin.String>): kotlin.Array<Pet> { @QueryParam(value = "tags") tags: kotlin.Array<kotlin.String>): kotlin.Array<Pet> {
TODO() TODO()
@ -77,7 +81,8 @@ class PetApiAction @Inject constructor(
@Get("samplePrefix/pet/{petId}") @Get("samplePrefix/pet/{petId}")
@Description("Find pet by ID") @Description("Find pet by ID")
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun getPetById( fun getPetById(
@PathParam("petId") petId: kotlin.Long): Pet { @PathParam("petId") petId: kotlin.Long): Pet {
TODO() TODO()
@ -87,7 +92,8 @@ class PetApiAction @Inject constructor(
@Description("Update an existing pet") @Description("Update an existing pet")
@RequestContentType(MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML) @RequestContentType(MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML)
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun updatePet( fun updatePet(
@Valid @RequestBody pet: Pet): Pet { @Valid @RequestBody pet: Pet): Pet {
TODO() TODO()
@ -96,7 +102,8 @@ class PetApiAction @Inject constructor(
@Post("samplePrefix/pet/{petId}") @Post("samplePrefix/pet/{petId}")
@Description("Updates a pet in the store with form data") @Description("Updates a pet in the store with form data")
@RequestContentType(MediaTypes.APPLICATION_FORM_URLENCODED) @RequestContentType(MediaTypes.APPLICATION_FORM_URLENCODED)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun updatePetWithForm( fun updatePetWithForm(
@PathParam("petId") petId: kotlin.Long, @PathParam("petId") petId: kotlin.Long,
@QueryParam(value = "name") name: kotlin.String? , @QueryParam(value = "name") name: kotlin.String? ,
@ -108,7 +115,8 @@ class PetApiAction @Inject constructor(
@Description("uploads an image") @Description("uploads an image")
@RequestContentType(MediaTypes.FORM_DATA) @RequestContentType(MediaTypes.FORM_DATA)
@ResponseContentType(MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun uploadFile( fun uploadFile(
@PathParam("petId") petId: kotlin.Long, @PathParam("petId") petId: kotlin.Long,
@QueryParam(value = "additionalMetadata") additionalMetadata: kotlin.String? , @QueryParam(value = "additionalMetadata") additionalMetadata: kotlin.String? ,

View File

@ -11,6 +11,8 @@ import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size import jakarta.validation.constraints.Size
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -24,8 +26,6 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
import org.openapitools.server.api.model.Order import org.openapitools.server.api.model.Order
@ -38,7 +38,8 @@ class StoreApiAction @Inject constructor(
@Delete("samplePrefix/store/order/{orderId}") @Delete("samplePrefix/store/order/{orderId}")
@Description("Delete purchase order by ID") @Description("Delete purchase order by ID")
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun deleteOrder( fun deleteOrder(
@PathParam("orderId") orderId: kotlin.String) { @PathParam("orderId") orderId: kotlin.String) {
TODO() TODO()
@ -47,7 +48,8 @@ class StoreApiAction @Inject constructor(
@Get("samplePrefix/store/inventory") @Get("samplePrefix/store/inventory")
@Description("Returns pet inventories by status") @Description("Returns pet inventories by status")
@ResponseContentType(MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun getInventory(): kotlin.collections.Map<kotlin.String, kotlin.Int> { fun getInventory(): kotlin.collections.Map<kotlin.String, kotlin.Int> {
TODO() TODO()
} }
@ -55,7 +57,8 @@ class StoreApiAction @Inject constructor(
@Get("samplePrefix/store/order/{orderId}") @Get("samplePrefix/store/order/{orderId}")
@Description("Find purchase order by ID") @Description("Find purchase order by ID")
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun getOrderById( fun getOrderById(
@Min(1L) @Max(5L) @PathParam("orderId") orderId: kotlin.Long): Order { @Min(1L) @Max(5L) @PathParam("orderId") orderId: kotlin.Long): Order {
TODO() TODO()
@ -65,7 +68,8 @@ class StoreApiAction @Inject constructor(
@Description("Place an order for a pet") @Description("Place an order for a pet")
@RequestContentType(MediaTypes.APPLICATION_JSON) @RequestContentType(MediaTypes.APPLICATION_JSON)
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun placeOrder( fun placeOrder(
@Valid @RequestBody order: Order): Order { @Valid @RequestBody order: Order): Order {
TODO() TODO()

View File

@ -11,6 +11,8 @@ import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size import jakarta.validation.constraints.Size
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -24,8 +26,6 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
import org.openapitools.server.api.model.User import org.openapitools.server.api.model.User
@ -39,7 +39,8 @@ class UserApiAction @Inject constructor(
@Post("samplePrefix/user") @Post("samplePrefix/user")
@Description("Create user") @Description("Create user")
@RequestContentType(MediaTypes.APPLICATION_JSON) @RequestContentType(MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun createUser( fun createUser(
@Valid @RequestBody user: User) { @Valid @RequestBody user: User) {
TODO() TODO()
@ -48,7 +49,8 @@ class UserApiAction @Inject constructor(
@Post("samplePrefix/user/createWithArray") @Post("samplePrefix/user/createWithArray")
@Description("Creates list of users with given input array") @Description("Creates list of users with given input array")
@RequestContentType(MediaTypes.APPLICATION_JSON) @RequestContentType(MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun createUsersWithArrayInput( fun createUsersWithArrayInput(
@Valid @RequestBody user: kotlin.Array<User>) { @Valid @RequestBody user: kotlin.Array<User>) {
TODO() TODO()
@ -57,7 +59,8 @@ class UserApiAction @Inject constructor(
@Post("samplePrefix/user/createWithList") @Post("samplePrefix/user/createWithList")
@Description("Creates list of users with given input array") @Description("Creates list of users with given input array")
@RequestContentType(MediaTypes.APPLICATION_JSON) @RequestContentType(MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun createUsersWithListInput( fun createUsersWithListInput(
@Valid @RequestBody user: kotlin.Array<User>) { @Valid @RequestBody user: kotlin.Array<User>) {
TODO() TODO()
@ -65,7 +68,8 @@ class UserApiAction @Inject constructor(
@Delete("samplePrefix/user/{username}") @Delete("samplePrefix/user/{username}")
@Description("Delete user") @Description("Delete user")
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun deleteUser( fun deleteUser(
@PathParam("username") username: kotlin.String) { @PathParam("username") username: kotlin.String) {
TODO() TODO()
@ -74,7 +78,8 @@ class UserApiAction @Inject constructor(
@Get("samplePrefix/user/{username}") @Get("samplePrefix/user/{username}")
@Description("Get user by user name") @Description("Get user by user name")
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun getUserByName( fun getUserByName(
@PathParam("username") username: kotlin.String): User { @PathParam("username") username: kotlin.String): User {
TODO() TODO()
@ -83,7 +88,8 @@ class UserApiAction @Inject constructor(
@Get("samplePrefix/user/login") @Get("samplePrefix/user/login")
@Description("Logs user into the system") @Description("Logs user into the system")
@ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON) @ResponseContentType(MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun loginUser( fun loginUser(
@QueryParam(value = "username") username: kotlin.String, @QueryParam(value = "username") username: kotlin.String,
@QueryParam(value = "password") password: kotlin.String): kotlin.String { @QueryParam(value = "password") password: kotlin.String): kotlin.String {
@ -92,7 +98,8 @@ class UserApiAction @Inject constructor(
@Get("samplePrefix/user/logout") @Get("samplePrefix/user/logout")
@Description("Logs out current logged in user session") @Description("Logs out current logged in user session")
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun logoutUser() { fun logoutUser() {
TODO() TODO()
} }
@ -100,7 +107,8 @@ class UserApiAction @Inject constructor(
@Put("samplePrefix/user/{username}") @Put("samplePrefix/user/{username}")
@Description("Updated user") @Description("Updated user")
@RequestContentType(MediaTypes.APPLICATION_JSON) @RequestContentType(MediaTypes.APPLICATION_JSON)
@LogRequestResponse(bodySampling = 1.0, errorBodySampling = 1.0) @LogRequestResponse(bodySampling = 1.0, errorBodySampling = 2.0)
@Suppress("unused")
fun updateUser( fun updateUser(
@PathParam("username") username: kotlin.String, @PathParam("username") username: kotlin.String,
@Valid @RequestBody user: User) { @Valid @RequestBody user: User) {

View File

@ -1,22 +1,26 @@
package org.openapitools.server.api.api package org.openapitools.server.api.api
import misk.web.MiskWebModule
import jakarta.inject.Inject import jakarta.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
import org.openapitools.server.api.model.ModelApiResponse import org.openapitools.server.api.model.ModelApiResponse
import org.openapitools.server.api.model.Pet import org.openapitools.server.api.model.Pet
@MiskTest(startService = true) @MiskTest(startService = true)
internal class PetApiTest { internal class PetApiTest {
@Inject private lateinit var petApi: PetApi @Suppress("unused")
@MiskTestModule
private val module = MiskWebModule()
@Inject private lateinit var petApi: PetApiAction
/** /**
* To test PetApiAction.addPet * To test PetApiAction.addPet
@ -94,5 +98,4 @@ internal class PetApiTest {
val file = TODO() val file = TODO()
val response: ModelApiResponse = petApi.uploadFile(petId, additionalMetadata, file) val response: ModelApiResponse = petApi.uploadFile(petId, additionalMetadata, file)
} }
} }

View File

@ -1,21 +1,25 @@
package org.openapitools.server.api.api package org.openapitools.server.api.api
import misk.web.MiskWebModule
import jakarta.inject.Inject import jakarta.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
import org.openapitools.server.api.model.Order import org.openapitools.server.api.model.Order
@MiskTest(startService = true) @MiskTest(startService = true)
internal class StoreApiTest { internal class StoreApiTest {
@Inject private lateinit var storeApi: StoreApi @Suppress("unused")
@MiskTestModule
private val module = MiskWebModule()
@Inject private lateinit var storeApi: StoreApiAction
/** /**
* To test StoreApiAction.deleteOrder * To test StoreApiAction.deleteOrder
@ -51,5 +55,4 @@ internal class StoreApiTest {
val order = TODO() val order = TODO()
val response: Order = storeApi.placeOrder(order) val response: Order = storeApi.placeOrder(order)
} }
} }

View File

@ -1,21 +1,25 @@
package org.openapitools.server.api.api package org.openapitools.server.api.api
import misk.web.MiskWebModule
import jakarta.inject.Inject import jakarta.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
import org.openapitools.server.api.model.User import org.openapitools.server.api.model.User
@MiskTest(startService = true) @MiskTest(startService = true)
internal class UserApiTest { internal class UserApiTest {
@Inject private lateinit var userApi: UserApi @Suppress("unused")
@MiskTestModule
private val module = MiskWebModule()
@Inject private lateinit var userApi: UserApiAction
/** /**
* To test UserApiAction.createUser * To test UserApiAction.createUser
@ -89,5 +93,4 @@ internal class UserApiTest {
val user = TODO() val user = TODO()
val response = userApi.updateUser(username, user) val response = userApi.updateUser(username, user)
} }
} }

View File

@ -58,8 +58,8 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML - **Content-Type**: APPLICATION_JSON, APPLICATION_XML
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="deletePet"></a> <a name="deletePet"></a>
# **deletePet** # **deletePet**
@ -154,7 +154,7 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="findPetsByTags"></a> <a name="findPetsByTags"></a>
# **findPetsByTags** # **findPetsByTags**
@ -201,7 +201,7 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="getPetById"></a> <a name="getPetById"></a>
# **getPetById** # **getPetById**
@ -248,7 +248,7 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="updatePet"></a> <a name="updatePet"></a>
# **updatePet** # **updatePet**
@ -294,8 +294,8 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON, MediaTypes.APPLICATION_XML - **Content-Type**: APPLICATION_JSON, APPLICATION_XML
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="updatePetWithForm"></a> <a name="updatePetWithForm"></a>
# **updatePetWithForm** # **updatePetWithForm**
@ -344,7 +344,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_FORM_URLENCODED - **Content-Type**: APPLICATION_FORM_URLENCODED
- **Accept**: Not defined - **Accept**: Not defined
<a name="uploadFile"></a> <a name="uploadFile"></a>
@ -395,6 +395,6 @@ Name | Type | Description | Notes
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.FORM_DATA - **Content-Type**: FORM_DATA
- **Accept**: MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_JSON

View File

@ -97,7 +97,7 @@ This endpoint does not need any parameter.
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_JSON
<a name="getOrderById"></a> <a name="getOrderById"></a>
# **getOrderById** # **getOrderById**
@ -144,7 +144,7 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="placeOrder"></a> <a name="placeOrder"></a>
# **placeOrder** # **placeOrder**
@ -190,6 +190,6 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON

View File

@ -57,7 +57,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined
<a name="createUsersWithArrayInput"></a> <a name="createUsersWithArrayInput"></a>
@ -103,7 +103,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined
<a name="createUsersWithListInput"></a> <a name="createUsersWithListInput"></a>
@ -149,7 +149,7 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined
<a name="deleteUser"></a> <a name="deleteUser"></a>
@ -243,7 +243,7 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="loginUser"></a> <a name="loginUser"></a>
# **loginUser** # **loginUser**
@ -292,7 +292,7 @@ No authorization required
### HTTP request headers ### HTTP request headers
- **Content-Type**: Not defined - **Content-Type**: Not defined
- **Accept**: MediaTypes.APPLICATION_XML, MediaTypes.APPLICATION_JSON - **Accept**: APPLICATION_XML, APPLICATION_JSON
<a name="logoutUser"></a> <a name="logoutUser"></a>
# **logoutUser** # **logoutUser**
@ -381,6 +381,6 @@ null (empty response body)
### HTTP request headers ### HTTP request headers
- **Content-Type**: MediaTypes.APPLICATION_JSON - **Content-Type**: APPLICATION_JSON
- **Accept**: Not defined - **Accept**: Not defined

View File

@ -11,6 +11,8 @@ import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size import jakarta.validation.constraints.Size
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -24,8 +26,6 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
import org.openapitools.server.api.model.ModelApiResponse import org.openapitools.server.api.model.ModelApiResponse
import org.openapitools.server.api.model.Pet import org.openapitools.server.api.model.Pet

View File

@ -11,6 +11,8 @@ import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size import jakarta.validation.constraints.Size
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -24,8 +26,6 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
import org.openapitools.server.api.model.Order import org.openapitools.server.api.model.Order

View File

@ -11,6 +11,8 @@ import jakarta.validation.constraints.Min
import jakarta.validation.constraints.NotNull import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size import jakarta.validation.constraints.Size
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.Delete import misk.web.Delete
import misk.web.Description import misk.web.Description
import misk.web.Get import misk.web.Get
@ -24,8 +26,6 @@ import misk.web.RequestBody
import misk.web.RequestContentType import misk.web.RequestContentType
import misk.web.RequestHeader import misk.web.RequestHeader
import misk.web.ResponseContentType import misk.web.ResponseContentType
import misk.web.actions.WebAction
import misk.web.interceptors.LogRequestResponse
import misk.web.mediatype.MediaTypes import misk.web.mediatype.MediaTypes
import org.openapitools.server.api.model.User import org.openapitools.server.api.model.User

View File

@ -1,22 +1,26 @@
package org.openapitools.server.api.api package org.openapitools.server.api.api
import misk.testing.MiskTestModule
import jakarta.inject.Inject import jakarta.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
import org.openapitools.server.api.model.ModelApiResponse import org.openapitools.server.api.model.ModelApiResponse
import org.openapitools.server.api.model.Pet import org.openapitools.server.api.model.Pet
@MiskTest(startService = true) @MiskTest(startService = true)
internal class PetApiTest { internal class PetApiTest {
@Inject private lateinit var petApi: PetApi @Suppress("unused")
@MiskTestModule
private val module = MiskTestModule()
@Inject private lateinit var petApi: PetApiAction
/** /**
* To test PetApiAction.addPet * To test PetApiAction.addPet
@ -94,5 +98,4 @@ internal class PetApiTest {
val file = TODO() val file = TODO()
val response: ModelApiResponse = petApi.uploadFile(petId, additionalMetadata, file) val response: ModelApiResponse = petApi.uploadFile(petId, additionalMetadata, file)
} }
} }

View File

@ -1,21 +1,25 @@
package org.openapitools.server.api.api package org.openapitools.server.api.api
import misk.testing.MiskTestModule
import jakarta.inject.Inject import jakarta.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
import org.openapitools.server.api.model.Order import org.openapitools.server.api.model.Order
@MiskTest(startService = true) @MiskTest(startService = true)
internal class StoreApiTest { internal class StoreApiTest {
@Inject private lateinit var storeApi: StoreApi @Suppress("unused")
@MiskTestModule
private val module = MiskTestModule()
@Inject private lateinit var storeApi: StoreApiAction
/** /**
* To test StoreApiAction.deleteOrder * To test StoreApiAction.deleteOrder
@ -51,5 +55,4 @@ internal class StoreApiTest {
val order = TODO() val order = TODO()
val response: Order = storeApi.placeOrder(order) val response: Order = storeApi.placeOrder(order)
} }
} }

View File

@ -1,21 +1,25 @@
package org.openapitools.server.api.api package org.openapitools.server.api.api
import misk.testing.MiskTestModule
import jakarta.inject.Inject import jakarta.inject.Inject
import misk.testing.MiskTest import misk.testing.MiskTest
import misk.testing.MiskTestModule
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import misk.web.HttpCall import misk.web.HttpCall
import misk.web.PathParam import misk.web.PathParam
import misk.web.QueryParam import misk.web.QueryParam
import misk.web.RequestBody import misk.web.RequestBody
import misk.web.RequestHeader import misk.web.RequestHeader
import org.openapitools.server.api.model.User import org.openapitools.server.api.model.User
@MiskTest(startService = true) @MiskTest(startService = true)
internal class UserApiTest { internal class UserApiTest {
@Inject private lateinit var userApi: UserApi @Suppress("unused")
@MiskTestModule
private val module = MiskTestModule()
@Inject private lateinit var userApi: UserApiAction
/** /**
* To test UserApiAction.createUser * To test UserApiAction.createUser
@ -89,5 +93,4 @@ internal class UserApiTest {
val user = TODO() val user = TODO()
val response = userApi.updateUser(username, user) val response = userApi.updateUser(username, user)
} }
} }