Skip to content

Emit schema with all model properties optional #2652

Closed
@bajtos

Description

@bajtos

Allow Controller methods implementing PATCH operation to describe their input data as "a model with all properties optional". This story requires #2629 and #2631 to be implemented first.

To emit schema with optional model properties, we should add a new schema-generation option called partial.

export interface JsonSchemaOptions {
  /// Make all properties optional
  partial?: boolean;
}

An example showing a controller method accepting a partial model instance:

class TodoListController {
  // ...

  @patch('/todo-lists/{id}', {
    responses: {
      // left out for brevity
    },
  })
  async updateById(
    @param.path.number('id') id: number,
    @requestBody({
      content: {
        'application/json': {
          schema: getModelSchemaRef(TodoList, {partial: true}),
          /***** ^^^ THIS IS IMPORTANT - OPENAPI SCHEMA ^^^ ****/
       },
     },
    })
    obj: Partial<TodoList>,
    /***** ^^^ THIS IS IMPORTANT - TYPESCRIPT TYPE ^^^ ****/
  ): Promise<void> {
    await this.todoListRepository.updateById(id, obj);
  }
}

See 887ae84 for a spike showing proposed implementation details.

Acceptance criteria

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions