loopbackio / loopbackio/loopback-next
getModelSchemaRef doesn't get all extended model's properties.
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- TypeScript
- Estrellas
- 5.1k
- Forks
- 1.1k
- Merge medio
- 2 d 21 h
- PR fusionados (30 d)
- 27
Descripción
## Steps to reproduce
I've got a controller with an endpoint which take a request body of the `Foo` model class.
```ts
@requestBody({
content: {
'application/json': {
schema: getModelSchemaRef(Foo),
},
},
})
```
The model classes:
```ts
@model()
export class BarBase {
@property()
name: string
}
@model()
export class BarEdit extends BarBase {
@property()
id: number
@property()
delete: boolean
}
@model()
export class Foo {
@property()
id: number
@property().array(BarEdit)
bars: BarEdit[]
}
@model()
export class BarResult extends BarEdit {
@property()
result: string
}
```
## Current Behaviour
When looking at the generated swagger document or calling the controller endpoint, the schema body is the following:
```ts
{
id: number,
bars: [
{
name: string
}
]
}
```
The `id` and `delete` properties are missing.
## Expected Behaviour
I expected that the controller model schema of `Foo` would be:
```ts
{
id: number,
bars: [
{
id: number,
delete: boolean,
name: string
}
]
}
```
In the current behaviour the `BarEdit` model class seems to extends from the `BarBase` class and it has got the `name` property, but the `id` and `delete` property in the `BarEdit` model class itself disappeared. I expected the `id` and `delete` properties to be there as well, but it's not.
Also when the model class `BarResult` (which extends from `BarEdit`) is used in a controller's `getModelSchemaRef` it has got all the properties from all 3 model classes:
```ts
{
id: number,
delete: boolean,
name: string,
result: string
}
```
## Additional information
A work around to this problem I've found is to create a copy of the `BarBase` model class and call it something for example `BarBaseT` and have `BarEdit` extends from that one instead.
## Operating System Information
```sh
darwin x64 14.15.4
```
```sh
├── @loopback/boot@3.4.0
├── @loopback/core@2.16.0
├── @loopback/repository@3.6.0
├── @loopback/rest-explorer@3.3.0
├── @loopback/rest@9.3.0
├── @loopback/service-proxy@3.2.0
├── loopback-connector-kv-redis@3.0.3
├── loopback-connector-postgresql@5.3.0
├── loopback-connector-rest@3.7.0
npm notice
npm notice New minor version of npm available! 7.6.1 -> 7.16.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v7.16.0
npm notice Run npm install -g npm@7.16.0 to update!
npm notice
```
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza reproduciendo el problema con las definiciones de los modelos BarBase, BarEdit, BarResult y Foo y el uso de getModelSchemaRef en el controlador que se muestran en el informe. Rastrea el esquema generado para Foo y compáralo con las propiedades heredadas esperadas; se considerará terminado cuando las propiedades id y delete de BarEdit aparezcan en el esquema anidado sin la solución alternativa.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- openapi, typescript
- Área
- api, backend
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100