Kurzusok
/
Ballerina
Ballerina
/
Feladatok
/
A torta hazugság
A torta hazugság

A torta hazugság

Közepes

Utasítások

Problémafelvetés

CakeStation, egy népszerű cukrászda, amely különféle tortákat süt, felkért, hogy hozz létre számukra egy online rendeléskezelő rendszert.

A menü elemeinek részletei a következők.

Tétel Ár
Butter Cake 15
Chocolate Cake 20
Tres Leches 25

A következőkre kell lehetőséget biztosítani.

  • A menü lekérése.
  • Rendelés leadása.
  • A rendelés állapotának lekérése (a pending, in progress vagy completed egyike).
  • Rendelés frissítése. Csak akkor engedélyezett, ha az állapot még pending.
  • Rendelés törlése. Csak akkor engedélyezett, ha az állapot még pending.

Megkötések

  1. A menü lekérése

    • Módszer - GET
    • Útvonal - /menu
    • Válasz
      • 200 OK
      • content-type - application/json
      • egy JSON objektum, amelynek kulcsai a tételek nevei, értékei pedig az árak (egész szám)
        {
           "Butter Cake": 15,
           "Chocolate Cake": 20,
           "Tres Leches": 25
        }
        
  2. Rendelés leadása

    • Módszer - POST

    • Útvonal - /order

    • Kérés

      • a kérés tartalma egy JSON objektum a következő mezőkkel
        • username - a felhasználó felhasználóneve (string)
        • order_items - JSON objektumok tömbje, amelyek a rendelési tételeket képviselik. Minden JSON objektum pontosan két mezőt tartalmaz: egy item sztring mezőt, amely a tétel nevét jelzi, és egy quantity egész szám mezőt, amely az adott tétel rendelési mennyiségét jelzi.
        {
            "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"
            ]
        }
        
    • Válasz

      • 400 Bad Request, ha
        • a tartalom nem felel meg a várt formátumnak, vagy
        • a username üres, vagy
        • az order_items tömb üres, vagy
        • az order_items tömb egy adott típusú tortához több mint egy JSON objektumot tartalmaz, vagy
        • az order_items tömb egyik elemének item mezője olyan típusú tortát jelöl, amely nincs a menün, vagy
        • az order_items tömb egyik elemének quantity mezője 1-nél kisebb értéket tartalmaz
      • 201 Created, ha a rendelés sikeresen leadásra kerül
        • content-type - application/json
        • egy JSON objektum két mezővel
          • egy order_id, amely a véletlenszerűen generált rendelésazonosító sztringet tartalmazza. Ennek egy érvényes numerikus érték sztring reprezentációjának kell lennie.
          • egy total mező, amely a rendelés teljes értékét (egész szám) tartalmazza (azaz az egyes tortafajták ár x mennyiség összege)
          {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string"
                  },
                  "total": {
                      "type": "integer"
                  }
              },
              "required": [
                  "order_id",
                  "total"
              ]
          }
          
  3. A rendelés állapotának lekérése

    • Módszer - GET
    • Útvonal - /order/{orderId}
    • Válasz
      • 404 Not Found, ha nincs rendelés a megadott orderId-val
      • 200 OK
        • content-type - application/json

        • egy JSON objektum két sztring mezővel: order_id és status, amelyek a rendelés azonosítóját és állapotát képviselik (a pending, in progress vagy completed egyike)

          {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string"
                  },
                  "status": {
                      "type": "string"
                  }
              },
              "required": [
                  "order_id",
                  "status"
              ]
          }
          
  4. Rendelés frissítése. Csak akkor engedélyezett, ha az állapot még pending.

    • Módszer - PUT

    • Útvonal - /order/{orderId}

    • Kérés

      • a kérés tartalma egy JSON objektum egyetlen order_items mezővel.

        • order_items - JSON objektumok tömbje, amelyek a rendelési tételeket képviselik. Minden JSON objektum pontosan két mezőt tartalmaz: egy item sztring mezőt, amely a tétel nevét jelzi, és egy quantity egész szám mezőt, amely az adott tétel rendelési mennyiségét jelzi.
        {
            "type": "object",
            "properties": {
                "order_items": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "item": {
                                "type": "string"
                            },
                            "quantity": {
                                "type": "integer"
                            }
                        },
                        "required": [
                            "item",
                            "quantity"
                        ]
                    }
                }
            },
            "required": [
                "order_items"
            ]
        }
        
    • Válasz

      • 404 Not Found, ha nincs rendelés a megadott orderId-val
      • 403 Forbidden, ha a rendelés állapota nem pending (azaz in progress vagy completed)
      • 400 Bad Request, ha az order_items tömb nem felel meg ugyanazoknak a követelményeknek, mint a rendelés leadásánál (2)
      • 200 OK, ha a frissítés sikeres
        • content-type - application/json

        • egy JSON objektum két mezővel

          • egy order_id, amely ugyanazt a rendelésazonosító sztringet tartalmazza, mint az eredeti rendelés
          • egy total mező, amely a rendelés teljes értékét tartalmazza (azaz az egyes tortafajták ár x mennyiség összege)
          {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string"
                  },
                  "total": {
                      "type": "integer"
                  }
              },
              "required": [
                  "order_id",
                  "total"
              ]
          }
          

      Megjegyzés: ha egy frissítési kísérlet meghiúsul, a meglévő rendelést nem szabad módosítani.

  5. Rendelés törlése. Csak akkor engedélyezett, ha az állapot még pending.

    • Módszer - DELETE
    • Útvonal - /order/{orderId}
    • Válasz
      • 404 Not Found, ha nincs rendelés a megadott orderId-val
      • 403 Forbidden, ha a rendelés állapota nem pending (azaz in progress vagy completed)
      • 200 OK, ha a törlés sikeres
  6. A generált rendelésazonosítónak egyedinek kell lennie, sztringnek kell lennie, és egy érvényes szám sztring reprezentációjának kell lennie (pl. "1", "1234").

Definíció

  • Használj egy configurable változót port néven, 8080 alapértelmezett értékkel, hogy megadd a szolgáltatás által figyelt portot.
  • Használj egy modulszintű orderStatus térképet a rendelések állapotának nyilvántartására, amelyben az érték vagy "pending", "in progress" vagy "completed" a véletlenszerűen generált rendelésazonosító sztringgel szemben.
    • kulcs - véletlenszerűen generált rendelésazonosító sztring
    • érték - a rendelés állapota ("pending", "in progress" vagy "completed")
  • Minden új rendelésnél frissítsd az orderStatus térképet a "pending" értékkel.

1. példa

A menü lekérése.

$ curl -v http://localhost:8080/menu

< HTTP/1.1 200 OK
< content-type: application/json
{"Butter Cake":15, "Chocolate Cake":20, "Tres Leches":25}

2. példa

Kísérlet rendelés leadására érvényes tartalommal.

$ 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}

Megjegyzés: az „order_id” egy véletlenszerűen generált egyedi sztring kell legyen.

3. példa

Kísérlet rendelés leadására olyan tartalommal, amely nem felel meg a várt formátumnak.

$ 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

Tippek

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Ballerina Exercism

Készen állsz elkezdeni a(z) A torta hazugság feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Ballerina nyelvet 60 feladat segítségével, valódi emberi mentorálással, mindez ingyen.