-
Notifications
You must be signed in to change notification settings - Fork 474
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
@ApiProperty - Include default value when using enumName
#2898
Comments
Would you like to create a PR for this issue? |
In v3.1.0, it appears that you can define some sibling elements, but it still don't have OAI/OpenAPI-Specification#2948 @ApiProperty({
default: SortOrder.DESC,
allOf: [
{ $ref: getSchemaPath('SortOrder') },
]
}) |
@Eirmas , you are right, but the SortOrder schema has the default added there and it is being rendered in the swagger ui as well. @kamilmysliwiec , I am looking to contribute, Is there any priority on the issues that I can start with? |
I've ended up patching diff --git a/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js b/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js
index b5c6978..dd9883a 100644
--- a/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js
+++ b/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js
@@ -167,16 +167,16 @@ class SchemaObjectFactory {
}
const enumName = metadata.enumName;
const $ref = (0, utils_1.getSchemaPath)(enumName);
- const additionalParams = ['description', 'deprecated', 'default'];
+ const additionalParams = ['description'];
const additionalFields = additionalParams.reduce((acc, param) => (Object.assign(Object.assign({}, acc), (metadata[param] && { [param]: metadata[param] }))), {});
const enumType = (_a = (metadata.isArray ? metadata.items['type'] : metadata.type)) !== null && _a !== void 0 ? _a : 'string';
schemas[enumName] = Object.assign(Object.assign({ type: enumType }, additionalFields), { enum: metadata.isArray && metadata.items
? metadata.items['enum']
: metadata.enum });
const _schemaObject = Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: metadata.isArray ? 'array' : 'string' });
- const refHost = metadata.isArray ? { items: { $ref } } : { $ref };
+ const refHost = metadata.isArray ? { items: { $ref } } : { allOf: [{$ref}] };
const paramObject = Object.assign(Object.assign({}, _schemaObject), refHost);
- const pathsToOmit = ['enum', 'enumName', ...additionalParams];
+ const pathsToOmit = ['enum', 'enumName'];
if (!metadata.isArray) {
pathsToOmit.push('type');
} This change will wrap the Unfortunately there's no way of documenting the enum itself, so this code copies the description from the property to the enum schema definition. This is still the original behavior. |
I have same issue(#3101). actually The declaration doesn't disappear, but you can find its default in other schema declared enumName. |
Is there an existing issue that is already proposing this?
Is your feature request related to a problem? Please describe it
When using
@ApiProperty
like this:It renders the OpenAPI json like this:
However, when adding a reference to the enum using
enumName
instead to avoid duplicate definitions like this:It renders like this:
Here we can see that the
default
property is lost.Describe the solution you'd like
Here is a discussion that explains a possible solution: OAI/OpenAPI-Specification#2948
Teachability, documentation, adoption, migration strategy
No response
What is the motivation / use case for changing the behavior?
Improve user experience when using software like Postman, Swagger or similar
The text was updated successfully, but these errors were encountered: