ट्रैक
/
Ballerina
Ballerina
/
अभ्यास
/
केक एक झूठ है
केक एक झूठ है

केक एक झूठ है

मध्यम

निर्देश

समस्या

CakeStation, तरह-तरह के केक बनाने वाली एक लोकप्रिय बेकरी है। उसने आपसे कहा है कि आप उसके लिए ऑनलाइन ऑर्डर प्रबंधन का सिस्टम बना दें।

मेन्यू में मौजूद चीज़ों का विवरण इस प्रकार है।

चीज़ कीमत
Butter Cake 15
Chocolate Cake 20
Tres Leches 25

निम्नलिखित काम हो पाने चाहिए।

  • मेन्यू प्राप्त करना।
  • ऑर्डर देना।
  • किसी ऑर्डर की स्थिति प्राप्त करना (pending, in progress या completed में से एक)।
  • किसी ऑर्डर को अपडेट करना। यह तभी किया जा सकता है जब स्थिति अब भी pending हो।
  • किसी ऑर्डर को हटाना। यह तभी किया जा सकता है जब स्थिति अब भी pending हो।

बाध्यताएँ

  1. मेन्यू प्राप्त करना

    • मेथड - GET
    • पाथ - /menu
    • रिस्पॉन्स
      • 200 OK
      • content-type - application/json
      • एक JSON ऑब्जेक्ट, जिसमें key की जगह चीज़ों के नाम और वैल्यू की जगह कीमतें (पूर्णांक) होती हैं
        {
           "Butter Cake": 15,
           "Chocolate Cake": 20,
           "Tres Leches": 25
        }
        
  2. ऑर्डर देना

    • मेथड - POST

    • पाथ - /order

    • रिक्वेस्ट

      • रिक्वेस्ट का पेलोड एक JSON ऑब्जेक्ट होगा, जिसमें ये फील्ड होंगे
        • username - उपयोगकर्ता का नाम (string)
        • order_items - JSON ऑब्जेक्ट का ऐरे, जो ऑर्डर की चीज़ों को दर्शाता है। हर JSON ऑब्जेक्ट में ठीक दो फील्ड होंगे: एक स्ट्रिंग item फील्ड, जो चीज़ का नाम बताता है, और एक पूर्णांक 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"
            ]
        }
        
    • रिस्पॉन्स

      • 400 Bad Request, अगर
        • पेलोड अपेक्षित फॉर्मैट से मेल नहीं खाता, या
        • username खाली है, या
        • order_items ऐरे खाली है, या
        • order_items ऐरे में किसी एक तरह के केक के लिए एक से अधिक JSON ऑब्जेक्ट हैं, या
        • order_items ऐरे के किसी सदस्य के item फील्ड में बताया गया केक मेन्यू में नहीं है, या
        • order_items ऐरे के किसी सदस्य के quantity फील्ड की वैल्यू 1 से कम है
      • 201 Created, अगर ऑर्डर सफलतापूर्वक दिया जाता है
        • content-type - application/json
        • दो फील्ड वाला एक JSON ऑब्जेक्ट
          • एक order_id, जिसमें बेतरतीब ढंग से बनाई गई ऑर्डर ID स्ट्रिंग होती है। यह किसी मान्य संख्यात्मक वैल्यू का स्ट्रिंग रूप होनी चाहिए।
          • एक total फील्ड, जिसमें ऑर्डर की कुल वैल्यू (पूर्णांक) होती है (यानी हर तरह के केक के लिए कीमत x मात्रा का जोड़)
          {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string"
                  },
                  "total": {
                      "type": "integer"
                  }
              },
              "required": [
                  "order_id",
                  "total"
              ]
          }
          
  3. किसी ऑर्डर की स्थिति प्राप्त करना

    • मेथड - GET
    • पाथ - /order/{orderId}
    • रिस्पॉन्स
      • 404 Not Found, अगर दिए गए orderId वाला कोई ऑर्डर नहीं है
      • 200 OK
        • content-type - application/json

        • दो स्ट्रिंग फील्ड order_id और status वाला एक JSON ऑब्जेक्ट, जो क्रमशः ऑर्डर ID और स्थिति (pending, in progress या completed में से एक) दर्शाता है

          {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string"
                  },
                  "status": {
                      "type": "string"
                  }
              },
              "required": [
                  "order_id",
                  "status"
              ]
          }
          
  4. किसी ऑर्डर को अपडेट करना। यह तभी किया जा सकता है जब स्थिति अब भी pending हो।

    • मेथड - PUT

    • पाथ - /order/{orderId}

    • रिक्वेस्ट

      • रिक्वेस्ट का पेलोड एक JSON ऑब्जेक्ट होगा, जिसमें एक ही फील्ड order_items होगा।

        • order_items - JSON ऑब्जेक्ट का ऐरे, जो ऑर्डर की चीज़ों को दर्शाता है। हर JSON ऑब्जेक्ट में ठीक दो फील्ड होंगे: एक स्ट्रिंग item फील्ड, जो चीज़ का नाम बताता है, और एक पूर्णांक quantity फील्ड, जो उस चीज़ के लिए ऑर्डर की गई मात्रा बताता है।
        {
            "type": "object",
            "properties": {
                "order_items": {
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "item": {
                                "type": "string"
                            },
                            "quantity": {
                                "type": "integer"
                            }
                        },
                        "required": [
                            "item",
                            "quantity"
                        ]
                    }
                }
            },
            "required": [
                "order_items"
            ]
        }
        
    • रिस्पॉन्स

      • 404 Not Found, अगर दिए गए orderId वाला कोई ऑर्डर नहीं है
      • 403 Forbidden, अगर ऑर्डर की स्थिति pending नहीं है (यानी in progress या completed)
      • 400 Bad Request, अगर order_items ऐरे ऑर्डर देने (बिंदु 2) के लिए बताई गई शर्तें पूरी नहीं करता
      • 200 OK, अगर अपडेट सफल हो जाता है
        • content-type - application/json

        • दो फील्ड वाला एक JSON ऑब्जेक्ट

          • एक order_id, जिसमें मूल ऑर्डर वाली ही ऑर्डर ID स्ट्रिंग होती है
          • एक total फील्ड, जिसमें ऑर्डर की कुल वैल्यू होती है (यानी हर तरह के केक के लिए कीमत x मात्रा का जोड़)
          {
              "type": "object",
              "properties": {
                  "order_id": {
                      "type": "string"
                  },
                  "total": {
                      "type": "integer"
                  }
              },
              "required": [
                  "order_id",
                  "total"
              ]
          }
          

      ध्यान दें: अगर अपडेट की कोशिश असफल हो जाए, तो मौजूदा ऑर्डर में कोई बदलाव नहीं किया जाना चाहिए।

  5. किसी ऑर्डर को हटाना। यह तभी किया जा सकता है जब स्थिति अब भी pending हो।

    • मेथड - DELETE
    • पाथ - /order/{orderId}
    • रिस्पॉन्स
      • 404 Not Found, अगर दिए गए orderId वाला कोई ऑर्डर नहीं है
      • 403 Forbidden, अगर ऑर्डर की स्थिति pending नहीं है (यानी in progress या completed)
      • 200 OK, अगर ऑर्डर सफलतापूर्वक हट जाता है
  6. बनाई गई ऑर्डर ID अद्वितीय होनी चाहिए, स्ट्रिंग होनी चाहिए, और किसी मान्य संख्या का स्ट्रिंग रूप होनी चाहिए (जैसे "1", "1234")।

