The bisbis10 restaurant management system is a backend service designed to handle various operations related to restaurants, their dishes, and ratings. The system aims to provide a comprehensive platform for managing restaurant data, including details about the restaurants, their cuisines, dishes, and customer ratings.
The system provides the following APIs:
- Restaurants API: Manages restaurant data.
- Ratings API: Manages customer ratings for restaurants.
- Dishes API: Manages the dishes offered by each restaurant.
The system is built using Java Spring Boot, leveraging its robust framework for creating RESTful APIs. Data persistence can be managed using an in-memory database like H2 for simplicity, or a more robust solution like PostgreSQL for production.
Candidates are expected to design and implement the above APIs, adhering to RESTful principles.
API Description | Endpoint | Request Body | Response Status | Response Body |
---|---|---|---|---|
Get all restaurants | GET /restaurants | 200 OK | [{"id": "1","name": "Taizu","averageRating" : 4.83,"isKosher" : false,"cuisines": ["Asian","Mexican","Indian"]}] | |
Get restaurants by cuisine | GET /restaurants?cuisine={cuisine} | 200 OK | [{"id": "1","name": "Taizu","averageRating" : 4.83,"isKosher" : false,"cuisines": ["Asian","Mexican","Indian"]}] | |
Get restaurant | GET /restaurants/{id} | 200 OK | {"id": "1","name": "Taizu","averageRating" : 4.83,"isKosher" : false,"cuisines": ["Asian","Mexican","Indian"],"dishes": [{"id": "1","name": "Noodles","description": "Amazing one","price": 59}]} | |
Add a restaurant | POST /restaurants | {"name": "Taizu","isKosher": false,"cuisines": ["Asian","Mexican","Indian"]} | 201 CREATED | |
Update a restaurant | PUT /restaurants/{id} | {"cuisines": ["Asian"]} | 200 OK | |
Delete a restaurant | DELETE /restaurants/{id} | 204 No Content |
API Description | Endpoint | Request Body | Response Status | Response Body |
---|---|---|---|---|
Add a restaurant rating | POST /ratings | {"restaurantId": 2, "rating":3.3} | 200 OK |
API Description | Endpoint | Request Body | Response Status | Response Body |
---|---|---|---|---|
Order | POST /order | {"restaurantId": 2, "orderItems":[{"dishId":12,"amount":1},{"dishId":14,"amount":1} ]} ] | 200 OK | {orderId:"ef401fc8-d545-424b-928d-4789cd47bb6e"} |
API Description | Endpoint | Request Body | Response Status | Response Body |
---|---|---|---|---|
Add a dish | POST /restaurants/{id}/dishes | {"name":"Shakshuka","description":"Great one","price": 34} | 201 CREATED | |
Update a dish | PUT /restaurants/{id}/dishes/{dishId} | {"description":"Great one","price": 34} | 200 OK | |
Delete a dish | DELETE /restaurants/{id}/dishes/{dishId} | 204 No Content | ||
Get dishes by a restaurant | GET /restaurants/{id}/dishes | 200 OK | [{"id":"1","name":"Humus","description":"Good one","price": 48}] |
For your convenience, compose.yml includes Postgresql DB, the app is already pointing to this connection. In addition, you have the schema and data SQL files that can setup your DB schema and init data.
- Java SDK - https://www.oracle.com/java/technologies/downloads/#java21
- Java IDE - https://www.jetbrains.com/idea/download or any other IDE
- Docker - https://www.docker.com/products/docker-desktop/
- Fork this repo to your GitHub account.
- Clone it to your local machine.
- You may use the compose.yml file to spin up a local PostgreSQL Docker container
- Complete the task.
- On completion, send your repo link to the [email protected] email, (a snapshot will be taken from your repo once you submit the homework). please do not update your repo after you submit the homework.