loopbackio / loopbackio/loopback-next

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

Offen
#3,058 11 Kommentare 2 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@aharbis arbeitet bereits daran.

Seit 07.6.2019.

bug good first issue Hacktoberfest REST Validation
Vorherrschende Sprache
TypeScript
Sterne
5.1k
Forks
1.1k
Ø Merge
2 T. 21 Std.
Gemergte PRs (30 T.)
27

Beschreibung

## 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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.