परिभाषा

  • सर्विस जिस पोर्ट पर सुनती है, उसे तय करने के लिए डिफॉल्ट वैल्यू 8080 वाला एक configurable वेरिएबल port इस्तेमाल कीजिए।
  • ऑर्डरों की स्थिति बनाए रखने के लिए मॉड्यूल-लेवल orderStatus मैप इस्तेमाल कीजिए, जिसमें बेतरतीब ढंग से बनाई गई ऑर्डर ID स्ट्रिंग के सामने वैल्यू "pending", "in progress" या "completed" में से एक होती है।
    • की - बेतरतीब ढंग से बनाई गई ऑर्डर ID स्ट्रिंग
    • वैल्यू - ऑर्डर की स्थिति ("pending", "in progress" या "completed")
  • हर नए ऑर्डर के लिए orderStatus मैप को "pending" वैल्यू के साथ अपडेट कीजिए।

उदाहरण 1

मेन्यू प्राप्त करना।

$ 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

मान्य पेलोड के साथ ऑर्डर देने की कोशिश।

$ 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" बेतरतीब ढंग से बनाई गई अद्वितीय स्ट्रिंग होगी।

उदाहरण 3

ऐसे पेलोड के साथ ऑर्डर देने की कोशिश, जो अपेक्षित फॉर्मैट से मेल नहीं खाता।

$ 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

संकेत

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Ballerina Exercism

केक एक झूठ है शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Ballerina को 60 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।