loopbackio / loopbackio/loopback-next
Overriding title in `getModelSchemaRef` causes duplication in OpenAPI schema
Nessuno ha ancora preso questa issue.
- Lingua principale
- TypeScript
- Stelle
- 5.1k
- Fork
- 1.1k
- Merge medio
- 2g 21h
- PR unite (30g)
- 27
Descrizione
## Steps to reproduce
Define a controller with `getModelSchemaRef(SomeModel, {title: 'TitleOverride'})`.
Controller definition
```typescript
export class UserController {
@post('/users', {
security: OPERATION_SECURITY_SPEC,
responses: {
'200': {
description: 'User',
content: {
'application/json': {
schema: {
'x-ts-type': User,
},
},
},
},
},
})
async create(
@requestBody({
content: {
'application/json': {
schema: getModelSchemaRef(NewUserRequest, {
title: 'NewUser',
}),
},
},
})
newUserRequest: NewUserRequest,
): Promise {
// implementation
}
}
```
## Current Behavior
The controller above emits schema definitions for both `NewUserRequest` and `NewUser`. While `NewUserRequest` is not referenced anywhere else in the schema.
## Expected Behavior
Only `NewUser` is present in OpenAPI schema.
## Additional information
`@loopback/repository-json-schema@2.4.2`
`@loopback/openapi-v3@3.4.1`
I presume `NewUserRequest` is generated from `getModelSchemaRef` as it should while `NewUser` comes from parsing `paramTypes` where it causes a cache miss due to overridden `title`.
A probable fix could exclude a parameter corresponding to `requestBody` from enumeration here
https://github.com/strongloop/loopback-next/blob/7f8d8356946dc236dd4daecbfae12e0a0662cf1c/packages/openapi-v3/src/controller-spec.ts#L329
## Acceptance Criteria
- [ ] Don't generate unused schema for parameter decorated with `@requestBody`
A solution I can think of is:
https://github.com/strongloop/loopback-next/blob/7f8d8356946dc236dd4daecbfae12e0a0662cf1c/packages/openapi-v3/src/controller-spec.ts#L329
should search through the content objects in the request body spec, if all contents' schemas exist in reference, then skip generating the one inferred from model ctor.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia in packages/openapi-v3/src/controller-spec.ts, intorno all’enumerazione dei parametri indicata, e segui come gli schemi di requestBody e i costruttori dei modelli inferiti entrano nei componenti OpenAPI. Riproduci il caso di override di title, quindi verifica che un corpo della richiesta il cui schema è già referenziato non generi uno schema duplicato inutilizzato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- openapi, typescript
- Ambito
- api, backend-api-design
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100