Skip to content

Instantly share code, notes, and snippets.

@thiagofa
Created August 14, 2020 23:06
Show Gist options
  • Save thiagofa/841f4d930e8d73104783f8dc75bd2ac9 to your computer and use it in GitHub Desktop.
Save thiagofa/841f4d930e8d73104783f8dc75bd2ac9 to your computer and use it in GitHub Desktop.
Documento em OpenAPI 2 da API do AlgaFood (projeto desenvolvido no curso Especialista Spring REST)
swagger: '2.0'
info:
description: API aberta para clientes e restaurantes.
version: '1'
title: AlgaFood API
contact:
name: AlgaWorks
url: 'https://www.algaworks.com'
email: contato@algaworks.com
host: 'localhost:8080'
basePath: /
tags:
- name: Cidades
description: Gerencia as cidades
- name: Cozinhas
description: Gerencia as cozinhas
- name: Estados
description: Gerencia os estados
- name: Estatísticas
description: Estatísticas da AlgaFood
- name: Formas de pagamento
description: Gerencia as formas de pagamento
- name: Grupos
description: Gerencia os grupos de usuários
- name: Pedidos
description: Gerencia os pedidos
- name: Permissões
description: Gerencia as permissões
- name: Produtos
description: Gerencia os produtos de restaurantes
- name: Restaurantes
description: Gerencia os restaurantes
- name: Usuários
description: Gerencia os usuários
paths:
/v1/cidades:
get:
tags:
- Cidades
summary: Lista as cidades
operationId: listarUsingGET
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/CidadesModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Cidades
summary: Cadastra uma cidade
operationId: adicionarUsingPOST
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de uma nova cidade
required: true
schema:
$ref: '#/definitions/CidadeInput'
responses:
'201':
description: Cidade cadastrada
schema:
$ref: '#/definitions/CidadeModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/cidades/{cidadeId}':
get:
tags:
- Cidades
summary: Busca uma cidade por ID
operationId: buscarUsingGET
produces:
- application/json
parameters:
- name: cidadeId
in: path
description: ID de uma cidade
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/CidadeModel'
'400':
description: ID da cidade inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Cidade não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Cidades
summary: Atualiza uma cidade por ID
operationId: atualizarUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: cidadeId
in: path
description: ID de uma cidade
required: true
type: integer
format: int64
x-example: 1
- in: body
name: corpo
description: Representação de uma cidade com os novos dados
required: true
schema:
$ref: '#/definitions/CidadeInput'
responses:
'200':
description: Cidade atualizada
schema:
$ref: '#/definitions/CidadeModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Cidade não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Cidades
summary: Exclui uma cidade por ID
operationId: removerUsingDELETE
produces:
- application/json
parameters:
- name: cidadeId
in: path
description: ID de uma cidade
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Cidade excluída
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Cidade não encontrada
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/cozinhas:
get:
tags:
- Cozinhas
summary: Lista as cozinhas com paginação
operationId: listarUsingGET_1
produces:
- application/json
parameters:
- name: page
in: query
description: Número da página (começa em 0)
required: false
type: integer
format: int32
x-example: 0
- name: size
in: query
description: Quantidade de elementos por página
required: false
type: integer
format: int32
x-example: 10
- name: sort
in: query
description: Nome da propriedade para ordenação
required: false
type: array
items:
type: string
collectionFormat: multi
responses:
'200':
description: OK
schema:
$ref: '#/definitions/CozinhasModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Cozinhas
summary: Cadastra uma cozinha
operationId: adicionarUsingPOST_1
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de uma nova cozinha
required: true
schema:
$ref: '#/definitions/CozinhaInput'
responses:
'201':
description: Cozinha cadastrada
schema:
$ref: '#/definitions/CozinhaModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/cozinhas/{cozinhaId}':
get:
tags:
- Cozinhas
summary: Busca uma cozinha por ID
operationId: buscarUsingGET_1
produces:
- application/json
parameters:
- name: cozinhaId
in: path
description: ID de uma cozinha
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/CozinhaModel'
'400':
description: ID da cozinha inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Cozinha não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Cozinhas
summary: Atualiza uma cozinha por ID
operationId: atualizarUsingPUT_1
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de uma cozinha com os novos dados
required: true
schema:
$ref: '#/definitions/CozinhaInput'
- name: cozinhaId
in: path
description: ID de uma cozinha
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Cozinha atualizada
schema:
$ref: '#/definitions/CozinhaModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Cozinha não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Cozinhas
summary: Exclui uma cozinha por ID
operationId: removerUsingDELETE_1
produces:
- application/json
parameters:
- name: cozinhaId
in: path
description: ID de uma cozinha
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Cozinha excluída
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Cozinha não encontrada
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/estados:
get:
tags:
- Estados
summary: Lista os estados
operationId: listarUsingGET_2
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/EstadosModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Estados
summary: Cadastra um estado
operationId: adicionarUsingPOST_2
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um novo estado
required: true
schema:
$ref: '#/definitions/EstadoInput'
responses:
'201':
description: Estado cadastrado
schema:
$ref: '#/definitions/EstadoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/estados/{estadoId}':
get:
tags:
- Estados
summary: Busca um estado por ID
operationId: buscarUsingGET_2
produces:
- application/json
parameters:
- name: estadoId
in: path
description: ID de um estado
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/EstadoModel'
'400':
description: ID do estado inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Estado não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Estados
summary: Atualiza um estado por ID
operationId: atualizarUsingPUT_2
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um estado com os novos dados
required: true
schema:
$ref: '#/definitions/EstadoInput'
- name: estadoId
in: path
description: ID de um estado
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Estado atualizado
schema:
$ref: '#/definitions/EstadoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Estado não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Estados
summary: Exclui um estado por ID
operationId: removerUsingDELETE_2
produces:
- application/json
parameters:
- name: estadoId
in: path
description: ID de um estado
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Estado excluído
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Estado não encontrado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/estatisticas/vendas-diarias:
get:
tags:
- Estatísticas
summary: Consulta estatísticas de vendas diárias
operationId: consultarVendasDiariasUsingGET
produces:
- application/json
parameters:
- name: dataCriacaoFim
in: query
description: Data/hora final da criação do pedido
required: false
type: string
format: date-time
x-example: '2019-12-02T23:59:59Z'
- name: dataCriacaoInicio
in: query
description: Data/hora inicial da criação do pedido
required: false
type: string
format: date-time
x-example: '2019-12-01T00:00:00Z'
- name: restauranteId
in: query
description: ID do restaurante
required: false
type: integer
format: int32
x-example: 1
- name: timeOffset
in: query
description: Deslocamento de horário a ser considerado na consulta em relação ao UTC
required: false
type: string
default: '+00:00'
allowEmptyValue: false
responses:
'200':
description: OK
schema:
type: array
items:
$ref: '#/definitions/VendaDiaria'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/formas-pagamento:
get:
tags:
- Formas de pagamento
summary: Lista as formas de pagamento
operationId: listarUsingGET_3
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/FormasPagamentoModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Formas de pagamento
summary: Cadastra uma forma de pagamento
operationId: adicionarUsingPOST_3
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de uma nova forma de pagamento
required: true
schema:
$ref: '#/definitions/FormaPagamentoInput'
responses:
'201':
description: Forma de pagamento cadastrada
schema:
$ref: '#/definitions/FormaPagamentoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/formas-pagamento/{formaPagamentoId}':
get:
tags:
- Formas de pagamento
summary: Busca uma forma de pagamento por ID
operationId: buscarUsingGET_3
produces:
- application/json
parameters:
- name: formaPagamentoId
in: path
description: ID de uma forma de pagamento
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/FormaPagamentoModel'
'400':
description: ID da forma de pagamento inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Forma de pagamento não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Formas de pagamento
summary: Atualiza uma cidade por ID
operationId: atualizarUsingPUT_3
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de uma forma de pagamento com os novos dados
required: true
schema:
$ref: '#/definitions/FormaPagamentoInput'
- name: formaPagamentoId
in: path
description: ID de uma forma de pagamento
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Forma de pagamento atualizada
schema:
$ref: '#/definitions/FormaPagamentoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Forma de pagamento não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Formas de pagamento
summary: Exclui uma forma de pagamento por ID
operationId: removerUsingDELETE_3
produces:
- application/json
parameters:
- name: formaPagamentoId
in: path
description: ID de uma forma de pagamento
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Forma de pagamento excluída
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Forma de pagamento não encontrada
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/grupos:
get:
tags:
- Grupos
summary: Lista os grupos
operationId: listarUsingGET_4
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/GruposModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Grupos
summary: Cadastra um grupo
operationId: adicionarUsingPOST_4
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um novo grupo
required: true
schema:
$ref: '#/definitions/GrupoInput'
responses:
'201':
description: Grupo cadastrado
schema:
$ref: '#/definitions/GrupoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/grupos/{grupoId}':
get:
tags:
- Grupos
summary: Busca um grupo por ID
operationId: buscarUsingGET_4
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID de um grupo
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/GrupoModel'
'400':
description: ID da grupo inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Grupo não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Grupos
summary: Atualiza um grupo por ID
operationId: atualizarUsingPUT_4
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um grupo com os novos dados
required: true
schema:
$ref: '#/definitions/GrupoInput'
- name: grupoId
in: path
description: ID de um grupo
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Grupo atualizado
schema:
$ref: '#/definitions/GrupoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Grupo não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Grupos
summary: Exclui um grupo por ID
operationId: removerUsingDELETE_4
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID de um grupo
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Grupo excluído
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Grupo não encontrado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/grupos/{grupoId}/permissoes':
get:
tags:
- Grupos
summary: Lista as permissões associadas a um grupo
operationId: listarUsingGET_5
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID do grupo
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/PermissoesModel'
'400':
description: ID do grupo inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Grupo não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/grupos/{grupoId}/permissoes/{permissaoId}':
put:
tags:
- Grupos
summary: Associação de permissão com grupo
operationId: associarUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID do grupo
required: true
type: integer
format: int64
x-example: 1
- name: permissaoId
in: path
description: ID da permissão
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Associação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Grupo ou permissão não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Grupos
summary: Desassociação de permissão com grupo
operationId: desassociarUsingDELETE
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID do grupo
required: true
type: integer
format: int64
x-example: 1
- name: permissaoId
in: path
description: ID da permissão
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Desassociação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Grupo ou permissão não encontrada
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/pedidos:
get:
tags:
- Pedidos
summary: Pesquisa os pedidos
operationId: pesquisarUsingGET
produces:
- application/json
parameters:
- name: campos
in: query
description: 'Nomes das propriedades para filtrar na resposta, separados por vírgula'
required: false
type: string
- name: clienteId
in: query
description: ID do cliente para filtro da pesquisa
required: false
type: integer
format: int64
x-example: 1
- name: dataCriacaoFim
in: query
description: Data/hora de criação final para filtro da pesquisa
required: false
type: string
format: date-time
x-example: '2019-11-01T10:00:00Z'
- name: dataCriacaoInicio
in: query
description: Data/hora de criação inicial para filtro da pesquisa
required: false
type: string
format: date-time
x-example: '2019-10-30T00:00:00Z'
- name: page
in: query
description: Número da página (começa em 0)
required: false
type: integer
format: int32
x-example: 0
- name: restauranteId
in: query
description: ID do restaurante para filtro da pesquisa
required: false
type: integer
format: int64
x-example: 1
- name: size
in: query
description: Quantidade de elementos por página
required: false
type: integer
format: int32
x-example: 10
- name: sort
in: query
description: Nome da propriedade para ordenação
required: false
type: array
items:
type: string
collectionFormat: multi
responses:
'200':
description: OK
schema:
$ref: '#/definitions/PedidosResumoModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Pedidos
summary: Registra um pedido
operationId: adicionarUsingPOST_5
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um novo pedido
required: true
schema:
$ref: '#/definitions/PedidoInput'
responses:
'201':
description: Pedido registrado
schema:
$ref: '#/definitions/PedidoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/pedidos/{codigoPedido}':
get:
tags:
- Pedidos
summary: Busca um pedido por código
operationId: buscarUsingGET_5
produces:
- application/json
parameters:
- name: campos
in: query
description: 'Nomes das propriedades para filtrar na resposta, separados por vírgula'
required: false
type: string
- name: codigoPedido
in: path
description: Código de um pedido
required: true
type: string
x-example: f9981ca4-5a5e-4da3-af04-933861df3e55
responses:
'200':
description: OK
schema:
$ref: '#/definitions/PedidoModel'
'404':
description: Pedido não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/pedidos/{codigoPedido}/cancelamento':
put:
tags:
- Pedidos
summary: Cancelamento de pedido
operationId: cancelarUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: codigoPedido
in: path
description: Código do pedido
required: true
type: string
x-example: f9981ca4-5a5e-4da3-af04-933861df3e55
responses:
'204':
description: Pedido cancelado com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Pedido não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/pedidos/{codigoPedido}/confirmacao':
put:
tags:
- Pedidos
summary: Confirmação de pedido
operationId: confirmarUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: codigoPedido
in: path
description: Código do pedido
required: true
type: string
x-example: f9981ca4-5a5e-4da3-af04-933861df3e55
responses:
'204':
description: Pedido confirmado com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Pedido não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/pedidos/{codigoPedido}/entrega':
put:
tags:
- Pedidos
summary: Registrar entrega de pedido
operationId: entregarUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: codigoPedido
in: path
description: Código do pedido
required: true
type: string
x-example: f9981ca4-5a5e-4da3-af04-933861df3e55
responses:
'204':
description: Entrega de pedido registrada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Pedido não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/permissoes:
get:
tags:
- Permissões
summary: Lista as permissões
operationId: listarUsingGET_6
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/PermissoesModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/restaurantes:
get:
tags:
- Restaurantes
summary: Lista restaurantes
operationId: listarUsingGET_7
produces:
- application/json
parameters:
- name: projecao
in: query
description: Nome da projeção de pedidos
required: false
type: string
enum:
- apenas-nome
responses:
'200':
description: OK
schema:
$ref: '#/definitions/RestaurantesBasicoModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Restaurantes
summary: Cadastra um restaurante
operationId: adicionarUsingPOST_6
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um novo restaurante
required: true
schema:
$ref: '#/definitions/RestauranteInput'
responses:
'201':
description: Restaurante cadastrado
schema:
$ref: '#/definitions/RestauranteModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/restaurantes/ativacoes:
put:
tags:
- Restaurantes
summary: Ativa múltiplos restaurantes
operationId: ativarMultiplosUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: IDs de restaurantes
required: true
schema:
type: array
items:
type: integer
format: int64
responses:
'204':
description: Restaurantes ativados com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Restaurantes
summary: Inativa múltiplos restaurantes
operationId: inativarMultiplosUsingDELETE
produces:
- application/json
parameters:
- in: body
name: corpo
description: IDs de restaurantes
required: true
schema:
type: array
items:
type: integer
format: int64
responses:
'204':
description: Restaurantes ativados com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}':
get:
tags:
- Restaurantes
summary: Busca um restaurante por ID
operationId: buscarUsingGET_6
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID de um restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/RestauranteModel'
'400':
description: ID do restaurante inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Restaurantes
summary: Atualiza um restaurante por ID
operationId: atualizarUsingPUT_5
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um restaurante com os novos dados
required: true
schema:
$ref: '#/definitions/RestauranteInput'
- name: restauranteId
in: path
description: ID de um restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Restaurante atualizado
schema:
$ref: '#/definitions/RestauranteModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/abertura':
put:
tags:
- Restaurantes
summary: Abre um restaurante por ID
operationId: abrirUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID de um restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Restaurante aberto com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/ativo':
put:
tags:
- Restaurantes
summary: Ativa um restaurante por ID
operationId: ativarUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID de um restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Restaurante ativado com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Restaurantes
summary: Inativa um restaurante por ID
operationId: inativarUsingDELETE
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID de um restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Restaurante inativado com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/fechamento':
put:
tags:
- Restaurantes
summary: Fecha um restaurante por ID
operationId: fecharUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID de um restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Restaurante fechado com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/formas-pagamento':
get:
tags:
- Restaurantes
summary: Lista as formas de pagamento associadas a restaurante
operationId: listarUsingGET_8
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/FormasPagamentoModel'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/formas-pagamento/{formaPagamentoId}':
put:
tags:
- Restaurantes
summary: Associação de restaurante com forma de pagamento
operationId: associarUsingPUT_1
consumes:
- application/json
produces:
- application/json
parameters:
- name: formaPagamentoId
in: path
description: ID da forma de pagamento
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Associação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante ou forma de pagamento não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Restaurantes
summary: Desassociação de restaurante com forma de pagamento
operationId: desassociarUsingDELETE_1
produces:
- application/json
parameters:
- name: formaPagamentoId
in: path
description: ID da forma de pagamento
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Desassociação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante ou forma de pagamento não encontrado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/produtos':
get:
tags:
- Produtos
summary: Lista os produtos de um restaurante
operationId: listarUsingGET_9
produces:
- application/json
parameters:
- name: incluirInativos
in: query
description: Indica se deve ou não incluir produtos inativos no resultado da listagem
required: false
type: boolean
default: false
allowEmptyValue: false
x-example: false
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/ProdutosModel'
'400':
description: ID do restaurante inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Produtos
summary: Cadastra um produto de um restaurante
operationId: adicionarUsingPOST_7
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um novo produto
required: true
schema:
$ref: '#/definitions/ProdutoInput'
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'201':
description: Produto cadastrado
schema:
$ref: '#/definitions/ProdutoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/produtos/{produtoId}':
get:
tags:
- Produtos
summary: Busca um produto de um restaurante
operationId: buscarUsingGET_7
produces:
- application/json
parameters:
- name: produtoId
in: path
description: ID do produto
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/ProdutoModel'
'400':
description: ID do restaurante ou produto inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Produto de restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Produtos
summary: Atualiza um produto de um restaurante
operationId: atualizarUsingPUT_6
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um produto com os novos dados
required: true
schema:
$ref: '#/definitions/ProdutoInput'
- name: produtoId
in: path
description: ID do produto
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Produto atualizado
schema:
$ref: '#/definitions/ProdutoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Produto de restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/produtos/{produtoId}/foto':
get:
tags:
- Produtos
summary: Busca a foto do produto de um restaurante
operationId: buscarUsingGET_8
produces:
- application/json
- image/png
- image/jpeg
parameters:
- name: produtoId
in: path
description: ID do produto
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/FotoProdutoModel'
'400':
description: ID do restaurante ou produto inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Foto de produto não encontrada
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Produtos
summary: Atualiza a foto do produto de um restaurante
operationId: atualizarFotoUsingPUT
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: arquivo
in: formData
description: 'Arquivo da foto do produto (máximo 500KB, apenas JPG e PNG)'
required: true
type: file
- name: descricao
in: query
description: Descrição da foto do produto
required: true
type: string
- name: produtoId
in: path
description: ID do produto
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Foto do produto atualizada
schema:
$ref: '#/definitions/FotoProdutoModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Produto de restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Produtos
summary: Exclui a foto do produto de um restaurante
operationId: excluirUsingDELETE
produces:
- application/json
parameters:
- name: produtoId
in: path
description: ID do produto
required: true
type: integer
format: int64
x-example: 1
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Foto do produto excluída
'400':
description: ID do restaurante ou produto inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Foto de produto não encontrada
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/responsaveis':
get:
tags:
- Restaurantes
summary: Lista os usuários responsáveis associados a restaurante
operationId: listarUsingGET_10
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/UsuariosModel'
'404':
description: Restaurante não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/restaurantes/{restauranteId}/responsaveis/{usuarioId}':
put:
tags:
- Restaurantes
summary: Associação de restaurante com usuário responsável
operationId: associarUsingPUT_2
consumes:
- application/json
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Associação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante ou usuário não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Restaurantes
summary: Desassociação de restaurante com usuário responsável
operationId: desassociarUsingDELETE_2
produces:
- application/json
parameters:
- name: restauranteId
in: path
description: ID do restaurante
required: true
type: integer
format: int64
x-example: 1
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Desassociação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Restaurante ou usuário não encontrado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
/v1/usuarios:
get:
tags:
- Usuários
summary: Lista os usuários
operationId: listarUsingGET_11
produces:
- application/json
responses:
'200':
description: OK
schema:
$ref: '#/definitions/UsuariosModel'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
post:
tags:
- Usuários
summary: Cadastra um usuário
operationId: adicionarUsingPOST_8
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um novo usuário
required: true
schema:
$ref: '#/definitions/UsuarioComSenhaInput'
responses:
'201':
description: Usuário cadastrado
schema:
$ref: '#/definitions/UsuarioModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/usuarios/{usuarioId}':
get:
tags:
- Usuários
summary: Busca um usuário por ID
operationId: buscarUsingGET_9
produces:
- application/json
parameters:
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/UsuarioModel'
'400':
description: ID do usuário inválido
schema:
$ref: '#/definitions/Problema'
'404':
description: Usuário não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
put:
tags:
- Usuários
summary: Atualiza um usuário por ID
operationId: atualizarUsingPUT_7
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de um usuário com os novos dados
required: true
schema:
$ref: '#/definitions/UsuarioInput'
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: Usuário atualizado
schema:
$ref: '#/definitions/UsuarioModel'
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Usuário não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/usuarios/{usuarioId}/grupos':
get:
tags:
- Usuários
summary: Lista os grupos associados a um usuário
operationId: listarUsingGET_12
produces:
- application/json
parameters:
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'200':
description: OK
schema:
$ref: '#/definitions/GruposModel'
'404':
description: Usuário não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'500':
description: Erro interno do servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/usuarios/{usuarioId}/grupos/{grupoId}':
put:
tags:
- Usuários
summary: Associação de grupo com usuário
operationId: associarUsingPUT_3
consumes:
- application/json
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID do grupo
required: true
type: integer
format: int64
x-example: 1
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Associação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Usuário ou grupo não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
delete:
tags:
- Usuários
summary: Desassociação de grupo com usuário
operationId: desassociarUsingDELETE_3
produces:
- application/json
parameters:
- name: grupoId
in: path
description: ID do grupo
required: true
type: integer
format: int64
x-example: 1
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Desassociação realizada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Usuário ou grupo não encontrado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
'/v1/usuarios/{usuarioId}/senha':
put:
tags:
- Usuários
summary: Atualiza a senha de um usuário
operationId: alterarSenhaUsingPUT
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: corpo
description: Representação de uma nova senha
required: true
schema:
$ref: '#/definitions/SenhaInput'
- name: usuarioId
in: path
description: ID do usuário
required: true
type: integer
format: int64
x-example: 1
responses:
'204':
description: Senha alterada com sucesso
'400':
description: Requisição inválida (erro do cliente)
schema:
$ref: '#/definitions/Problema'
'404':
description: Usuário não encontrado
schema:
$ref: '#/definitions/Problema'
'406':
description: Recurso não possui representação que poderia ser aceita pelo consumidor
'415':
description: Requisição recusada porque o corpo está em um formato não suportado
schema:
$ref: '#/definitions/Problema'
'500':
description: Erro interno no servidor
schema:
$ref: '#/definitions/Problema'
security:
- AlgaFood:
- READ
- WRITE
deprecated: false
securityDefinitions:
AlgaFood:
type: oauth2
tokenUrl: http://localhost:8080/oauth/token
flow: password
scopes:
READ: Acesso de leitura
WRITE: Acesso de escrita
definitions:
CidadeIdInput:
type: object
required:
- id
properties:
id:
type: integer
format: int64
example: 1
title: CidadeIdInput
CidadeInput:
type: object
required:
- estado
- nome
properties:
estado:
$ref: '#/definitions/EstadoIdInput'
nome:
type: string
example: Uberlândia
title: CidadeInput
CidadeModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
estado:
$ref: '#/definitions/EstadoModel'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Uberlândia
title: CidadeModel
CidadeResumoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
estado:
type: string
example: Minas Gerais
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Uberlândia
title: CidadeResumoModel
CidadesEmbeddedModel:
type: object
properties:
cidades:
type: array
items:
$ref: '#/definitions/CidadeModel'
title: CidadesEmbeddedModel
CidadesModel:
type: object
properties:
_embedded:
$ref: '#/definitions/CidadesEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: CidadesModel
CozinhaIdInput:
type: object
required:
- id
properties:
id:
type: integer
format: int64
example: 1
title: CozinhaIdInput
CozinhaInput:
type: object
required:
- nome
properties:
nome:
type: string
example: Brasileira
title: CozinhaInput
CozinhaModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Brasileira
title: CozinhaModel
CozinhasEmbeddedModel:
type: object
properties:
cozinhas:
type: array
items:
$ref: '#/definitions/CozinhaModel'
title: CozinhasEmbeddedModel
CozinhasModel:
type: object
properties:
_embedded:
$ref: '#/definitions/CozinhasEmbeddedModel'
_links:
$ref: '#/definitions/Links'
page:
$ref: '#/definitions/PageModel'
title: CozinhasModel
EnderecoInput:
type: object
required:
- bairro
- cep
- cidade
- logradouro
- numero
properties:
bairro:
type: string
example: Centro
cep:
type: string
example: 38400-000
cidade:
$ref: '#/definitions/CidadeIdInput'
complemento:
type: string
example: Apto 901
logradouro:
type: string
example: Rua Floriano Peixoto
numero:
type: string
example: '1500'
title: EnderecoInput
EnderecoModel:
type: object
properties:
bairro:
type: string
example: Centro
cep:
type: string
example: 38400-000
cidade:
$ref: '#/definitions/CidadeResumoModel'
complemento:
type: string
example: Apto 901
logradouro:
type: string
example: Rua Floriano Peixoto
numero:
type: string
example: '1500'
title: EnderecoModel
EstadoIdInput:
type: object
required:
- id
properties:
id:
type: integer
format: int64
example: 1
title: EstadoIdInput
EstadoInput:
type: object
required:
- nome
properties:
nome:
type: string
example: Minas Gerais
title: EstadoInput
EstadoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Minas Gerais
title: EstadoModel
EstadosEmbeddedModel:
type: object
properties:
estados:
type: array
items:
$ref: '#/definitions/EstadoModel'
title: EstadosEmbeddedModel
EstadosModel:
type: object
properties:
_embedded:
$ref: '#/definitions/EstadosEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: EstadosModel
EstatisticasModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
title: EstatisticasModel
FormaPagamentoIdInput:
type: object
required:
- id
properties:
id:
type: integer
format: int64
example: 1
title: FormaPagamentoIdInput
FormaPagamentoInput:
type: object
required:
- descricao
properties:
descricao:
type: string
example: Cartão de crédito
title: FormaPagamentoInput
FormaPagamentoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
descricao:
type: string
example: Cartão de crédito
id:
type: integer
format: int64
example: 1
title: FormaPagamentoModel
FormasPagamentoEmbeddedModel:
type: object
properties:
formasPagamento:
type: array
items:
$ref: '#/definitions/FormaPagamentoModel'
title: FormasPagamentoEmbeddedModel
FormasPagamentoModel:
type: object
properties:
_embedded:
$ref: '#/definitions/FormasPagamentoEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: FormasPagamentoModel
FotoProdutoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
contentType:
type: string
example: image/jpeg
descricao:
type: string
example: Prime Rib ao ponto
nomeArquivo:
type: string
example: b8bbd21a-4dd3-4954-835c-3493af2ba6a0_Prime-Rib.jpg
tamanho:
type: integer
format: int64
example: 202912
title: FotoProdutoModel
GrupoInput:
type: object
required:
- nome
properties:
nome:
type: string
example: Gerente
title: GrupoInput
GrupoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Gerente
title: GrupoModel
GruposEmbeddedModel:
type: object
properties:
grupos:
type: array
items:
$ref: '#/definitions/GrupoModel'
title: GruposEmbeddedModel
GruposModel:
type: object
properties:
_embedded:
$ref: '#/definitions/GruposEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: GruposModel
ItemPedidoInput:
type: object
required:
- produtoId
- quantidade
properties:
observacao:
type: string
example: 'Menos picante, por favor'
produtoId:
type: integer
format: int64
example: 1
quantidade:
type: integer
format: int32
example: 2
title: ItemPedidoInput
ItemPedidoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
observacao:
type: string
example: 'Menos picante, por favor'
precoTotal:
type: number
example: 157.8
precoUnitario:
type: number
example: 78.9
produtoId:
type: integer
format: int64
example: 1
produtoNome:
type: string
example: Porco com molho agridoce
quantidade:
type: integer
format: int32
example: 2
title: ItemPedidoModel
Link:
type: object
properties:
href:
type: string
templated:
type: boolean
title: Link
Links:
type: object
properties:
rel:
$ref: '#/definitions/Link'
title: Links
ObjetoProblema:
type: object
properties:
name:
type: string
example: preco
userMessage:
type: string
example: O preço é obrigatório
title: ObjetoProblema
PageModel:
type: object
properties:
number:
type: integer
format: int64
example: 0
description: Número da página (começa em 0)
size:
type: integer
format: int64
example: 10
description: Quantidade de registros por página
totalElements:
type: integer
format: int64
example: 50
description: Total de registros
totalPages:
type: integer
format: int64
example: 5
description: Total de páginas
title: PageModel
PedidoInput:
type: object
required:
- enderecoEntrega
- formaPagamento
- itens
- restaurante
properties:
enderecoEntrega:
$ref: '#/definitions/EnderecoInput'
formaPagamento:
$ref: '#/definitions/FormaPagamentoIdInput'
itens:
type: array
items:
$ref: '#/definitions/ItemPedidoInput'
restaurante:
$ref: '#/definitions/RestauranteIdInput'
title: PedidoInput
PedidoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
cliente:
$ref: '#/definitions/UsuarioModel'
codigo:
type: string
example: f9981ca4-5a5e-4da3-af04-933861df3e55
dataCancelamento:
type: string
format: date-time
example: '2019-12-01T20:35:00Z'
dataConfirmacao:
type: string
format: date-time
example: '2019-12-01T20:35:10Z'
dataCriacao:
type: string
format: date-time
example: '2019-12-01T20:34:04Z'
dataEntrega:
type: string
format: date-time
example: '2019-12-01T20:55:30Z'
enderecoEntrega:
$ref: '#/definitions/EnderecoModel'
formaPagamento:
$ref: '#/definitions/FormaPagamentoModel'
itens:
type: array
items:
$ref: '#/definitions/ItemPedidoModel'
restaurante:
$ref: '#/definitions/RestauranteApenasNomeModel'
status:
type: string
example: CRIADO
subtotal:
type: number
example: 298.9
taxaFrete:
type: number
example: 10
valorTotal:
type: number
example: 308.9
title: PedidoModel
PedidoResumoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
cliente:
$ref: '#/definitions/UsuarioModel'
codigo:
type: string
example: f9981ca4-5a5e-4da3-af04-933861df3e55
dataCriacao:
type: string
format: date-time
example: '2019-12-01T20:34:04Z'
restaurante:
$ref: '#/definitions/RestauranteApenasNomeModel'
status:
type: string
example: CRIADO
subtotal:
type: number
example: 298.9
taxaFrete:
type: number
example: 10
valorTotal:
type: number
example: 308.9
title: PedidoResumoModel
PedidosResumoEmbeddedModel:
type: object
properties:
pedidos:
type: array
items:
$ref: '#/definitions/PedidoResumoModel'
title: PedidosResumoEmbeddedModel
PedidosResumoModel:
type: object
properties:
_embedded:
$ref: '#/definitions/PedidosResumoEmbeddedModel'
_links:
$ref: '#/definitions/Links'
page:
$ref: '#/definitions/PageModel'
title: PedidosResumoModel
PermissaoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
descricao:
type: string
example: Permite consultar cozinhas
id:
type: integer
format: int64
example: 1
nome:
type: string
example: CONSULTAR_COZINHAS
title: PermissaoModel
PermissoesEmbeddedModel:
type: object
properties:
permissoes:
type: array
items:
$ref: '#/definitions/PermissaoModel'
title: PermissoesEmbeddedModel
PermissoesModel:
type: object
properties:
_embedded:
$ref: '#/definitions/PermissoesEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: PermissoesModel
Problema:
type: object
properties:
status:
type: integer
format: int32
example: 400
timestamp:
type: string
format: date-time
example: '2019-12-01T18:09:02.70844Z'
type:
type: string
example: 'https://algafood.com.br/dados-invalidos'
title:
type: string
example: Dados inválidos
detail:
type: string
example: Um ou mais campos estão inválidos. Faça o preenchimento correto e tente novamente.
userMessage:
type: string
example: Um ou mais campos estão inválidos. Faça o preenchimento correto e tente novamente.
objects:
type: array
description: Lista de objetos ou campos que geraram o erro (opcional)
items:
$ref: '#/definitions/ObjetoProblema'
title: Problema
ProdutoInput:
type: object
required:
- ativo
- descricao
- nome
- preco
properties:
ativo:
type: boolean
example: true
descricao:
type: string
example: 'Acompanha farinha, mandioca e vinagrete'
nome:
type: string
example: Espetinho de Cupim
preco:
type: number
example: 12.5
title: ProdutoInput
ProdutoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
ativo:
type: boolean
example: true
descricao:
type: string
example: 'Acompanha farinha, mandioca e vinagrete'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Espetinho de Cupim
preco:
type: number
example: 12.5
title: ProdutoModel
ProdutosEmbeddedModel:
type: object
properties:
produtos:
type: array
items:
$ref: '#/definitions/ProdutoModel'
title: ProdutosEmbeddedModel
ProdutosModel:
type: object
properties:
_embedded:
$ref: '#/definitions/ProdutosEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: ProdutosModel
RestauranteApenasNomeModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Thai Gourmet
title: RestauranteApenasNomeModel
RestauranteBasicoModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
cozinha:
$ref: '#/definitions/CozinhaModel'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Thai Gourmet
taxaFrete:
type: number
example: 12
title: RestauranteBasicoModel
RestauranteIdInput:
type: object
required:
- id
properties:
id:
type: integer
format: int64
example: 1
title: RestauranteIdInput
RestauranteInput:
type: object
required:
- cozinha
- endereco
- nome
- taxaFrete
properties:
cozinha:
$ref: '#/definitions/CozinhaIdInput'
endereco:
$ref: '#/definitions/EnderecoInput'
nome:
type: string
example: Thai Gourmet
taxaFrete:
type: number
example: 12
title: RestauranteInput
RestauranteModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
aberto:
type: boolean
ativo:
type: boolean
cozinha:
$ref: '#/definitions/CozinhaModel'
endereco:
$ref: '#/definitions/EnderecoModel'
id:
type: integer
format: int64
example: 1
nome:
type: string
example: Thai Gourmet
taxaFrete:
type: number
example: 12
title: RestauranteModel
RestaurantesBasicoModel:
type: object
properties:
_embedded:
$ref: '#/definitions/RestaurantesEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: RestaurantesBasicoModel
RestaurantesEmbeddedModel:
type: object
properties:
restaurantes:
type: array
items:
$ref: '#/definitions/RestauranteBasicoModel'
title: RestaurantesEmbeddedModel
SenhaInput:
type: object
required:
- novaSenha
- senhaAtual
properties:
novaSenha:
type: string
example: 123
senhaAtual:
type: string
example: 123
title: SenhaInput
UsuarioComSenhaInput:
type: object
required:
- email
- nome
- senha
properties:
email:
type: string
example: joao.ger@algafood.com.br
nome:
type: string
example: João da Silva
senha:
type: string
example: 123
title: UsuarioComSenhaInput
UsuarioInput:
type: object
required:
- email
- nome
properties:
email:
type: string
example: joao.ger@algafood.com.br
nome:
type: string
example: João da Silva
title: UsuarioInput
UsuarioModel:
type: object
properties:
_links:
$ref: '#/definitions/Links'
email:
type: string
example: joao.ger@algafood.com.br
id:
type: integer
format: int64
example: 1
nome:
type: string
example: João da Silva
title: UsuarioModel
UsuariosEmbeddedModel:
type: object
properties:
usuarios:
type: array
items:
$ref: '#/definitions/UsuarioModel'
title: UsuariosEmbeddedModel
UsuariosModel:
type: object
properties:
_embedded:
$ref: '#/definitions/UsuariosEmbeddedModel'
_links:
$ref: '#/definitions/Links'
title: UsuariosModel
VendaDiaria:
type: object
properties:
data:
type: string
format: date-time
totalFaturado:
type: number
totalVendas:
type: integer
format: int64
title: VendaDiaria
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment