Το CakeStation, ένα δημοφιλές αρτοποιείο που φτιάχνει διάφορα κέικ, σου ζήτησε να του στήσεις ένα σύστημα διαχείρισης παραγγελιών μέσω διαδικτύου.
Οι λεπτομέρειες των ειδών του μενού είναι οι εξής.
| Είδος | Τιμή |
|---|---|
| Butter Cake | 15 |
| Chocolate Cake | 20 |
| Tres Leches | 25 |
Αναμένεται να είναι δυνατά τα εξής.
pending, in progress ή completed).pending.pending.Ανάκτηση του μενού
GET
/menu
application/json
{
"Butter Cake": 15,
"Chocolate Cake": 20,
"Tres Leches": 25
}
Υποβολή μιας παραγγελίας
Μέθοδος - POST
Διαδρομή - /order
Αίτημα
username - το όνομα του χρήστη (string)order_items - ένας πίνακας από αντικείμενα JSON που αντιπροσωπεύουν τα είδη της παραγγελίας. Κάθε αντικείμενο JSON θα περιέχει ακριβώς δύο πεδία: ένα πεδίο item τύπου string που δηλώνει το όνομα του είδους και ένα πεδίο quantity τύπου ακέραιου που δηλώνει την ποσότητα της παραγγελίας για το συγκεκριμένο είδος.{
"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"
]
}
Απόκριση
username είναι κενό ήorder_items είναι κενός ήorder_items περιέχει περισσότερα από ένα αντικείμενα JSON για ένα συγκεκριμένο είδος κέικ ήorder_items έχει πεδίο item με είδος κέικ που δεν υπάρχει στο μενού ήorder_items έχει πεδίο quantity με τιμή μικρότερη του 1application/json
order_id που περιέχει το τυχαία παραγόμενο αναγνωριστικό παραγγελίας (string). Αυτό θα πρέπει να είναι η αναπαράσταση ενός έγκυρου αριθμού ως συμβολοσειρά.total που περιέχει τη συνολική τιμή (ακέραιος) της παραγγελίας (δηλαδή, το άθροισμα τιμής x ποσότητας για κάθε είδος κέικ){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Ανάκτηση της κατάστασης μιας παραγγελίας
GET
/order/{orderId}
orderId
content-type - application/json
ένα αντικείμενο JSON με δύο πεδία τύπου string, τα order_id και status, που αντιπροσωπεύουν αντίστοιχα το αναγνωριστικό της παραγγελίας και την κατάστασή της (μία από τις pending, in progress ή completed)
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
Ενημέρωση μιας παραγγελίας. Επιτρέπεται μόνο αν η κατάσταση είναι ακόμα pending.
Μέθοδος - PUT
Διαδρομή - /order/{orderId}
Αίτημα
το φορτίο του αιτήματος θα είναι ένα αντικείμενο JSON με ένα μόνο πεδίο, το order_items.
order_items - ένας πίνακας από αντικείμενα JSON που αντιπροσωπεύουν τα είδη της παραγγελίας. Κάθε αντικείμενο JSON θα περιέχει ακριβώς δύο πεδία: ένα πεδίο item τύπου string που δηλώνει το όνομα του είδους και ένα πεδίο quantity τύπου ακέραιου που δηλώνει την ποσότητα της παραγγελίας για το συγκεκριμένο είδος.{
"type": "object",
"properties": {
"order_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"item": {
"type": "string"
},
"quantity": {
"type": "integer"
}
},
"required": [
"item",
"quantity"
]
}
}
},
"required": [
"order_items"
]
}
Απόκριση
orderId
pending (δηλαδή, in progress ή completed)order_items δεν πληροί τις ίδιες προϋποθέσεις με αυτές για την υποβολή παραγγελίας (2)content-type - application/json
ένα αντικείμενο JSON με δύο πεδία
order_id που περιέχει το ίδιο αναγνωριστικό παραγγελίας (string) με την αρχική παραγγελίαtotal που περιέχει τη συνολική τιμή της παραγγελίας (δηλαδή το άθροισμα τιμής x ποσότητας για κάθε είδος κέικ){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
Σημείωση: αν μια απόπειρα ενημέρωσης αποτύχει, δεν θα πρέπει να γίνει καμία αλλαγή στην υπάρχουσα παραγγελία.
Διαγραφή μιας παραγγελίας. Επιτρέπεται μόνο αν η κατάσταση είναι ακόμα pending.
DELETE
/order/{orderId}
orderId
pending (δηλαδή, in progress ή completed)Το αναγνωριστικό παραγγελίας που παράγεται θα πρέπει να είναι μοναδικό, να είναι string και να είναι η αναπαράσταση ενός έγκυρου αριθμού ως συμβολοσειρά (π.χ. "1", "1234").
configurable μεταβλητή port με προεπιλεγμένη τιμή 8080 για να ορίσεις τη θύρα στην οποία ακούει η υπηρεσία.orderStatus σε επίπεδο module για να τηρείς την κατάσταση των παραγγελιών, όπου η τιμή είναι "pending", "in progress" ή "completed" για το τυχαία παραγόμενο αναγνωριστικό παραγγελίας (string).
"pending", "in progress" ή "completed")orderStatus με την τιμή "pending" για κάθε νέα παραγγελία.Ανάκτηση του μενού.
$ curl -v http://localhost:8080/menu
< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}
Απόπειρα υποβολής της παραγγελίας με έγκυρο φορτίο.
$ 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}
Σημείωση: το "order_id" θα πρέπει να είναι / θα είναι ένα τυχαία παραγόμενο μοναδικό string.
Απόπειρα υποβολής της παραγγελίας με φορτίο που δεν ταιριάζει με την αναμενόμενη μορφή.
$ 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) μπορεί να χρησιμοποιηθεί για να χρησιμοποιήσεις το order (που είναι λέξη-κλειδί) ως διαδρομή.Γράψου στο Exercism για να μάθεις και να κατακτήσεις Ballerina με 60 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.