Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix enum with validation, rel #311 #354

Merged
merged 2 commits into from
Jan 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions gen/main/java/issue/_331/DefaultApi.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ io.micronaut.http.HttpResponse<Object> string(
java.util.Optional<java.util.List<java.lang.String>> withoutValidation,
@io.micronaut.core.annotation.NonNull
@io.micronaut.http.annotation.QueryValue
java.util.Optional<java.util.List<@javax.validation.constraints.NotNull StringWithEnum>> withEnum,
@io.micronaut.core.annotation.NonNull
@io.micronaut.http.annotation.QueryValue
java.util.Optional<java.util.List<[email protected] @javax.validation.constraints.Email String>> withEmail,
@io.micronaut.core.annotation.NonNull
@io.micronaut.http.annotation.QueryValue
Expand Down
5 changes: 4 additions & 1 deletion gen/main/java/issue/_331/DefaultApiClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public interface DefaultApiClient {
java.lang.String PATH_COMPLEX = "/complex?{&array*}{&set*}";
java.lang.String PATH_INTEGER = "/integer?{&withoutValidation*}{&withMinimum*}{&withMaximum*}{&withMinimumAndMaximum*}";
java.lang.String PATH_NUMBER = "/number?{&withoutValidation*}{&withMinimum*}{&withMinimumExclusiveFalse*}{&withMinimumExclusiveTrue*}{&withMaximum*}{&withMaximumExclusiveFalse*}{&withMaximumExclusiveTrue*}";
java.lang.String PATH_STRING = "/string?{&withoutValidation*}{&withEmail*}{&withPattern*}{&withMinimum*}{&withMaximum*}{&withMinimumAndMaximum*}";
java.lang.String PATH_STRING = "/string?{&withoutValidation*}{&withEnum*}{&withEmail*}{&withPattern*}{&withMinimum*}{&withMaximum*}{&withMinimumAndMaximum*}";

@io.micronaut.http.annotation.Get(PATH_COMPLEX)
io.micronaut.http.HttpResponse<Object> complex(
Expand Down Expand Up @@ -63,6 +63,9 @@ io.micronaut.http.HttpResponse<Object> string(
@io.micronaut.http.annotation.QueryValue(value = "withoutValidation")
java.util.List<java.lang.String> withoutValidation,
@io.micronaut.core.annotation.Nullable
@io.micronaut.http.annotation.QueryValue(value = "withEnum")
java.util.List<@javax.validation.constraints.NotNull StringWithEnum> withEnum,
@io.micronaut.core.annotation.Nullable
@io.micronaut.http.annotation.QueryValue(value = "withEmail")
java.util.List<[email protected] @javax.validation.constraints.Email String> withEmail,
@io.micronaut.core.annotation.Nullable
Expand Down
37 changes: 36 additions & 1 deletion gen/main/java/issue/_331/ModelString.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
public class ModelString {

public static final java.lang.String JSON_PROPERTY_WITHOUT_VALIDATION = "withoutValidation";
public static final java.lang.String JSON_PROPERTY_WITH_ENUM = "withEnum";
public static final java.lang.String JSON_PROPERTY_WITH_EMAIL = "withEmail";
public static final java.lang.String JSON_PROPERTY_WITH_PATTERN = "withPattern";
public static final java.lang.String JSON_PROPERTY_WITH_MINIMUM = "withMinimum";
Expand All @@ -15,6 +16,10 @@ public class ModelString {
@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
private java.util.List<java.lang.String> withoutValidation;

@com.fasterxml.jackson.annotation.JsonProperty(JSON_PROPERTY_WITH_ENUM)
@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
private java.util.List<@javax.validation.constraints.NotNull StringWithEnum> withEnum;

@com.fasterxml.jackson.annotation.JsonProperty(JSON_PROPERTY_WITH_EMAIL)
@com.fasterxml.jackson.annotation.JsonInclude(com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL)
private java.util.List<[email protected] @javax.validation.constraints.Email String> withEmail;
Expand Down Expand Up @@ -47,6 +52,7 @@ public boolean equals(Object object) {
}
ModelString other = (ModelString) object;
return java.util.Objects.equals(withoutValidation, other.withoutValidation)
&& java.util.Objects.equals(withEnum, other.withEnum)
&& java.util.Objects.equals(withEmail, other.withEmail)
&& java.util.Objects.equals(withPattern, other.withPattern)
&& java.util.Objects.equals(withMinimum, other.withMinimum)
Expand All @@ -56,14 +62,15 @@ public boolean equals(Object object) {

@Override
public int hashCode() {
return java.util.Objects.hash(withoutValidation, withEmail, withPattern, withMinimum, withMaximum, withMinimumAndMaximum);
return java.util.Objects.hash(withoutValidation, withEnum, withEmail, withPattern, withMinimum, withMaximum, withMinimumAndMaximum);
}

@Override
public java.lang.String toString() {
return new java.lang.StringBuilder()
.append("ModelString[")
.append("withoutValidation=").append(withoutValidation).append(",")
.append("withEnum=").append(withEnum).append(",")
.append("withEmail=").append(withEmail).append(",")
.append("withPattern=").append(withPattern).append(",")
.append("withMinimum=").append(withMinimum).append(",")
Expand Down Expand Up @@ -95,6 +102,26 @@ public ModelString removeWithoutValidationItem(java.lang.String withoutValidatio
return this;
}

public ModelString withEnum(java.util.List<@javax.validation.constraints.NotNull StringWithEnum> newWithEnum) {
this.withEnum = newWithEnum;
return this;
}

public ModelString addWithEnumItem(StringWithEnum withEnumItem) {
if (this.withEnum == null) {
this.withEnum = new java.util.ArrayList<>();
}
this.withEnum.add(withEnumItem);
return this;
}

public ModelString removeWithEnumItem(StringWithEnum withEnumItem) {
if (this.withEnum != null) {
this.withEnum.remove(withEnumItem);
}
return this;
}

public ModelString withEmail(java.util.List<[email protected] @javax.validation.constraints.Email String> newWithEmail) {
this.withEmail = newWithEmail;
return this;
Expand Down Expand Up @@ -205,6 +232,14 @@ public void setWithoutValidation(java.util.List<java.lang.String> newWithoutVali
this.withoutValidation = newWithoutValidation;
}

public java.util.List<@javax.validation.constraints.NotNull StringWithEnum> getWithEnum() {
return withEnum;
}

public void setWithEnum(java.util.List<@javax.validation.constraints.NotNull StringWithEnum> newWithEnum) {
this.withEnum = newWithEnum;
}

public java.util.List<[email protected] @javax.validation.constraints.Email String> getWithEmail() {
return withEmail;
}
Expand Down
35 changes: 35 additions & 0 deletions gen/main/java/issue/_331/StringWithEnum.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package issue._331;

@jakarta.annotation.Generated("org.openapitools.codegen.languages.MicronautCodegen")
@io.micronaut.core.annotation.Introspected
public enum StringWithEnum {

A("A"),
B("B");

public static final java.lang.String A_VALUE = "A";
public static final java.lang.String B_VALUE = "B";

private final java.lang.String value;

private StringWithEnum(java.lang.String value) {
this.value = value;
}

@com.fasterxml.jackson.annotation.JsonCreator
public static StringWithEnum toEnum(java.lang.String value) {
return toOptional(value).orElseThrow(() -> new IllegalArgumentException("Unknown value '" + value + "'."));
}

public static java.util.Optional<StringWithEnum> toOptional(java.lang.String value) {
return java.util.Arrays
.stream(values())
.filter(e -> e.value.equals(value))
.findAny();
}

@com.fasterxml.jackson.annotation.JsonValue
public java.lang.String getValue() {
return value;
}
}
5 changes: 4 additions & 1 deletion gen/test/java/issue/_331/DefaultApiTestClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,15 @@ io.micronaut.http.HttpResponse<?> number(
@io.micronaut.http.annotation.QueryValue(value = "withMaximumExclusiveTrue")
java.util.List<java.lang.Double> withMaximumExclusiveTrue);

@io.micronaut.http.annotation.Get("/string?{&withoutValidation*}{&withEmail*}{&withPattern*}{&withMinimum*}{&withMaximum*}{&withMinimumAndMaximum*}")
@io.micronaut.http.annotation.Get("/string?{&withoutValidation*}{&withEnum*}{&withEmail*}{&withPattern*}{&withMinimum*}{&withMaximum*}{&withMinimumAndMaximum*}")
io.micronaut.http.HttpResponse<?> string(
@io.micronaut.core.annotation.Nullable
@io.micronaut.http.annotation.QueryValue(value = "withoutValidation")
java.util.List<java.lang.String> withoutValidation,
@io.micronaut.core.annotation.Nullable
@io.micronaut.http.annotation.QueryValue(value = "withEnum")
java.util.List<StringWithEnum> withEnum,
@io.micronaut.core.annotation.Nullable
@io.micronaut.http.annotation.QueryValue(value = "withEmail")
java.util.List<java.lang.String> withEmail,
@io.micronaut.core.annotation.Nullable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,12 @@ public void postProcessParameter(CodegenParameter parameter) {
if (dateTimeRelaxed && (parameter.isDate || parameter.isDateTime)) {
addSupportingFile(sourceFolder, invokerPackage, "TimeTypeConverterRegistrar");
}
if (parameter.isArray
&& parameter.items.allowableValues != null
&& !parameter.items.allowableValues.isEmpty()) {
parameter.dataType = parameter.datatypeWithEnum = parameter.dataType.replace("@javax.validation.Valid ",
"");
}
parameter.vendorExtensions.put("x-datatype-without-validation", removeValidation(parameter.dataType));
}

Expand All @@ -521,6 +527,9 @@ public void postProcessModelProperty(CodegenModel model, CodegenProperty propert
if (openApiNullable && !property.required && property.isNullable) {
property.getVendorExtensions().put("x-jackson-nullable", true);
}
if (property.isArray && property.items.allowableValues != null && !property.items.allowableValues.isEmpty()) {
property.dataType = property.datatypeWithEnum = property.dataType.replace("@javax.validation.Valid ", "");
}
}

@Override
Expand Down
13 changes: 13 additions & 0 deletions src/test/resources/openapi/issue-331.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,12 @@ paths:
type: array
items:
$ref: "#/components/schemas/StringWithoutValidation"
- name: withEnum
in: query
schema:
type: array
items:
$ref: "#/components/schemas/StringWithEnum"
- name: withEmail
in: query
schema:
Expand Down Expand Up @@ -206,6 +212,10 @@ components:
type: array
items:
$ref: "#/components/schemas/StringWithoutValidation"
withEnum:
type: array
items:
$ref: "#/components/schemas/StringWithEnum"
withEmail:
type: array
items:
Expand Down Expand Up @@ -279,6 +289,9 @@ components:
StringWithoutValidation:
type: string
nullable: true
StringWithEnum:
type: string
enum: [A, B]
StringWithEmail:
type: string
format: email
Expand Down