CakeStation, une boulangerie réputée qui prépare toutes sortes de gâteaux, t'a demandé de lui mettre en place un système de gestion des commandes en ligne.
Voici le détail des articles du menu.
| Article | Prix |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
Les opérations suivantes doivent être possibles.
pending, in progress ou completed).pending.pending.Récupérer le menu
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Passer une commande
Méthode - POST
Chemin - /order
Requête
username - nom d'utilisateur de l'utilisateur (string)order_items - un tableau d'objets JSON représentant les articles de la commande. Chaque objet JSON contiendra exactement deux champs : un champ item de type string indiquant le nom de l'article et un champ quantity de type entier indiquant la quantité commandée pour cet article.{
"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"
]
}
Réponse
username est vide ouorder_items est vide ouorder_items contient plus d'un objet JSON pour un même type de gâteau ouorder_items a un champ item dont le type de gâteau ne figure pas au menu ouorder_items a un champ quantity dont la valeur est inférieure à 1application/json
order_id contenant l'identifiant de commande généré aléatoirement, sous forme de string. Il doit s'agir de la représentation d'une valeur numérique valide.total contenant la valeur totale (un entier) de la commande (c'est-à-dire la somme de prix × quantité pour chaque type de gâteau){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Récupérer le statut d'une commande
GET
/order/{orderId}
orderId spécifiécontent-type - application/json
un objet JSON avec deux champs de type string, order_id et status, représentant respectivement l'identifiant de la commande et son statut (l'un de pending, in progress ou completed)
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Mettre à jour une commande. Autorisé uniquement si le statut est encore pending.
Méthode - PUT
Chemin - /order/{orderId}
Requête
la charge utile de la requête sera un objet JSON avec un seul champ order_items.
order_items - un tableau d'objets JSON représentant les articles de la commande. Chaque objet JSON contiendra exactement deux champs : un champ item de type string indiquant le nom de l'article et un champ quantity de type entier indiquant la quantité commandée pour cet article.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
Réponse
orderId spécifiépending (c'est-à-dire in progress ou completed)order_items ne remplit pas les mêmes conditions que pour passer une commande (2)content-type - application/json
un objet JSON avec deux champs
order_id contenant le même identifiant de commande que la commande d'originetotal contenant la valeur totale de la commande (c'est-à-dire la somme de prix × quantité pour chaque type de gâteau){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Note : si une tentative de mise à jour échoue, aucune modification ne doit être apportée à la commande existante.
Supprimer une commande. Autorisé uniquement si le statut est encore pending.
DELETE
/order/{orderId}
orderId spécifiépending (c'est-à-dire in progress ou completed)L'identifiant de commande généré doit être unique, doit être une string et doit être la représentation sous forme de string d'un nombre valide (par exemple "1", "1234").
configurable port avec la valeur par défaut 8080 pour spécifier le port sur lequel le service écoute.orderStatus au niveau du module pour maintenir le statut des commandes, où la valeur est "pending", "in progress" ou "completed", associée à l'identifiant de commande généré aléatoirement.
"pending", "in progress" ou "completed")orderStatus avec la valeur "pending" pour chaque nouvelle commande.Récupération du 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}
Tentative de passer une commande avec une charge utile valide.
$ 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}
Note : « order_id » doit être, ou sera, une string unique générée aléatoirement.
Tentative de passer une commande avec une charge utile qui ne correspond pas au format attendu.
$ 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) peut être utilisé pour employer order (qui est un mot-clé) comme chemin.Inscris-toi sur Exercism pour apprendre et maîtriser Ballerina avec 60 exercices, et un vrai mentorat humain, le tout gratuitement.