# CMS-V2 APIs figma: https://www.figma.com/file/6BgHoyCISmyuoQ2TmVX4zq/Food-Ops?node-id=105%3A5018 prd: https://docs.google.com/document/d/1j3ISIn4SX59MvdIo0RjtqtSS-czCDQphdPfAQ0-Ym_Q/edit ## Restarant ### Create restaurant - API: `/admin/api/v1/restaurants` - Method: `POST` - Query Param: n/a - Request Body: Multipart Form - fields: `parse_id`, `name`, `address`, `latitude`, `longitude`, `min_delivery_time`, `min_order_value`, `min_delivery_fee`, `delivery_discount_percent`, `global_delivery_fee`, `global_delivery_fee_discount_percent`, `vat`, `service_charge`, `phone`, `email`, `website`, `discount_type`, `discount`, `max_discount_amount`, `min_discount_order_amount`, `visible_in_app`, `is_flagged`, `search_score`, `radius_promotion`, `city`, `is_resto`, `marketplace_fee`, `is_partner`, `currency`, `group_id`, `is_supershop`, `is_sc_inclusive`, `is_vat_inclusive`, `is_sd_inclusive`, `custom_radius`, `is_tong`,`is_pharma` - image file fields: `logo`, `banner` - fields: - `tags`: JSON Array string. ```json [ { "title": "choco chips", "description": "" }, { "title": "crunchy toppings", "description": "" } ] ``` - `badges`: JSON Array string. ```json [ { "name": "choco chips" }, { "name": "crunchy toppings" } ] ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update restaurant - API: `/admin/api/v1/restaurants/<restaurant_id>` - Method: `PUT` - Query Param: n/a - Request Body: Multipart Form - fields(Required): `parse_id`, `name`, `address`, `latitude`, `longitude`, `min_order_value`, `min_delivery_fee`, `delivery_discount_percent`, `global_delivery_fee`, `global_delivery_fee_discount_percent`, `vat`, `service_charge`, `phone`, `email`, `discount_type`, `discount`, `visible_in_app`, `is_flagged`, `marketplace_fee`, `is_partner`, `is_supershop`, `is_sc_inclusive`, `is_vat_inclusive`, `is_sd_inclusive`, `custom_radius`, `is_tong`,`is_pharma`, `max_discount_amount`, `min_discount_order_amount`, `radius_promotion` - image file fields: `new_logo`, `new_banner` - fields: - `tags`: JSON Array string. ```json [ { "title": "choco chips", "description": "" }, { "title": "crunchy toppings", "description": "" } ] ``` - `badges`: JSON Array string. ```json [ { "name": "choco chips" }, { "name": "crunchy toppings" } ] ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Get restaurant by id - API: `/admin/api/v1/restaurants/<id>` - Method: `GET` - Query Param: n/a - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": "000369fa-c126-49d5-b996-bd0ca5dc32c3", "parse_id": 20127, "name": "Saltbae updated", "address": "Kazi Aspharagus Food Court, Zindabazar", "latitude": 24.895700454711914, "longitude": 91.87020111083984, "logo": null, "banner": "http://food-m.p-stageenv.xyz/food/20127_banner.jpeg", "min_delivery_time": "60 min", "min_order_value": 50, "min_delivery_fee": 0, "delivery_discount_percent": 33.33, "global_delivery_fee": 0, "global_delivery_fee_discount_percent": 60, "vat": 0, "service_charge": 0, "phone": "01312005531", "email": "", "website": "", "store_front": null, "long_shot": null, "discount_type": "PERCENTAGE", "discount": 0, "max_discount_amount": null, "min_discount_order_amount": 0, "visible_in_app": true, "is_flagged": false, "search_score": 0, "radius_promotion": false, "city": 3, "is_resto": false, "accepting_orders": true, "average_rating": null, "rating_count": 0, "marketplace_fee": 0, "is_partner": false, "is_supershop": false, "currency": "BDT", "sd": 0, "created_at": "2021-03-05T23:09:48+0000", "modified_at": "2022-01-16T01:00:51+0000", "is_chain": false, "is_manual_dispatch": false, "popularity_score": 0, "is_tong": false, "is_pharma": false, "custom_radius": null, "badges": null, "tags": null, "mpf": 0, "upfront": false, "subsidy_resto_share": 0, "subsidy_pathao_share": 0, "is_featured": true, "is_sc_inclusive": false, "is_vat_inclusive": false, "is_sd_inclusive": false } } ``` ### List restaurants by filter - API: `/admin/api/v1/restaurants` - Method: `GET` - Query Param: - `id`: Optional. String - `name`: Optional. String - `city`: Optional. Interger - `delivery_discount`: Optional. String (for example: 10-20) - `radius_promotion`: Optional. Boolean - `visible_in_app`: Optional. Boolean - `is_partner`: Optional. Boolean - `is_resto`: Optional. Boolean - `upfront`: Optional. Boolean - `is_supershop`: Optional. Boolean - `page`: Optional. Default: 1 - `page_size`: Optional. - Request Body: n/a - note: - sorted in parse_id ascending order - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 1, "page_size": 30, "current_page": 1, "data": [ { "id": "000369fa-c126-49d5-b996-bd0ca5dc32c3", "parse_id": 20127, "name": "Saltbae updated", "address": "Kazi Aspharagus Food Court, Zindabazar", "latitude": 24.895700454711914, "longitude": 91.87020111083984, "logo": null, "banner": "http://food-m.p-stageenv.xyz/food/20127_banner.jpeg", "min_delivery_time": "60 min", "min_order_value": 50, "min_delivery_fee": 0, "delivery_discount_percent": 33.33, "global_delivery_fee": 0, "global_delivery_fee_discount_percent": 60, "vat": 0, "service_charge": 0, "phone": "01312005531", "email": "", "website": "", "store_front": null, "long_shot": null, "discount_type": "PERCENTAGE", "discount": 0, "max_discount_amount": null, "min_discount_order_amount": 0, "visible_in_app": true, "is_flagged": false, "search_score": 0, "radius_promotion": false, "city": 3, "is_resto": false, "accepting_orders": true, "average_rating": null, "rating_count": 0, "marketplace_fee": 0, "is_partner": false, "is_supershop": false, "currency": "BDT", "sd": 0, "created_at": "2021-03-05T23:09:48.893044Z", "modified_at": "2022-01-16T01:00:51.85117Z", "is_chain": false, "is_manual_dispatch": false, "popularity_score": 0, "is_tong": false, "is_pharma": false, "custom_radius": null, "badges": null, "tags": null, "mpf": 0, "upfront": false, "subsidy_resto_share": 0, "subsidy_pathao_share": 0, "is_featured": true, "is_sc_inclusive": false, "is_vat_inclusive": false, "is_sd_inclusive": false } ] } ``` ### Update restaurant visibility bulk - API: `/admin/api/v1/restaurants/visibility` - Method: `PATCH` - Query Param: n/a - Request Body: ```json { "parse_ids":[ 20127,9095 ], "visible_in_app": true } ``` ```json { "ids": [ "000369fa-c126-49d5-b996-bd0ca5dc32c3", "000aa3ff-5b3b-4001-9f99-7167f6100e82" ], "visible_in_app": true } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Restaurant auto suggestions - API: `/api/v1/restaurants` - Method: `GET` - Query Param: - `name`: Optional. String - `page`: Optional. Integer - `page_size`: Optional. Integer - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 4, "page_size": 50, "current_page": 1, "data": [ { "id": "4cfa0573-22ec-413e-be57-98ba18ce6f5e", "name": "Food Mood" }, { "id": "a9645fc8-b552-4413-8cca-38caf30bfe4a", "name": "Mood Expresso" }, { "id": "bf231255-cef1-4334-9042-e2afbafc5132", "name": "Moodlift Cafe and Bar" }, { "id": "8e9703dd-af4f-4376-ab2d-728be6087cce", "name": "Food Mood" } ] } ``` ### Update restaurant upfront by parse ids - API: `/admin/api/v1/restaurants/upfront` - Method: `PUT` - Query Param: n/a - Request Body: ```json { "parse_ids": [ 11, 12, 110 ], "upfront": false } ``` ```json { "parse_ids": [ 11, 12, 110 ], "upfront": true } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ## Restaurant Groups ### List groups by filter - API: `/api/v1/groups` - Method: `GET` - Query Param: - `group_id`: Optional. Integer - `restaurant_id`: Optional. String - `page`: Optional. Default 1. Integer - `page_size`: Optional. Default 50. Integer - Request Body: N/A - note: - sorted by group_name (ascending order) - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 6, "page_size": 50, "current_page": 1, "data": [ { "id": 2, "name": "branching", "created_at": "2021-07-13T07:31:58.405152Z", "modified_at": "2021-07-13T07:31:58.417073Z", "restaurants": [ { "id": "ca70a048-a06c-4339-bc6d-66c2f60ed200", "name": "Frybox, From Kludio (Khilgaon)" }, { "id": "e3dd7960-3337-4b3b-ac49-1a5fd9bbf2cc", "name": "Rice & Noodles" }, { "id": "e7ebcc18-67db-4d56-87ac-52f467cf80ec", "name": "Euro Asiano Restaurant - Moghbazar" }, { "id": "35a80e9f-35cd-467c-9f14-631009dd744d", "name": "New Cathay (RESTO)" } ] }, { "id": 3, "name": "Chillox branches", "created_at": "2021-08-01T09:06:46.3157Z", "modified_at": "2021-08-01T09:06:46.352308Z", "restaurants": [ { "id": "6f7569a5-61ad-4d97-ba25-4099a2464d15", "name": "Chillox" }, { "id": "feda3606-3058-42e9-aae1-6950a97c0073", "name": "Chillox Aftabnagar" } ] }, { "id": 4, "name": "CP", "created_at": "2021-08-02T10:18:33.18794Z", "modified_at": "2021-08-02T10:18:33.20055Z", "restaurants": [ { "id": "f67d068a-34af-4247-bc58-d0dfe3be353c", "name": "CP Five Star" } ] }, { "id": 6, "name": "Mithai", "created_at": "2022-01-16T10:07:18.753025Z", "modified_at": "2022-01-16T10:07:18.770804Z", "restaurants": [ { "id": "8dc6f827-470a-47f6-bc97-53c14a819075", "name": "Mithai - Paltan" }, { "id": "ae05d865-1957-4f3d-9e8d-960ab8acf022", "name": "Mithai - Malibag Bus Stand" }, { "id": "9f660daa-99d7-4f31-9c12-26817edd52ec", "name": "Mithai - Hazipara" }, { "id": "3c93137e-ed56-46c7-a424-6f56f6953c5d", "name": "Mithai - Mogbazar" }, { "id": "c27f2f6c-2aad-4336-8619-b654977932a9", "name": "Mithai - Paltan 2" }, { "id": "9cd4e475-7de6-49a6-b8ac-7ed60ce8c9b9", "name": "Mithai Shantinagar Branch" } ] }, { "id": 1, "name": "S baker group", "created_at": "2021-07-06T10:39:20.962859Z", "modified_at": "2021-07-06T10:39:20.973741Z", "restaurants": [ { "id": "b0e30b4d-cc0e-4d8f-81d6-02a0c46c9355", "name": "S Baker Food & Pastry" }, { "id": "4e8f129f-9b95-45ba-bf8c-3f7d58b89336", "name": "S Baker Food & Pastry (Branch-2)" }, { "id": "778a90b7-9beb-4f79-aaa0-081dcbcc0061", "name": "S Baker Food & Pastry (Branch-3)" }, { "id": "f16ef82a-40d5-415e-aa1f-3ed1b5b587ac", "name": "S Baker Food & Pastry (Branch-4)" } ] }, { "id": 42, "name": "test_group2", "created_at": "2022-01-26T11:23:29.683563Z", "modified_at": "2022-01-26T11:23:29.683563Z", "restaurants": [ { "id": "c2b618ed-a0fe-4ec2-b12c-56306ab555b8", "name": "Delhi Darbar" } ] } ] } ``` ### List groups by Suggestion - API: `/api/v1/groups/suggestions` - Method: `GET` - Query Param: - `name`: Required. String. (empty string is ok) - `page`: Optional. Default 1. Integer - `page_size`: Optional. Default 50. Integer - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 6, "page_size": 50, "current_page": 1, "data": [ { "id": 2, "name": "branching" }, { "id": 3, "name": "Chillox branches" } ] } ``` ### Get group by id - API: `/api/v1/groups/<group_id>` - Method: `GET` - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": 42, "name": "Delhi Darbar Branches", "created_at": "2022-01-26T11:23:29.683563Z", "modified_at": "2022-01-26T11:23:29.683563Z", "restaurants": [ { "id": "c2b618ed-a0fe-4ec2-b12c-56306ab555b8", "name": "Delhi Darbar" } ] } } ``` ### Create group - API: `/api/v1/groups/` - Method: `POST` - Request Body: ```json { "name": "Delhi Darbar branches", "restaurant_ids": [ "c2b618ed-a0fe-4ec2-b12c-56306ab555b8" ] } ``` - Response: - code: `201` ```json { "success": true, "message": "group 'Delhi Darbar branches' is created successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0001", "message": "another group with same name already exists" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0001", "message": "one or more restaurants are bound to another group" } ``` ### Update group by id - API: `/api/v1/groups/<group_id>` - Method: `PUT` - Request Body: ```json { "name": "Delhi Darbar branches", "restaurant_ids": [ "c2b618ed-a0fe-4ec2-b12c-56306ab555b8" ] } ``` - Response: - code: `200` ```json { "success": true, "message": "group 'Delhi Darbar branches' is updated successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0001", "message": "another group with same name already exists" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0001", "message": "one or more restaurants are bound to another group" } ``` ### Delete group by id - API: `/api/v1/groups/<group_id>` - Method: `DELETE` - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "group is deleted successfully" } ``` ## Restaurant Schedules ### Create schedule for a restaurant - API: `/admin/api/v1/schedules` - Method: `POST` - Query Param: n/a - Request Body: ```json { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "schedules": [ { "day": "Saturday", "opening_time": "08:30:00", "closing_time": "10:00:00" }, { "day": "Saturday", "opening_time": "10:30:00", "closing_time": "15:00:00" }, { "day": "Saturday", "opening_time": "15:30:00", "closing_time": "21:00:00" }, { "day": "Sunday", "opening_time": "08:30:00", "closing_time": "21:00:00" } ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update schedule for a restaurant - API: `/admin/api/v1/schedules` - Method: `PUT` - Query Param: n/a - Request Body: ```json { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "schedules": [ { "day": "Saturday", "opening_time": "08:30:00", "closing_time": "10:00:00" }, { "day": "Saturday", "opening_time": "10:30:00", "closing_time": "15:00:00" }, { "day": "Saturday", "opening_time": "15:30:00", "closing_time": "21:00:00" }, { "day": "Sunday", "opening_time": "08:30:00", "closing_time": "21:00:00" } ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Get restaurant schedules - API: `/admin/api/v1/schedules/restaurants/<restaurant_id>` - Method: `GET` - Query Param: n/a - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "schedules": [ { "id": "f0d40c0a-d566-46da-8653-9b697b2cc66a", "day": "Saturday", "opening_time": "08:30:00", "closing_time": "10:00:00" }, { "id": "d230bdf7-41c2-4c2d-89ed-5f71d4622cdf", "day": "Saturday", "opening_time": "10:30:00", "closing_time": "15:00:00" }, { "id": "845e3b8b-5935-4535-8c1e-98d1cb16287f", "day": "Saturday", "opening_time": "15:30:00", "closing_time": "21:00:00" }, { "id": "296703e7-c6e2-42ec-b5c8-f8836552c217", "day": "Sunday", "opening_time": "08:30:00", "closing_time": "21:00:00" } ] } } ``` ### List restaurant schedules by filter - API: `/admin/api/v1/schedules` - Method: `GET` - Query Param: - `restaurant_id`: Optional. - `city_id`: Optional. - `page`: Optional. Default: 1 - `page_size`: Optional. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 1, "page_size": 50, "current_page": 1, "data": [ { "id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "name": "test-resto", "schedules": [ { "id": "f0d40c0a-d566-46da-8653-9b697b2cc66a", "day": "Saturday", "opening_time": "00:30:00", "closing_time": "10:00:00" }, { "id": "d230bdf7-41c2-4c2d-89ed-5f71d4622cdf", "day": "Saturday", "opening_time": "10:30:00", "closing_time": "15:00:00" }, { "id": "845e3b8b-5935-4535-8c1e-98d1cb16287f", "day": "Saturday", "opening_time": "15:30:00", "closing_time": "21:00:00" }, { "id": "717288c4-5504-468a-8691-6df91d974c6f", "day": "Sunday", "opening_time": "08:30:00", "closing_time": "21:00:00" } ] } ] } ``` ### Delete restaurant schedules - API: `/admin/api/v1/schedules/restaurants/<restaurant_id>` - Method: `DELETE` - Query Param: n/a - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", } ``` ## Restaurant Items ### Single Item Details - API: `/admin/api/v1/items/:item_id` - Method: `GET` - Query Param: N/A - Response: - code: `200` > fields note: `image`: null or string, `priority`: null or interger, `popularity_priority`: null or integer, `description`: null or string, `ingredients`: null or string, `max_allowed_quantity`: null or interger ```json { "success": true, "message": "request is successful", "data": { "id": "cb6bdee0-b20b-4136-b0f9-f9380e68a52c", "name": "No Bones (About It) Platter (4) Sides", "image": null, "image_required": false, "category": { "id": "4fea7063-2aa1-42c2-bb4f-29f3ae19393f", "name": "Sharing Platters" }, "price": 1550, "cuisine": { "id": "ea406c2c-f0ab-4a57-aff0-595553783412", "name": "Portuguese" }, "addons_required": [ { "addon_key": "Extra", "addon_name": "Choose Your Extra Veg Toppings", "required_addon_count": 2, "items": [ { "id": "53fd2367-8146-45a4-81f7-a6bcef031389", "name": "Mushroom" }, { "id": "b2cc20c1-39c6-4b65-839f-9c93a0e9ad05", "name": "Gr. Pepper" }, { "id": "db441d4e-9fd9-4e9d-86ce-98a4622dfcc8", "name": "Spinach" }, { "id": "618c78ee-4e67-4b45-a531-042bee79b09e", "name": "Pineapple" }, { "id": "6dc3fed6-a76c-4505-b6ef-7739dd95bbea", "name": "Onion" }, { "id": "3a110ea7-1596-4c8a-bed5-494a2d4b7569", "name": "Olive" } ] }, { "addon_key": "Extras", "addon_name": "Choose Your Extra Non-Veg Toppings", "required_addon_count": 1, "items": [ { "id": "7ab41e26-53b6-4439-bd4d-690ab5a41aa2", "name": "Ham" }, { "id": "83d83002-ab27-4d06-a0a0-d90611a014ef", "name": "Bacon" }, { "id": "803268d9-9bc1-4b86-8427-f5178bdb0963", "name": "Salami" }, { "id": "742aab2d-5df5-4740-b9eb-d7e40bbc37f1", "name": "Chicken" }, { "id": "00efc3b1-6352-4201-876c-321f413b82ac", "name": "Egg" }, { "id": "98d8abe8-ca4a-4580-8fd9-bb38faf426ff", "name": "Pepperoni" }, { "id": "c3dd053b-3eb8-4794-a9ea-97deac705e5d", "name": "Tuna" }, { "id": "b712a2a7-4eea-44f2-af7b-1dca5fd3ce22", "name": "Cheese" } ] }, { "addon_key": "Extrass", "addon_name": "Choose Your Extra Topping", "required_addon_count": 1, "items": [ { "id": "eba9edd1-6528-47d3-8c5b-054ca749c789", "name": "Extra non veg" }, { "id": "ed58ecff-0dd1-43d9-a106-ed41cd815af0", "name": "Extra Cheese" }, { "id": "aaf7c006-07b1-4979-a90f-cb324042681c", "name": "Extra Fried Egg" } ] } ], "addons_optional": [ { "addon_key": "Extra", "addon_name": "Choose Your Extra Veg Toppings", "items": [ { "id": "7816cb0e-e3eb-45d8-8e07-3ff6a5828673", "name": "Mushroom" }, { "id": "adbc0ca8-b946-4fc2-a66c-7ab5587b4541", "name": "Gr. Pepper" }, { "id": "15b4a9af-7269-49c4-92cb-fd44e09f1af0", "name": "Spinach" }, { "id": "6e019545-8502-45c1-bec3-0e7442496e60", "name": "Pineapple" }, { "id": "d7cdc6ab-9509-442e-9a6e-f74b6c8592e8", "name": "Onion" }, { "id": "99b01b10-6502-4bcb-8b34-ed47d95efd70", "name": "Olive" } ] }, { "addon_key": "Extras", "addon_name": "Choose Your Extra Non-Veg Toppings", "items": [ { "id": "cddc6c62-4e42-4ddd-93f0-8918c90051ca", "name": "Ham" }, { "id": "81bf14b2-2da3-497a-bdb3-22971d72f35b", "name": "Bacon" }, { "id": "c002710c-aea5-406a-af84-4181e34ef6d6", "name": "Salami" }, { "id": "f4adf6f4-36cb-499d-973a-afd5e6b338d0", "name": "Chicken" }, { "id": "bb8ce00a-60cf-4cc5-83e4-5f8a9ee81160", "name": "Egg" }, { "id": "4492dff8-b3aa-400a-8c15-91318141929f", "name": "Pepperoni" }, { "id": "81b80fcf-4950-4eb6-8b55-9b3cf71fcb25", "name": "Tuna" }, { "id": "d458e8f2-3921-42d1-b3ad-772377380bfb", "name": "Cheese" } ] }, { "addon_key": "Extrass", "addon_name": "Choose Your Extra Topping", "items": [ { "id": "961f2163-58b3-427e-a7a1-4998f11ef2e2", "name": "Extra non veg" }, { "id": "aaf3a5d2-a2df-4f8a-8407-120f287c1b78", "name": "Extra Cheese" }, { "id": "bea70e8a-47c7-47d1-9e4e-0f9141ff31bf", "name": "Extra Fried Egg" } ] } ], "menu_hour": { "id": "e52c1163-5006-4a9b-a65a-96f39d0007df", "menu_type": "All Day Menu" }, "discount_type": "PERCENTAGE", "discount": 0, "visibility": true, "priority": null, "popular": false, "popularity_priority": null, "description": "new description", "ingredients": "tomato, onion", "max_allowed_quantity": 9, "is_available": true } } ``` ### List Item by Filter - API: `/admin/api/v1/items` - Method: `GET` - Query Param: - `restaurant_id` - Required. String - `name`: Optional. String. Items name. - `menu_hour_id`: Optional. String. - `has_discount`: Optional. Boolean. - `page` - Optional. Integer. default 1. - `page_size` - Optional. Integer. default 30. - `popular` - Optional. Boolean. default NULL - `has_addons` - Optional. Boolean. default NULL - `visible` - Optional. Boolean. default NULL - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 30, "current_page": 1, "data": [ { "id": "e368d9fb-c008-4073-9f93-51e84f3c286c", "name": "Mini Cappuccino", "description": "Served with Fried Rice, Sweet & Sour Chicken, Mixed Vegetable & French Fry", "image": null, "image_required": false, "max_allowed_quantity": null, "category": "Specialty", "price": 150, "currency": "BDT", "addons_required_count": 0, "addons_optional_count": 2, "is_popular": true, "menu_type": "Full Day Menu", "is_visible": true, "popularity_priority": null, "priority": null, "is_available": true }, { "id": "ea7854df-8c37-499a-be5f-8eadc14bd1c2", "name": "Hazelnut Coffee Freddos (Large)", "description": "", "image": "http://image.com/123", "image_required": true, "max_allowed_quantity": 5, "category": "Coffee Freddos", "price": 345, "currency": "BDT", "addons_required_count": 0, "addons_optional_count": 2, "is_popular": true, "menu_type": "Full Day Menu", "is_visible": true, "popularity_priority": null, "priority": null, "is_available": true } ] } ``` ### Create item - API: `/admin/api/v1/items` - Method: `POST` - Query Param: N/A - Request Body: Multipart Form - fields: `name`, `restaurant_id`, `price`, `popular`, `popularity_priority`, `addons_optional`, `addons_required`, `menu_hours_id`, `cuisine_id`, `category_id`, `discount`, `discount_type`, `visibility`, `priority`, `description`, `ingredients`, `max_allowed_quantity`, `is_available`, `addon_counter` - image file fields: `image` > `addons_optional` or `addons_required` value should be json string array. examples: `addons_optional` : `[]` `addons_optional`: `["1aef59d4-40e0-44cc-91a7-ee62e3185c0c", "06c7f434-083f-406b-b2fe-46ea5cb2f72c"]` `addons_required`: `["1aef59d4-40e0-44cc-91a7-ee62e3185c0c", "06c7f434-083f-406b-b2fe-46ea5cb2f72c"]` > `addon_counter` : `[{"key":" test1","count":1},{"key":" test2","count":2}]` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update item - API: `/admin/api/v1/items/:item_id` - Method: `PUT` - Query Param: N/A - Request Body: Multipart Form - fields: `name`, `restaurant_id`, `price`, `popular`, `popularity_priority`, `addons_optional`, `addons_required`, `menu_hours_id`, `cuisine_id`, `category_id`, `discount`, `discount_type`, `visibility`, `priority`, `description`, `ingredients`, `max_allowed_quantity`, `is_available`, `addon_counter` - image file fields: `image` > `addons_optional` or `addons_required` value should be json string array. examples: `addons_optional` : `[]` `addons_optional`: `["1aef59d4-40e0-44cc-91a7-ee62e3185c0c", "06c7f434-083f-406b-b2fe-46ea5cb2f72c"]` `addons_required`: `["1aef59d4-40e0-44cc-91a7-ee62e3185c0c", "06c7f434-083f-406b-b2fe-46ea5cb2f72c"]` > `addon_counter` : `[{"key":" test1","count":1},{"key":" test2","count":2}]` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Get Response for bulk item update - API: `/admin/api/v1/items/bulk/<restaurant_id>` - Method: `GET` - Query Param: - `category_id`: Optional. - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 165, "page_size": 30, "next_page": 2, "current_page": 1, "data": [ { "id": "0100a9ce-dc64-476b-bfda-3382308b6b90", "name": "Iced Vanilla Latte", "description": "", "image": "http://image.com/123", "image_required": true, "max_allowed_quantity": 5, "category": { "id": "6a6b6aa2-493e-4433-be88-200360a83c70", "name": "Freddo" }, "price": 12, "cuisine": { "id": "0d90a4cc-246a-4fa0-b232-11faa86de75e", "name": "Drinks And Beverages" }, "addons_required": [ { "addon_name": "Choose Your Pizza Size", "addon_key": "sor", "items": [ { "id": "52609eb8-364a-43ea-a458-d006f0914b9a", "name": "12 Inch" } ] } ], "addons_optional": [ { "addon_name": "Choose Your Pizza Size", "addon_key": "regu", "items": [ { "id": "02eb5975-8fcb-44d6-b196-bfdf30b9bb79", "name": "8 Inch" } ] }, { "addon_name": "Choose Your Pizza Size", "addon_key": "grill", "items": [ { "id": "0fc082d5-4514-47c2-9305-3fae18ce4657", "name": "8 Inch" } ] } ], "menu_hour": { "id": "04fe605c-a525-4bef-b640-90b4989f61e4", "menu_type": "Full Day Menu" }, "discount_type": "PERCENTAGE", "discount": 0, "is_visible": true, "priority": null, "is_popular": true, "popularity_priority": 1 }, { "id": "03049eea-648b-4291-ad27-1d29d5b19c07", "name": "Brazil - 450 Gm", "description": "this is ...", "image": null, "image_required": true, "max_allowed_quantity": null, "category": { "id": "3e36c243-8511-4101-a8cb-2d641eedbf79", "name": "Coffee Beans" }, "price": 920, "cuisine": { "id": "0d90a4cc-246a-4fa0-b232-11faa86de75e", "name": "Drinks And Beverages" }, "addons_required": [ { "addon_name": "Choose Your Pizza Size", "addon_key": "sor", "items": [ { "id": "52609eb8-364a-43ea-a458-d006f0914b9a", "name": "12 Inch" } ] } ], "addons_optional": [], "menu_hour": { "id": "04fe605c-a525-4bef-b640-90b4989f61e4", "menu_type": "Full Day Menu" }, "discount_type": "PERCENTAGE", "discount": 0, "is_visible": true, "priority": null, "is_popular": true, "popularity_priority": null } ] } ``` ### Delete Bulk Item - API: `/admin/api/v1/items/bulk/delete` - Method: `POST` - Query Param: N/A - Request Body: ```json [ { "id": "2fe38bf6-ea58-4193-b1c7-207fe423bb28" }, { "id": "2fe38bf6-ea58-4193-b1c7-207fe423bb28" } ] ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update Bulk Item - API: `/admin/api/v1/items/bulk` - Method: `PATCH` - Query Param: N/A - Request Body: - Required fields: `id`. - Optional fields: all other fields which will be updated. - fields: `addons_required`, `addons_optional`, `popular`, `popularity_priority`, `visibility`, `name`, `price`, `image`, `discount_type`, `discount`, `category_id`, `cuisine_id`, `menu_hours_id`, `visibility`, `priority`, `max_allowed_quantity`, `description`, `image_required` > note: `max_allowed_quantity` is nullable field, `"max_allowed_quantity": null` ```json [ { "id": "0100a9ce-dc64-476b-bfda-3382308b6b90", "price": 12, "visibility": true }, { "id": "064c8b78-2849-4f96-9bd0-1c15a7dcf734", "category_id": "6a6b6aa2-493e-4433-be88-200360a83c70", "addons_required": [ "72c704ea-1d40-47f1-8299-5791b3d1080b" ] } ] ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ## Restaurant Addons ### Create Addon for a restaurant - API: `/admin/api/v1/addons` - Method: `POST` - Query Param: n/a - Request Body: ```json { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "key": "key1", "name": "choose items", "is_visible": true, "type": "optional", "items": [ { "name": "item1", "price": 22.44 } ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update Addon for a restaurant - API: `/admin/api/v1/addons` - Method: `PUT` - Query Param: n/a - Request Body: ```json { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "key": "key1", "name": "choose items", "is_visible": true, "type": "optional", "items": [ { "id": "00a1f5e4-7d59-4b3c-9892-35d29e58583d", "name": "item2", "price": 24.44 }, { "id": "", "name":"item3", "price": 11 } ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update bulk Addon for a restaurant - API: `/admin/api/v1/addons/bulk` - Method: `PUT` - Query Param: n/a - Request Body: - Required fields: - `restaurant_id`: string. - `addons`: list of keys with items. - `key`: string. Non-updatable. - `name`: string. Non-updatable. - `type`: string. Non-updatable. - `items`: list of items (aggregated based on key and restaurant_id). - `id`: string. - `name`: string. - `price`: float. - `is_visible`: boolean. ```json { "restaurant_id": "761984d1-0c85-4d82-b18b-345dd97c0f53", "addons": [ { "key": "key1", "name": "choose optional items", "type": "optional", "items": [ { "id": "b1c7e453-17ae-4878-9ca9-dbd3151f4d03", "name": "item2", "price": 24.44, "is_visible": true }, { "id": "434793d6-4262-4424-a0e7-1ed594b3f850", "name":"item3", "price": 11, "is_visible": false } ] } ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Delete Bulk Addons for a restaurant - API: `/admin/api/v1/addons/bulk` - Method: `DELETE` - Query Param: N/A - Request Body: ```json { "restaurant_id": "761984d1-0c85-4d82-b18b-345dd97c0f53", "addons": [ { "key": "small", "type": "required" }, { "key": "small", "type": "optional" } ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Get restaurant addon by addon key - API: `/admin/api/v1/restaurants/<restaurant_id>/addons/keys/<addon-key>` - Method: `GET` - Query Param: - `type`: Required. Values: `required` or `optional`. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "addon_key": "key1", "addon_name": "choose items", "is_visible": true, "type": "optional", "items": [ { "id": "9f0709ac-cf44-40d4-a3fe-21925014ee5c", "name": "item3", "price": 11 }, { "id": "e9a2ba19-f8e8-42f2-8bea-143e7e7d0f57", "name": "item2", "price": 24.44 } ] } } ``` ### List restaurant addon by filter - API: `/admin/api/v1/restaurants/<restaurant_id>/addons` - Method: `GET` - Query Param: - `search`: Optional. It will search on addon key field - `type`: Optional. Values: `required` or `optional`. - `page`: Optional. Default: 1 - `page_size`: Optional. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 50, "current_page": 1, "data": [ { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "type": "required", "addon_key": "key1", "addon_name": "choose items", "is_visible": true, "items": [ { "id": "89f3aac3-db94-4dd0-8d82-5a4135c113b7", "name": "item2", "price": 22.44, "is_visible": true } ] }, { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "type": "optional", "addon_key": "key1", "addon_name": "choose items", "is_visible": true, "items": [ { "id": "9f0709ac-cf44-40d4-a3fe-21925014ee5c", "name": "item3", "price": 11, "is_visible": false }, { "id": "e9a2ba19-f8e8-42f2-8bea-143e7e7d0f57", "name": "item2", "price": 24.44, "is_visible": true } ] } ] } ``` ### Delete restaurant addon by addon key - API: `/admin/api/v1/restaurants/<restaurant_id>/addons/keys/<addon-key>` - Method: `DELETE` - Query Param: - `type`: Required. Values: `required` or `optional`. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### List restaurant addon by suggestion - API: `/admin/api/v1/restaurants/<restaurant_id>/addons/suggestions` - Method: `GET` - Query Param: - `addon_key`: Required. String. (empty string is ok) - `addon_type`: Optional. String. Allowed valued: required or optional - `page`: Optional. Default: 1 - `page_size`: Optional. Default: 50 - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 50, "current_page": 1, "data": [ { "addon_key": "all", "addon_name": "choose Your Sauce", "addon_type": "required", "items": [ { "id": "dff280f4-36b8-4907-98a7-34e5596f91e6", "name": "sauce" } ] }, { "addon_key": "all", "addon_name": "Choose Your Sauce", "addon_type": "optional", "items": [ { "id": "0e55414c-38da-44ee-bb9a-46d1cf7e7fb8", "name": "Sauce" } ] } ] } ``` ### List restaurant addon by Item Name Suggestion - API: `/admin/api/v1/restaurants/<restaurant_id>/addons/items/suggestions` - Method: `GET` - Query Param: - `addon_type`: Require. String. (required | optional) - `item_name`: Required. String. (empty string is ok) - `page`: Optional. Default: 1 - `page_size`: Optional. Default: 50 - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 1, "page_size": 50, "current_page": 1, "data": [ { "id": "dff280f4-36b8-4907-98a7-34e5596f91e6", "addon_key": "all", "addon_name": "choose Your Sauce", "addon_type": "required", "item_name": "sauce" } ] } ``` ## Item Category ### List Item Category - API: `/admin/api/v1/restaurants/<restaurant_id>/item-category` - Method: `GET` - Query Param: - `name`: Optional. String. - `page`: Optional. Integer. default 1. - `page_size`: Optional. Integer. default 50. - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 48, "page_size": 30, "next_page": 2, "current_page": 1, "data": [ { "id": "ee796963-81b0-41fe-8320-d0280f7ef86c", "icon": null, "name": "Cold Drinks", "priority": 1 }, { "id": "06ac8056-fab7-4bc4-a746-408780d926fd", "icon": null, "name": "Beef", "priority": null }, { "id": "0f8a45ae-a77c-4d46-9e12-40bd078e11cd", "icon": null, "name": "Rice", "priority": null }, { "id": "10f854c7-4713-4ac1-8eed-35f1a11e3b6a", "icon": null, "name": "Salad", "priority": null }, { "id": "220622f1-bf3a-4d92-8557-92968d731bdd", "icon": null, "name": "Fried Items", "priority": null }, { "id": "23d7c3e5-06e0-4653-89a3-79a5af2d8f57", "icon": null, "name": "Milk Shake And Frappe", "priority": null }, { "id": "2d5c1ad4-aef7-4fc1-bf22-e1b7856aef3b", "icon": null, "name": "Chicken", "priority": null }, { "id": "30aeb985-b0c1-412d-8dae-67561e7a3855", "icon": null, "name": "Ice Cream", "priority": null }, { "id": "33297af9-6cc7-481e-9320-bb85195db420", "icon": null, "name": "Rice/Biriyani", "priority": null }, { "id": "35e6df04-317a-46f3-8692-70b1fc77d505", "icon": null, "name": "Deesert", "priority": null }, { "id": "39e50756-2375-40ab-b748-5548d1faabd9", "icon": null, "name": "Vegetable", "priority": null }, { "id": "3a0563f3-4063-45fd-9639-bf0b16d4d599", "icon": null, "name": "Beverages", "priority": null }, { "id": "44d1ce02-94f2-4ea1-b665-e2470b9a3600", "icon": null, "name": "Tea", "priority": null }, { "id": "50dda668-b0e8-4fee-b73b-a283f5ca1cc0", "icon": null, "name": "Moctail", "priority": null }, { "id": "61352778-d17b-4349-9849-f763dce5147c", "icon": null, "name": "Fresh Juice", "priority": null }, { "id": "63501114-3ffb-4838-859c-cd5dd062d8d0", "icon": null, "name": "Fast Food", "priority": null }, { "id": "64fccc49-5004-4185-847d-b186b766a1b6", "icon": null, "name": "Tandoori", "priority": null }, { "id": "66de3f0a-3c09-4332-98f5-cec997c8c1d4", "icon": null, "name": "Coffee", "priority": null }, { "id": "6d351c2c-bbd5-49f2-9c6c-e1bae3631233", "icon": null, "name": "Noodles/Chowmein", "priority": null }, { "id": "88540240-989e-47b8-89e3-02a189ed8c62", "icon": null, "name": "Noodles", "priority": null }, { "id": "8d39ee4a-c44f-4419-be62-eb0c592f9db3", "icon": null, "name": "Appetizers", "priority": null }, { "id": "9335aa95-9337-491a-b5a3-34d98199d3c9", "icon": null, "name": "Indian Gravy", "priority": null }, { "id": "9b900e3e-80c5-4410-8a51-987149be391e", "icon": null, "name": "Biriyani", "priority": null }, { "id": "9e2b97f0-4a3a-4b9e-a21f-7c74e39d953a", "icon": null, "name": "Khichuri", "priority": null }, { "id": "9f611c5c-a445-4a70-84ed-ccc4d0863e0d", "icon": null, "name": "Naan", "priority": null }, { "id": "a11dae39-a983-4830-8703-ba0e24d91bd8", "icon": null, "name": "Grilled Items", "priority": null }, { "id": "b3aaa1c2-af25-4017-a729-8db176cf5082", "icon": null, "name": "Soup", "priority": null }, { "id": "ec307bd0-cf0f-4125-b0db-48fc9bd94ccb", "icon": null, "name": "Fish", "priority": null }, { "id": "edb2cdd5-8440-45df-8a0e-b3576b518a90", "icon": null, "name": "Prawn", "priority": null }, { "id": "ee9850a5-eefb-48bc-aead-d08f7df22161", "icon": null, "name": "Breakfast", "priority": null } ] } ``` ### List Item Category by Suggestion - API: `/admin/api/v1/restaurants/<restaurant_id>/item-category/suggestions` - Method: `GET` - Query Param: - `name`: Required. String. (empty string is ok) - `page`: Optional. Integer. default 1. - `page_size`: Optional. Integer. default 30. - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 48, "page_size": 50, "next_page": 2, "current_page": 1, "data": [ { "id": "ee796963-81b0-41fe-8320-d0280f7ef86c", "name": "Cold Drinks" }, { "id": "2d5c1ad4-aef7-4fc1-bf22-e1b7856aef3b", "name": "Chicken" }, { "id": "30aeb985-b0c1-412d-8dae-67561e7a3855", "name": "Ice Cream" } ] } ``` ### Get Item Category by Category ID - API: `/admin/api/v1/restaurants/<restaurant_id>/item-category/<category_id>` - Method: `GET` - Query Param: `N/A` - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": "df277c37-ee0a-4c19-a1ab-55da2a0b8fe2", "icon": null, "name": "Beverage", "priority": null } } ``` - code: `404` ```json { "success": false, "message": "record not found" } ``` ### Update Item Category by Category ID - API: `/admin/api/v1/restaurants/<restaurant_id>/item-category/<category_id>` - Method: `PUT` - Query Param: N/A - Request Body: Multipart Form - fields: - `name`: Required. name of category. String. - `priority`: Optional. priority of the category. Integer. - image field: - `icon`: Optional. icon of the category. MIME type image. - Response: - code: `200` ```json { "success": true, "message": "category 'Kacchi' is updated successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0003", "message": "another category with same name already exists" } ``` ### Delete Item Category by Category ID - API: `/api/v1/restaurants/<restaurant_id>/item-category/<category_id>` - Method: `DELETE` - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "category is deleted successfully" } ``` ### Bulk Update Item Category by Restaurant ID - API: `/admin/api/v1/restaurants/<restaurant_id>/item-category` - Method: `PUT` - Request Body: `json` - Required Fields: - `id`: category id. String. - `name`: name of category. String. - Optional Fields: - `priority`: priority of category. Integer. - Example request body ```json [ { "id": "000112b4-1575-4851-8a31-44e9bec82a21", "name": "Mocktail", "priority": null }, { "id": "df277c37-ee0a-4c19-a1ab-55da2a0b8fe2", "name": "Beverage", "priority": 1 } ] ``` - Response: - code: `200` ```json { "success": true, "message": "selected categories are updated successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0003", "message": "all category names for a specific restaurant must be unique" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0003", "message": "another category with same name already exists" } ``` ### Bulk Delete Item Category by Category ID - API: `/api/v1/restaurants/<restaurant_id>/item-category` - Method: `DELETE` - Request Body: `json` - Required Fields: - `ids`: list of category ids. String. - Example request body ```json { "ids": [ "0005a22f-be46-4ae0-8297-1ff8384123eb", "000aa041-bc3b-46c7-868d-3efa8b86734e" ] } ``` - Response: - code: `200` ```json { "success": true, "message": "selected categories are deleted successfully" } ``` ### Create Category by Restaurant ID - API: `/admin/api/v1/item-category/` - Method: `POST` - Query Param: - `restaurant_id`: Required. String. - Request Body: Multipart Form - fields: - `name`: name of category. String. - `priority`: priority of the category. Integer. - image field: - `icon`: icon of the category. MIME type image. - Response: - code: `201` ```json { "success": true, "message": "category 'Kacchi' is created successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0003", "message": "another category with same name already exists" } ``` ## Menu Hour ### List Menu Hour - API: `/admin/api/v1/restaurants/<restaurant_id>/menu-hours` - Method: `GET` - Query Param: - `menu_type`: Optional. String. - `page`: Optional. Integer. default 1. - `page_size`: Optional. Integer. default 50. - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 5, "page_size": 50, "current_page": 1, "data": [ { "id": "7da5dc1e-01c1-44ca-b023-4baf3eb10270", "menu_type": "All day menu", "days_of_week": [ 1, 7 ], "start_time": "09:00:00", "end_time": "18:00:00" }, { "id": "b723a9a5-57e2-4348-90c5-f8e6b6f3d8a9", "menu_type": "Dinner", "days_of_week": [ 1, 7 ], "start_time": "09:00:00", "end_time": "18:00:00" }, { "id": "5f5eac9c-8809-45bc-b2c0-3ee0e45ef08a", "menu_type": "Lunch", "days_of_week": [ 1, 2, 3, 4, 5, 6, 7 ], "start_time": "09:00:00", "end_time": "18:00:00" }, { "id": "8a136cc1-6844-458e-91de-a2fb6a30ed92", "menu_type": "Special Offer", "days_of_week": [], "start_time": "09:00:00", "end_time": "18:00:00" }, { "id": "7422c5bf-c1c5-4656-8701-3321ceb4aac2", "menu_type": "Sunday Menu", "days_of_week": [ 1 ], "start_time": "09:00:00", "end_time": "18:00:00" } ] } ``` ### List Menu Hour by Suggestion - API: `/admin/api/v1/restaurants/<restaurant_id>/menu-hours/suggestions` - Method: `GET` - Query Param: - `menu_type`: Required. String. (empty string is ok) - `page`: Optional. Integer. default 1. - `page_size`: Optional. Integer. default 50. - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 5, "page_size": 50, "current_page": 1, "data": [ { "id": "7da5dc1e-01c1-44ca-b023-4baf3eb10270", "menu_type": "All day menu" } ] } ``` ### Get Menu Hour by Menu Hour ID - API: `/admin/api/v1/restaurants/<restaurant_id>/menu-hours/<menu_hour_id>` - Method: `GET` - Query Param: `N/A` - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": "88fe05f1-d980-4178-b8d1-64a382b0937d", "menu_type": "Lunch", "days_of_week": [ 1, 7 ], "start_time": "09:00:00", "end_time": "18:00:00" } } ``` - code: `404` ```json { "success": false, "message": "record not found" } ``` ### Update Menu Hour by Menu Hour ID - API: `/admin/api/v1/restaurants/<restaurant_id>/menu-hours/<menu_hour_id>` - Method: `PUT` - Query Param: N/A - Request Body: `json` - Required Fields: - `menu_type`: name of menu hour. String. - `days_of_week`: available days of the menu hour. List of Integers (1<=days<=7). 1 means Sunday and 7 means Saturday. - `start_time`: start time of the menu hour. String. - `end_time`: end time of the menu hour. String. - Example request body ```json { "menu_type": "Afternoon", "days_of_week": [ 1, 7 ], "start_time": "09:00:00", "end_time": "18:00:00" } ``` - Response: - code: `200` ```json { "success": true, "message": "menu hour 'Afternoon' is updated successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0002", "message": "another menu hour with same name already exists" } ``` - code: `400` ```json { "success": false, "message": "start time can't be greater than end time" } ``` - code: `400` ```json { "success": false, "message": "days_of_week must be between 1 and 7 inclusive" } ``` ### Delete Menu Hour by Menu Hour ID - API: `/api/v1/restaurants/<restaurant_id>/menu-hours/<menu_hour_id>` - Method: `DELETE` - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "menu hour is deleted successfully" } ``` ### Bulk Update Menu Hour by Restaurant ID - API: `/admin/api/v1/restaurants/<restaurant_id>/menu-hours` - Method: `PUT` - Query Param: N/A - Request Body: `json` - Required Fields: - `id`: menu hour id. UUIDv4 String. - `menu_type`: name of menu hour. String. - `days_of_week`: available days of the menu hour. List of Integers (1<=days<=7). 1 means Sunday and 7 means Saturday. - `start_time`: start time of the menu hour. String. - `end_time`: end time of the menu hour. String. - Example request body ```json [ { "id": "88fe05f1-d980-4178-b8d1-64a382b0937d", "menu_type": "All day menu", "days_of_week": [ 1, 2, 3, 4 ], "start_time": "10:00:00", "end_time": "18:30:00" }, { "id": "99ef05f1-d980-4178-b8d1-64a382b0937d", "menu_type": "Dinner", "days_of_week": [ 1, 2, 3 ], "start_time": "18:00:00", "end_time": "23:30:00" } ] ``` - Response: - code: `200` ```json { "success": true, "message": "selected menu hours are updated successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0002", "message": "all menu names for a specific restaurant must be unique" } ``` - code: `400` ```json { "success": false, "code": "FOOD_002", "message": "another menu hour with same name already exists" } ``` - code: `400` ```json { "success": false, "message": "start time can't be greater than end time" } ``` - code: `400` ```json { "success": false, "message": "days_of_week must be between 1 and 7 inclusive" } ``` ### Bulk Delete Menu Hour by Menu Hour ID - API: `/api/v1/restaurants/<restaurant_id>/menu-hours` - Method: `DELETE` - Request Body: `json` - Required Fields: - `ids`: List of menu hour ids. String. - Example request body ```json { "ids": [ "0005a22f-be46-4ae0-8297-1ff8384123eb", "0005a22f-be46-4ae0-8297-1ff8384123eb" ] } ``` - Response: - code: `200` ```json { "success": true, "message": "selected menu hours are deleted successfully" } ``` ### Create Menu Hour by Restaurant ID - API: `/admin/api/v1/menu-hours/` - Method: `POST` - Query Param: - `restaurant_id`: Required. String. - Request Body: `json` - Required Fields: - `menu_type`: name of menu hour. String. - `days_of_week`: available days of the menu hour. List of Integers (1<=days<=7). 1 means Sunday and 7 means Saturday. - `start_time`: start time of the menu hour. String. - `end_time`: end time of the menu hour. String. - Example request body ```json { "menu_type": "Afternoon", "days_of_week": [ 1, 7 ], "start_time": "09:00:00", "end_time": "18:00:00" } ``` - Response: - code: `201` ```json { "success": true, "message": "menu hour 'Afternoon' is created successfully" } ``` - code: `400` ```json { "success": false, "code": "FOOD_0002", "message": "another menu hour with same name already exists" } ``` - code: `400` ```json { "success": false, "message": "start time can't be greater than end time" } ``` - code: `400` ```json { "success": false, "message": "days_of_week must be between 1 and 7 inclusive" } ``` ## Cuisine ### Create Cuisine - API: `/admin/api/v1/cuisines` - Method: `POST` - Query Param: n/a - Request Body:Multipart Form - fields: `name`, `priority` - image file fields: `image` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` - code: `400` ```json { "success": false, "code": "FOOD_2001", "message": "already exists" } ``` ### Update Cuisine - API: `/admin/api/v1/cuisines/<cuisine_id>` - Method: `PUT` - Query Param: n/a - Request Body:Multipart Form - fields: `name` (required), `priority` (optional, Default: `nil`) - image file fields: `image` (optional, Default: `nil`) - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` - code: `404` ```json { "success": false, "message": "resource not found" } ``` - code: `400` ```json { "success": false, "message": "cuisine is required" } ``` ### Get Cuisine by ID - API: `/admin/api/v1/cuisines/<cuisine_id>` - Method: `GET` - Query Param: n/a - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": "ea7ade22-c6f6-4994-bc2a-c7798322b8d1", "created_at": "2022-03-07T07:24:09+0000", "modified_at": "2022-03-07T07:24:09+0000", "name": "New Test", "image": "http://localhost:9000/food/cuisine_new_test.jpeg", "priority": 1 } } ``` - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": "ba58a278-8996-42a1-8279-853fd65828ab", "created_at": "2022-03-03T06:29:48+0000", "modified_at": "2022-03-03T06:29:48+0000", "name": "Test1 Hit", "image": null, "priority": null } } ``` - code: `404` ```json { "success": false, "message": "resource not found" } ``` ### List Cuisines by filter - API: `/admin/api/v1/cuisines` - Method: `GET` - Query Param: - `name`: Optional. - `restaurant_id`: Optional. - `page`: Optional. Default: 1 - `page_size`: Optional. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 1, "page_size": 50, "current_page": 1, "data": [ { "id": "16a8523f-526b-43eb-adf7-1021d8b7954c", "created_at": "2019-07-11T05:40:25+0000", "modified_at": "2019-07-11T05:40:25+0000", "name": "South Indian", "image": null, "priority": null, "restaurant_count": 1 } ] } ``` ### List Cuisines by Suggestion - API: `/admin/api/v1/cuisines/suggestions` - Method: `GET` - Query Param: - `name`: Required. String. (empty string is ok) - `page`: Optional. Default: 1 - `page_size`: Optional. Default: 50 - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 50, "current_page": 1, "data": [ { "id": "16a8523f-526b-43eb-adf7-1021d8b7954c", "name": "South Indian" }, { "id": "2fd3fda4-6388-4886-9977-a5f2b5f61f73", "name": "Soups" } ] } ``` ### List Restaurants Cuisines by Suggestion - API: `/admin/api/v1/cuisines/restaurants/suggestions` - Method: `GET` - Query Param: - `name`: Required. String. (empty string is ok) - `restaurant_id`: Required. String. - `page`: Optional. Default: 1 - `page_size`: Optional. Default: 50 - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 50, "current_page": 1, "data": [ { "id": "2fd3fda4-6388-4886-9977-a5f2b5f61f73", "name": "Soups" } ] } ``` ### List specific cuisine restaurants by filter - API: `/admin/api/v1/cuisines/<cuisine_id>/restaurants` - Method: `GET` - Query Param: - `restaurant_name`: Optional. - `restaurant_id`: Optional. - `page`: Optional. Default: 1 - `page_size`: Optional. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 50, "current_page": 1, "data": [ { "restaurant_id": "ea0afcbf-df0b-4b9d-9b13-b154b7a3b21e", "restaurant_name": "Mama Pizza Test" }, { "restaurant_id": "90a1f5e4-7d59-4b3c-9892-35d29e58583d", "restaurant_name": "test-resto" } ] } ``` ### Add restaurants to a cuisine - API: `/admin/api/v1/cuisines/<cuisine_id>/restaurants` - Method: `PUT` - Query Param: n/a - Request Body: ```json { "restaurant_ids" : [ "14614c0a-750d-4130-b2dc-a3e36e97e37c", "90a1f5e4-7d59-4b3c-9892-35d29e58583e" ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` - code: `400` ```json { "success": false, "message": "restaurant id: 90a1f5e4-7d59-4b3c-9892-35d29e58583e not found" } ``` ### Delete restaurants from a cuisine - API: `/admin/api/v1/cuisines/<cuisine_id>/restaurants` - Method: `DELETE` - Query Param: n/a - Request Body: ```json { "restaurant_ids" : [ "14614c0a-750d-4130-b2dc-a3e36e97e37c", "90a1f5e4-7d59-4b3c-9892-35d29e58583e" ] } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Delete Cuisine by ID - API: `/admin/api/v1/cuisines/<cuisine_id>` - Method: `Delete` - Query Param: n/a - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ## Collections ### Collection List - API: `/admin/api/v1/collections` - Method: `GET` - Query Param: - `restaurant_id`: Optional. String - `collection_id`: Optional. String - `page` - Optional. Integer. default 1. - `page_size` - Optional. Integer. default 30. - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 2, "page_size": 50, "current_page": 1, "data": [ { "id": "ab02fefb-707a-47de-bd6c-5481fcbe6b1d", "modified_at": "2019-07-11T11:44:03.929782+06:00", "name": "Featured", "priority": 0, "cover": "http://food-m.p-stageenv.xyz/food/col_cover_Collection-05.png?t=1642058392", "restaurant_count": 1, "is_visible": true }, { "id": "90972f10-d0b8-40c7-aa89-9317c304bfd5", "modified_at": "2022-03-10T18:21:48.202291+06:00", "name": "test", "priority": 0, "cover": null, "restaurant_count": 2, "is_visible": false } ] } ``` ### Get Collection by ID - API: `/admin/api/v1/collections/:collection_id` - Method: `GET` - Query Param: n/a - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": "90972f10-d0b8-40c7-aa89-9317c304bfd5", "name": "updated", "icon": null, "priority": 2, "cover": null, "banner": null, "is_visible": true, "created_at": "2022-03-10T18:21:48+0600", "modified_at": "2022-05-12T13:13:46+0600" } } ``` ### Get Restaurant Collections - API: `/admin/api/v1/collections/restaurant-collections/:collection_id` - Method: `GET` - Query Param: - `restaurant_id` - Optional. String - `page` - Optional. Integer. default 1. - `page_size` - Optional. Integer. default 30. - Request Body: `N/A` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 15, "page_size": 50, "current_page": 1, "data": [ { "id": "e1355333-b4da-4f9b-8be3-ccfdd0336d8d", "restaurant": "GEC Maloncho", "sort_order": 3 }, { "id": "edd926a4-1306-49a5-bdf4-27de6dc5ff81", "restaurant": "Al Arabian Cake & Sweets Baily Road", "sort_order": 0 }, { "id": "a5a90b20-70d1-4252-ae2b-dde4fcd07e73", "restaurant": "Khushbu Hotel and Restaurant-2", "sort_order": 0 }, { "id": "e66244c8-4a5e-4a11-9b67-d734219bf9c6", "restaurant": "Burger Bite - Kakrail", "sort_order": 1 } ] } ``` ### Create Collection - API: `/admin/api/v1/collections` - Method: `POST` - Query Param: N/A - Request Body: Multipart Form - fields: `name`, `priority`, `visibility` - image file fields: `icon`, `banner`, `cover` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update collection - API: `/admin/api/v1/collections/:collection_id` - Method: `PUT` - Request Body: Multipart Form - fields: `name`, `priority`, `visibility` - image file fields: `icon`, `banner`, `cover` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Delete Collection - API: `/admin/api/v1/collections/<collection_id>` - Method: `DELETE` - Query Param: N/A - Request Body: N/A - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Delete Bulk Restaurant Collection - API: `/admin/api/v1/collections/bulk/restaurant-collections/delete` - Method: `POST` - Query Param: N/A - Request Body: ```json [ { "id": "2fe38bf6-ea58-4193-b1c7-207fe423bb28" }, { "id": "2fe38bf6-ea58-4193-b1c7-207fe423bb28" } ] ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Update Bulk Restaurant Collection - API: `/admin/api/v1/collections/bulk/restaurant-collections/update` - Method: `POST` - Query Param: N/A - Request Body: ```json [ { "id": "0100a9ce-dc64-476b-bfda-3382308b6b90", "sort_order": 1 }, { "id": "064c8b78-2849-4f96-9bd0-1c15a7dcf734", "sort_order": 1 } ] ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Add Restaurant To Collection - API: `/admin/api/v1/collections/:collection_id/restaurant` - Method: `POST` - Query Param: N/A - Request Body: ```json { "restaurant_id": "000369fa-c126-49d5-b996-bd0ca5dc32c3", "sort_order": 1 } ``` - Response: - code: `200` ```json { "success": true, "message": "request is successful" } ``` ### Collection Suggestions - API: `/admin/api/v1/collections/suggestions` - Method: `GET` - Query Param: - `name`: Optional. String - `page` - Optional. Integer. default 1. - `page_size` - Optional. Integer. default 50. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 1, "page_size": 50, "current_page": 1, "data": [ { "id": "ab02fefb-707a-47de-bd6c-5481fcbe6b1d", "name": "Featured" } ] } ``` ## Upload/Download job ### Get Job by ID - API: `/admin/api/v1/jobs/<job_id>` - Method: `GET` - Query Param: n/a - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "id": 2, "job_type": "upload", "task_name": "update-restaurant", "description": "update restaurant", "status": "pending", "file_url": "http://localhost:9000/cms-v2/restaurants_update.csv", "payload": null, "error": null, "created_at": "2022-02-03T09:42:59+0000", "updated_at": "2022-02-03T09:42:59+0000", "created_by": "nahid" } } ``` ```json { "success": true, "message": "request is successful", "data": { "id": 4, "job_type": "upload", "task_name": "update-restaurant", "description": "update restaurant", "status": "failed", "file_url": "http://localhost:9000/cms-v2/1644224508_restaurants_update.csv", "payload": null, "error": { "message": "error at line 2: failed to convert csv record to db models: 1 error(s) decoding:\n\n* cannot parse 'visible_in_app' as bool: strconv.ParseBool: parsing \"yes\": invalid syntax", "record_wise_error": null }, "created_at": "2022-02-07T09:01:48+0000", "updated_at": "2022-02-07T09:02:13+0000", "created_by": "nahid" } } ``` ### List jobs by filter - API: `/admin/api/v1/jobs` - Method: `GET` - Query Param: - `task_name`: Optional. - `page`: Optional. Default: 1 - `page_size`: Optional. - Request Body: n/a - Response: - code: `200` ```json { "success": true, "message": "request is successful", "count": 3, "page_size": 100, "current_page": 1, "data": [ { "id": 3, "job_type": "upload", "task_name": "update-restaurant", "description": "update restaurant", "status": "pending", "file_url": "http://localhost:9000/cms-v2/1643881418_restaurants_update.csv?", "payload": null, "error": null, "created_at": "2022-02-03T09:43:38+0000", "updated_at": "2022-02-03T09:43:38+0000", "created_by": "nahid" }, { "id": 2, "job_type": "upload", "task_name": "update-restaurant", "description": "update restaurant", "status": "pending", "file_url": "http://localhost:9000/cms-v2/restaurants_update.csv", "payload": null, "error": null, "created_at": "2022-02-03T09:42:59+0000", "updated_at": "2022-02-03T09:42:59+0000", "created_by": "nahid" }, { "id": 1, "job_type": "upload", "task_name": "update-restaurant", "description": "update restaurant", "status": "pending", "file_url": "http://localhost:9000/cms-v2/restaurants_update.csv", "payload": null, "error": null, "created_at": "2022-02-03T09:25:47+0000", "updated_at": "2022-02-03T09:25:47+0000", "created_by": "nahid" }, { "id": 4, "job_type": "upload", "task_name": "update-restaurant", "description": "update restaurant", "status": "failed", "file_url": "http://localhost:9000/cms-v2/1644224508_restaurants_update.csv", "payload": null, "error": { "message": "error at line 2: failed to convert csv record to db models: 1 error(s) decoding:\n\n* cannot parse 'visible_in_app' as bool: strconv.ParseBool: parsing \"yes\": invalid syntax", "record_wise_error": null }, "created_at": "2022-02-07T09:01:48+0000", "updated_at": "2022-02-07T09:02:13+0000", "created_by": "nahid" } ] } ``` ### Restaurant Update job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `update-restaurant` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Restaurant Schedule Update job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `update-restaurant-schedules` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Restaurant banner upload job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-restaurant-banner` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Restaurant Upload/Create job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-restaurant` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Upload all restaurant related data job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-all` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Cuisine Upload job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-cuisine` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Upload item images job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-item-images` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Update item job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `update-item` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Upload popular items job - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-restaurant-popular-items` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ``` ### Upload Collections - API: `/admin/api/v1/jobs/upload` - Method: `POST` - Query Param: n/a - Request Body: Multipart form - `created_by` - `description` - `file` - `task_name`: `upload-restaurant-collections` - Response: - code: `200` ```json { "success": true, "message": "request is successful", "data": { "job_id": 10 } } ```