loopbackio / loopbackio/loopback-next

Required model property with default value throws error when property not provided in create

Open
#3,058 11 comments 2 reactions 1 assignee Claimed by @aharbis View on GitHub
bug good first issue Hacktoberfest REST Validation
Dominant language
TypeScript
Stars
5.1k
Forks
1.1k
Avg merge
2d 21h
Merged PRs (30d)
27

Description

## Description / Steps to reproduce / Feature proposal

Given a model property that is defined as `required` with a `default` value, trying to create a new model instance and omitting that property from the request yields a 422 error stating the property is missing.

For example, given the following model property definition:

```ts
@property({
type: 'string',
required: true,
default: 'admin',
})
username: string;
```

Trying to create a model instance and omitting the `username` property yields:

```json
{
"error": {
"statusCode": 422,
"name": "UnprocessableEntityError",
"message": "The request body is invalid. See error object `details` property for more info.",
"code": "VALIDATION_FAILED",
"details": [
{
"path": "",
"code": "required",
"message": "should have required property 'username'",
"info": {
"missingProperty": "username"
}
}
]
}
}
```

I've recreated the issue using the `todo` application, and you can view that on my forked feature branch:

https://github.com/aharbis/loopback-next/tree/default-property

I am using Node `v10.15.3`, and based the recreate on an up-to-date fork of `loopback-next`.

## Current Behavior

The `default` value defined for the model property is not utilized, and instead a 422 error is thrown stating the required property is missing.

## Expected Behavior

~If a `required` property has a `default` value, and the given property is not provided in the request to create the model instance, the `default` value should be used.~

Finalized agreement:
LoopBack follow the OpenAPI standard and make no interpretations.
`required` means the user needs to provide the field in the request always, independent of the `default`.

i.e `default: xxx, required: true` shouldn't be set at the same time.

## Accpetance Criteria
- [ ] Update the docs `Models.md`, add explanations and examples
- [ ] Add validation to check if the two fields is set at the runtime

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.