A CakeStation, uma pastelaria popular que faz vários bolos, pediu-te para criares um sistema de gestão de encomendas online.
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 seja possível fazer o seguinte.
pending, in progress ou completed).pending.pending.Obter o menu
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Fazer uma encomenda
Método - POST
Caminho - /order
Pedido
username - o nome de utilizador do utilizador (string)order_items - um array de objetos JSON que representam os itens da encomenda. 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 encomendada desse 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 do que um objeto JSON para um determinado 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 um valor inferior a 1application/json
order_id que contém a string do ID da encomenda gerada aleatoriamente. Esta deve ser a representação em string de um valor numérico válido.total que contém o valor total (inteiro) da encomenda (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"
]
}
Obter o estado de uma encomenda
GET
/order/{orderId}
orderId especificadocontent-type - application/json
um objeto JSON com dois campos string, order_id e status, que representam, respetivamente, o ID da encomenda e o estado (um de pending, in progress ou completed)
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Atualizar uma encomenda. Só é permitido se o estado ainda for pending.
Método - PUT
Caminho - /order/{orderId}
Pedido
o payload do pedido será um objeto JSON com um único campo order_items.
order_items - um array de objetos JSON que representam os itens da encomenda. 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 encomendada desse 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 cumprir os mesmos requisitos que os de fazer a encomenda (2)content-type - application/json
um objeto JSON com dois campos
order_id que contém a mesma string de ID da encomenda originaltotal que contém o valor total da encomenda (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"
]
}
Nota: se uma tentativa de atualização falhar, não deve ser feita nenhuma alteração à encomenda existente.
Eliminar uma encomenda. Só é permitido se o estado ainda for pending.
DELETE
/order/{orderId}
orderId especificadopending (ou seja, in progress ou completed)O ID da encomenda 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 port com o valor predefinido de 8080 para especificar a porta em que o serviço escuta.orderStatus ao nível do módulo para manter o estado das encomendas, em que o valor é "pending", "in progress" ou "completed" associado à string do ID da encomenda gerada aleatoriamente.
"pending", "in progress" ou "completed")orderStatus com o valor "pending" para cada nova encomenda.Obter 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}
Tentar fazer a encomenda 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}
Nota: "order_id" deverá/será uma string única gerada aleatoriamente.
Tentar fazer a encomenda 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.Inscreve-te no Exercism para aprenderes e dominares Ballerina com 60 exercícios, e mentoria humana real, tudo grátis.