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 ফিল্ড, যা আইটেমের নাম নির্দেশ করে, আর একটি ইন্টিজার 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 ফিল্ডের মান 1-এর কম হয়application/json
order_id, যাতে থাকবে এলোমেলোভাবে তৈরি করা অর্ডার আইডি স্ট্রিং। এটি একটি বৈধ সংখ্যাসূচক মানের স্ট্রিং রূপ হওয়া উচিত।total ফিল্ড, যাতে থাকবে অর্ডারের মোট মান (ইন্টিজার) (অর্থাৎ প্রতিটি ধরনের কেকের জন্য দাম × পরিমাণের যোগফল){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
একটি অর্ডারের স্ট্যাটাস রিট্রিভ করা
GET
/order/{orderId}
orderId বিশিষ্ট কোনো অর্ডার না থাকেcontent-type - application/json
দুটি স্ট্রিং ফিল্ড order_id আর status থাকা একটি JSON অবজেক্ট, যা যথাক্রমে অর্ডার আইডি ও স্ট্যাটাস (pending, in progress, বা completed এর মধ্যে একটি) নির্দেশ করে
{
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"order_id",
"status"
]
}
একটি অর্ডার আপডেট করা। কেবল স্ট্যাটাস এখনও pending থাকলে অনুমোদিত।
মেথড - PUT
পাথ - /order/{orderId}
রিকোয়েস্ট
রিকোয়েস্ট পেলোড হবে কেবল একটি ফিল্ড order_items থাকা একটি JSON অবজেক্ট।
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"
]
}
রেসপন্স
orderId বিশিষ্ট কোনো অর্ডার না থাকেpending না হয় (অর্থাৎ in progress বা completed)order_items অ্যারে অর্ডার দেওয়ার (2) ক্ষেত্রের মতো একই শর্ত পূরণ না করেcontent-type - application/json
দুটি ফিল্ডযুক্ত একটি JSON অবজেক্ট
order_id, যাতে থাকবে মূল অর্ডারের মতো একই অর্ডার আইডি স্ট্রিংtotal ফিল্ড, যাতে থাকবে অর্ডারের মোট মান (অর্থাৎ প্রতিটি ধরনের কেকের জন্য দাম × পরিমাণের যোগফল){
"type": "object",
"properties": {
"order_id": {
"type": "string"
},
"total": {
"type": "integer"
}
},
"required": [
"order_id",
"total"
]
}
নোট: কোনো আপডেটের চেষ্টা ব্যর্থ হলে, বিদ্যমান অর্ডারে কোনো পরিবর্তন করা উচিত নয়।
একটি অর্ডার ডিলিট করা। কেবল স্ট্যাটাস এখনও pending থাকলে অনুমোদিত।
DELETE
/order/{orderId}
orderId বিশিষ্ট কোনো অর্ডার না থাকেpending না হয় (অর্থাৎ in progress বা completed)তৈরি করা অর্ডার আইডি ইউনিক হওয়া উচিত, তা একটি স্ট্রিং হওয়া উচিত, এবং তা একটি বৈধ সংখ্যার স্ট্রিং রূপ হওয়া উচিত (যেমন "1", "1234")।
8080 ডিফল্ট মানযুক্ত একটি configurable ভ্যারিয়েবল port ব্যবহার করুন।orderStatus ম্যাপ ব্যবহার করুন, যেখানে এলোমেলোভাবে তৈরি করা অর্ডার আইডি স্ট্রিংয়ের বিপরীতে মান হয় "pending", "in progress", বা "completed" এগুলোর যেকোনো একটি।
"pending", "in progress", বা "completed")"pending" মান দিয়ে orderStatus ম্যাপ আপডেট করুন।মেনু রিট্রিভ করা।
$ 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" একটি এলোমেলোভাবে তৈরি ইউনিক স্ট্রিং হওয়া উচিত/হবে।
প্রত্যাশিত ফরম্যাটের সাথে না মেলা পেলোড দিয়ে অর্ডার দেওয়ার চেষ্টা।
$ 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।