A CakeStation, uma confeitaria popular que faz vários bolos, pediu que você criasse um sistema online de gerenciamento de pedidos para ela.
Os detalhes dos itens do menu são os seguintes.
| Item | Preço |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
Espera-se que o seguinte seja possível.
pending, in progress ou completed).pending.pending.Recuperar o menu
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Fazer um pedido
Método - POST
Caminho - /order
Requisição
username - nome de usuário (string)order_items - um array de objetos JSON que representam os itens do pedido. Cada objeto JSON conterá exatamente dois campos: um campo item, do tipo string, que indica o nome do item, e um campo quantity, do tipo inteiro, que indica a quantidade pedida daquele item.{
"type": "object",
"properties": {
"username": {
"type": "string"
},
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"username",
"order_items"
]
}
Resposta
username estiver vazio ouorder_items estiver vazio ouorder_items contiver mais de um objeto JSON para um mesmo tipo de bolo ouorder_items tiver um campo item com um tipo de bolo que não está no menu ouorder_items tiver um campo quantity com valor menor que 1application/json
order_id contendo a string do ID do pedido gerada aleatoriamente. Ela deve ser a representação em string de um valor numérico válido.total contendo o valor total (inteiro) do pedido (ou seja, a soma de preço x quantidade para cada tipo de bolo){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Recuperar o status de um pedido
GET
/order/{orderId}
orderId especificadocontent-type - application/json
um objeto JSON com dois campos string, order_id e status, que representam, respectivamente, o ID do pedido e o status (um de pending, in progress ou completed)
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Atualizar um pedido. Só é permitido se o status ainda for pending.
Método - PUT
Caminho - /order/{orderId}
Requisição
o payload da requisição será um objeto JSON com um único campo order_items.
order_items - um array de objetos JSON que representam os itens do pedido. Cada objeto JSON conterá exatamente dois campos: um campo item, do tipo string, que indica o nome do item, e um campo quantity, do tipo inteiro, que indica a quantidade pedida daquele item.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
Resposta
orderId especificadopending (ou seja, in progress ou completed)order_items não atender aos mesmos requisitos que os de fazer um pedido (2)content-type - application/json
um objeto JSON com dois campos
order_id contendo a mesma string de ID do pedido originaltotal contendo o valor total do pedido (ou seja, a soma de preço x quantidade para cada tipo de bolo){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Observação: se uma tentativa de atualização falhar, nenhuma alteração deve ser feita no pedido existente.
Excluir um pedido. Só é permitido se o status ainda for pending.
DELETE
/order/{orderId}
orderId especificadopending (ou seja, in progress ou completed)O ID do pedido gerado deve ser único, deve ser uma string e deve ser a representação em string de um número válido (por exemplo, "1", "1234").
configurable chamada port, com o valor padrão 8080, para especificar a porta em que o serviço escuta.orderStatus no nível do módulo para manter o status dos pedidos, em que o valor é "pending", "in progress" ou "completed" associado à string de ID do pedido gerada aleatoriamente.
"pending", "in progress" ou "completed")orderStatus com o valor "pending" para cada novo pedido.Recuperando o menu.
$ curl -v http://localhost:8080/menu
< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}
Tentando fazer o pedido com um payload válido.
$ curl -v http://localhost:8080/order -d '{"username": "mary", "order_items": [{"item": "Tres Leches", "quantity": 1}, {"item": "Chocolate Cake", "quantity": 2}]}' -H 'Content-Type: application/json'
< HTTP/1.1 201 Created
< content-type: application/json
{"order_id":"7", "total":65}
Observação: "order_id" deve/será uma string única gerada aleatoriamente.
Tentando fazer o pedido com um payload que não corresponde ao formato esperado.
$ curl -v http://localhost:8080/order -d '{"username": "mary", "order_items": [{"Tres Leches": 1}, {"Chocolate Cake": 2}]}' -H 'Content-Type: application/json'
< HTTP/1.1 400 Bad Request
'order) pode ser usado para usar order (que é uma palavra-chave) como caminho.Crie sua conta no Exercism para aprender e dominar Ballerina com 60 exercícios e mentoria humana de verdade, tudo de graça.