CakeStation, una panadería popular que hornea todo tipo de pasteles, te ha pedido que le montes un sistema de gestión de pedidos en línea.
Los detalles de los artículos del menú son los siguientes.
| Artículo | Precio |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
Se espera que sea posible hacer lo siguiente.
pending, in progress o completed).pending.pending.Obtener el menú
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Realizar un pedido
Método: POST
Ruta: /order
Solicitud
username: el nombre de usuario (string)order_items: un array de objetos JSON que representan los artículos del pedido. Cada objeto JSON contendrá exactamente dos campos: un campo item de tipo string que indica el nombre del artículo y un campo quantity de tipo entero que indica la cantidad pedida de ese artículo.{
"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"
]
}
Respuesta
username está vacío oorder_items está vacío oorder_items contiene más de un objeto JSON para un mismo tipo de pastel oorder_items tiene un campo item con un tipo de pastel que no está en el menú oorder_items tiene un campo quantity con un valor menor que 1application/json
order_id que contiene la cadena de ID de pedido generada aleatoriamente. Debe ser la representación en forma de cadena de un valor numérico válido.total que contiene el valor total (entero) del pedido (es decir, la suma de precio x cantidad para cada tipo de pastel){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Obtener el estado de un pedido
GET
/order/{orderId}
orderId especificadocontent-type: application/json
un objeto JSON con dos campos de tipo string, order_id y status, que representan el ID del pedido y su estado (uno de pending, in progress o completed), respectivamente
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Actualizar un pedido. Solo se permite si el estado sigue siendo pending.
Método: PUT
Ruta: /order/{orderId}
Solicitud
el cuerpo de la solicitud será un objeto JSON con un único campo order_items.
order_items: un array de objetos JSON que representan los artículos del pedido. Cada objeto JSON contendrá exactamente dos campos: un campo item de tipo string que indica el nombre del artículo y un campo quantity de tipo entero que indica la cantidad pedida de ese artículo.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
Respuesta
orderId especificadopending (es decir, in progress o completed)order_items no cumple los mismos requisitos que los de realizar el pedido (2)content-type: application/json
un objeto JSON con dos campos
order_id que contiene la misma cadena de ID de pedido que el pedido originaltotal que contiene el valor total del pedido (es decir, la suma de precio x cantidad para cada tipo de pastel){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Nota: si un intento de actualización falla, no se debe hacer ningún cambio al pedido existente.
Eliminar un pedido. Solo se permite si el estado sigue siendo pending.
DELETE
/order/{orderId}
orderId especificadopending (es decir, in progress o completed)El ID de pedido generado debe ser único, debe ser una cadena y debe ser la representación en forma de cadena de un número válido (por ejemplo, "1", "1234").
configurable port con el valor predeterminado 8080 para especificar el puerto en el que escucha el servicio.orderStatus a nivel de módulo para mantener el estado de los pedidos, en el que el valor es "pending", "in progress" o "completed" para cada cadena de ID de pedido generada aleatoriamente.
"pending", "in progress" o "completed")orderStatus con el valor "pending" para cada pedido nuevo.Obtener el menú.
$ curl -v http://localhost:8080/menu
< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}
Intentar realizar el pedido con un cuerpo de solicitud 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» será una cadena única generada aleatoriamente.
Intentar realizar el pedido con un cuerpo que no coincide con el 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) para usar order (que es una palabra clave) como ruta.Regístrate en Exercism para aprender y dominar Ballerina con 60 ejercicios y mentoría humana real, todo gratis.