In this challenge, we'll be working on a Restaurant backend API using rails.
This challenge has :
- Rails API backend
- Three Resources
- To download the dependencies for the backend, run:
bundle install
There is some starter code in the db/seeds.rb file so that once you've generated the models, you'll be able to create data to test your application.
You can run your Rails API on localhost:3000 by running:
rails s
Run the Rails server and using Postman to make requests
Our tables has following relationships:
A Restaurant
has many Pizzas
through RestaurantPizza
A Pizza
has many Restaurants
through RestaurantPizza
A RestaurantPizza
belongs to a Restaurant
and belongs to a Pizza
Start by creating the models and migrations for the following database tables:
Then, run the migrations and seed file:
rails db:migrate db:seed
If you aren't able to get the provided seed file working, you are welcome to generate your own seed data to test the application.
Add validations to the RestaurantPizza model:
must have a price
between 1 and 30
Set up the following routes. Make sure to return JSON data in the format specified along with the appropriate HTTP verb.
GET /restaurants
Return JSON data in the format below:
[ { "id": 1, "name": "Sottocasa NYC", "address": "298 Atlantic Ave, Brooklyn, NY 11201" }, { "id": 2, "name": "PizzArte", "address": "69 W 55th St, New York, NY 10019" } ]
Screencast.from.21-03-2023.9.39.59.WB.webm
GET /restaurants/:id
If the Restaurant exists, return JSON data in the format below:
{ "id": 1, "name": "Sottocasa NYC", "address": "298 Atlantic Ave, Brooklyn, NY 11201", "pizzas": [ { "id": 1, "name": "Cheese", "ingredients": "Dough, Tomato Sauce, Cheese" }, { "id": 2, "name": "Pepperoni", "ingredients": "Dough, Tomato Sauce, Cheese, Pepperoni" } ] }
Screencast.from.21-03-2023.10.25.33.WB.webm
If the Restaurant does not exist, return the following JSON data, along with the appropriate HTTP status code:
{ "error": "Restaurant not found" }
Screencast.from.21-03-2023.10.29.30.WB.webm
DELETE /restaurants/:id
If the Restaurant exists, it should be removed from the database, along with any RestaurantPizzas
that are associated with it (a RestaurantPizza
belongs to a Restaurant
, so you need to delete the RestaurantPizzas
before the Restaurant
can be deleted).
After deleting the Restaurant, return an empty response body, along with the appropriate HTTP status code.
If the Restaurant
does not exist, return the following JSON data, along with the appropriate HTTP status code:
{ "error": "Restaurant not found" }
Screencast.from.21-03-2023.10.44.12.WB.webm
GET /pizzas
Return JSON data in the format below:
[ { "id": 1, "name": "Cheese", "ingredients": "Dough, Tomato Sauce, Cheese" }, { "id": 2, "name": "Pepperoni", "ingredients": "Dough, Tomato Sauce, Cheese, Pepperoni" } ]
Screencast.from.21-03-2023.10.45.57.WB.webm
POST /restaurant_pizzas
This route should create a new RestaurantPizza
that is associated with an existing Pizza
and Restaurant
. It should accept an object with the following properties in the body of the request:
{ "price": 5, "pizza_id": 1, "restaurant_id": 3 }
Screencast.from.21-03-2023.10.48.59.WB.webm
If the RestaurantPizza
is created successfully, send back a response with the data related to the Pizza:
{ "id": 1, "name": "Cheese", "ingredients": "Dough, Tomato Sauce, Cheese" }
Screencast.from.21-03-2023.10.52.18.WB.webm
If the RestaurantPizza
is not created successfully, return the following JSON data, along with the appropriate HTTP status code:
{ "errors": ["validation errors"] }