ruby 2.5.7, PostgreSQL
- Clone the repository
- Run bundle install command:
bundle install
- Setup postgres database connection using this file:
config/database.yml
- Run this commands:
rails db:create
rails db:migrate
rails db:seed
- Run server server using:
rails s
- Run Tests:
rails test
- Heroku version of this project
EMAIL: admin@admin.com PASS: 4DM1N_W3B
- Postman collection:
- devise Used for authentication. (Excellent Gem, used in a lot of projects, with good support and documentation.)
- devise-jwt Used for authentication using JSON Web Token on API (It‘s a well documented standard that has many implementation across almost all popular programming languages including Ruby.)
- active model serializers (An easy way to render JSON data on API responses.)
- Bootstrap (Very common open-source toolkit for Frontend development, used in a lot of projects, with excellent support, documentation and free resources.)
- Selec2 (Good replacement for HTML select boxes, customizable and with support for searching, tagging, remote data sets, infinite scrolling, and many other highly used options.)
// API LOGIN
POST https://movies-rest-api-marco.herokuapp.com/api/login.json
{
"api_user": {
"email":"admin@admin.com",
"password":"4DM1N_W3B"
}
}
// GET Movies
GET https://movies-rest-api-marco.herokuapp.com/api/v1/movies
RESPONSE
[
{
"id": 5,
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI",
"casting": [
{
"first_name": "Elijah",
"last_name": "Wood",
"aliases": [
"Frodo",
"Hobbit"
]
},
{
"first_name": "Ian",
"last_name": "McKellen",
"aliases": [
"Gandalf",
"The Wizard"
]
},
{
"first_name": "Orlando",
"last_name": "Bloom",
"aliases": [
"Legolas",
"Elve"
]
},
{
"first_name": "Liv",
"last_name": "Tyler",
"aliases": [
"Arwen",
"Elf"
]
}
],
"directors": [
{
"first_name": "Peter",
"last_name": "Jackson",
"aliases": []
}
],
"producers": [
{
"first_name": "Barrie",
"last_name": "Osborne",
"aliases": []
},
{
"first_name": "Fran",
"last_name": "Walsh",
"aliases": []
},
{
"first_name": "Tim",
"last_name": "Sanders",
"aliases": []
}
]
},
{
"id": 6,
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII",
"casting": [
{
"first_name": "Elijah",
"last_name": "Wood",
"aliases": [
"Frodo",
"Hobbit"
]
},
{
"first_name": "Ian",
"last_name": "McKellen",
"aliases": [
"Gandalf",
"The Wizard"
]
},
{
"first_name": "Orlando",
"last_name": "Bloom",
"aliases": [
"Legolas",
"Elve"
]
},
{
"first_name": "Liv",
"last_name": "Tyler",
"aliases": [
"Arwen",
"Elf"
]
}
],
"directors": [
{
"first_name": "Peter",
"last_name": "Jackson",
"aliases": []
}
],
"producers": [
{
"first_name": "Barrie",
"last_name": "Osborne",
"aliases": []
},
{
"first_name": "Fran",
"last_name": "Walsh",
"aliases": []
}
]
},
{
"id": 7,
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII",
"casting": [
{
"first_name": "Elijah",
"last_name": "Wood",
"aliases": [
"Frodo",
"Hobbit"
]
},
{
"first_name": "Ian",
"last_name": "McKellen",
"aliases": [
"Gandalf",
"The Wizard"
]
},
{
"first_name": "Orlando",
"last_name": "Bloom",
"aliases": [
"Legolas",
"Elve"
]
},
{
"first_name": "Liv",
"last_name": "Tyler",
"aliases": [
"Arwen",
"Elf"
]
}
],
"directors": [
{
"first_name": "Peter",
"last_name": "Jackson",
"aliases": []
}
],
"producers": [
{
"first_name": "Barrie",
"last_name": "Osborne",
"aliases": []
},
{
"first_name": "Fran",
"last_name": "Walsh",
"aliases": []
}
]
},
{
"id": 8,
"title": "Ad Astra",
"release_year": "MMXIX",
"casting": [
{
"first_name": "Liv",
"last_name": "Tyler",
"aliases": [
"Arwen",
"Elf"
]
},
{
"first_name": "Brad",
"last_name": "Pitt",
"aliases": []
}
],
"directors": [],
"producers": [
{
"first_name": "Brad",
"last_name": "Pitt",
"aliases": []
}
]
}
]
// GET Movie
GET https://movies-rest-api-marco.herokuapp.com/api/v1/movies/5
RESPONSE
{
"id": 5,
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI",
"casting": [
{
"first_name": "Elijah",
"last_name": "Wood",
"aliases": [
"Frodo",
"Hobbit"
]
},
{
"first_name": "Ian",
"last_name": "McKellen",
"aliases": [
"Gandalf",
"The Wizard"
]
},
{
"first_name": "Orlando",
"last_name": "Bloom",
"aliases": [
"Legolas",
"Elve"
]
},
{
"first_name": "Liv",
"last_name": "Tyler",
"aliases": [
"Arwen",
"Elf"
]
}
],
"directors": [
{
"first_name": "Peter",
"last_name": "Jackson",
"aliases": []
}
],
"producers": [
{
"first_name": "Barrie",
"last_name": "Osborne",
"aliases": []
},
{
"first_name": "Fran",
"last_name": "Walsh",
"aliases": []
},
{
"first_name": "Tim",
"last_name": "Sanders",
"aliases": []
}
]
}
// CREATE Movie - Require Authentication
POST https://movies-rest-api-marco.herokuapp.com/api/v1/movies
{
"movie": {
"title": "Fight Club",
"release_year": 1999,
"casting_ids": ["18"],
"director_ids": [],
"producer_ids": []
}
}
RESPONSE
{
"id": 10,
"title": "Fight Club",
"release_year": "MCMXCIX",
"casting": [
{
"first_name": "Brad",
"last_name": "Pitt",
"aliases": []
}
],
"directors": [],
"producers": []
}
// UPDATE Movie - Require Authentication
PUT https://movies-rest-api-marco.herokuapp.com/api/v1/movies/10
{
"movie": {
"title": "Fight Club (by David Fincher)",
"release_year": 1999,
"casting_ids": ["18"],
"director_ids": [],
"producer_ids": []
}
}
RESPONSE
{
"id": 10,
"title": "Fight Club (by David Fincher)",
"release_year": "MCMXCIX",
"casting": [
{
"first_name": "Brad",
"last_name": "Pitt",
"aliases": []
}
],
"directors": [],
"producers": []
}
// GET People
GET https://movies-rest-api-marco.herokuapp.com/api/v1/people
RESPONSE
[
{
"id": 10,
"first_name": "Peter",
"last_name": "Jackson",
"aliases": [],
"movies_as_actor": [],
"movies_as_director": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
}
],
"movies_as_producer": []
},
{
"id": 11,
"first_name": "Barrie",
"last_name": "Osborne",
"aliases": [],
"movies_as_actor": [],
"movies_as_director": [],
"movies_as_producer": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
}
]
},
{
"id": 12,
"first_name": "Fran",
"last_name": "Walsh",
"aliases": [],
"movies_as_actor": [],
"movies_as_director": [],
"movies_as_producer": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
}
]
},
{
"id": 13,
"first_name": "Tim",
"last_name": "Sanders",
"aliases": [],
"movies_as_actor": [],
"movies_as_director": [],
"movies_as_producer": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
}
]
},
{
"id": 14,
"first_name": "Elijah",
"last_name": "Wood",
"aliases": [
"Frodo",
"Hobbit"
],
"movies_as_actor": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
}
],
"movies_as_director": [],
"movies_as_producer": []
},
{
"id": 15,
"first_name": "Ian",
"last_name": "McKellen",
"aliases": [
"Gandalf",
"The Wizard"
],
"movies_as_actor": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
}
],
"movies_as_director": [],
"movies_as_producer": []
},
{
"id": 16,
"first_name": "Orlando",
"last_name": "Bloom",
"aliases": [
"Legolas",
"Elve"
],
"movies_as_actor": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
}
],
"movies_as_director": [],
"movies_as_producer": []
},
{
"id": 17,
"first_name": "Liv",
"last_name": "Tyler",
"aliases": [
"Arwen",
"Elf"
],
"movies_as_actor": [
{
"title": "The Lord of the Rings: The Fellowship of the Ring",
"release_year": "MMI"
},
{
"title": "The Lord of the Rings: The Two Towers",
"release_year": "MMII"
},
{
"title": "The Lord of the Rings: The Return of the King",
"release_year": "MMIII"
},
{
"title": "Ad Astra",
"release_year": "MMXIX"
}
],
"movies_as_director": [],
"movies_as_producer": []
},
{
"id": 18,
"first_name": "Brad",
"last_name": "Pitt",
"aliases": [],
"movies_as_actor": [
{
"title": "Ad Astra",
"release_year": "MMXIX"
},
{
"title": "Fight Club (by David Fincher)",
"release_year": "MCMXCIX"
}
],
"movies_as_director": [],
"movies_as_producer": [
{
"title": "Ad Astra",
"release_year": "MMXIX"
}
]
}
]
// GET Person
GET https://movies-rest-api-marco.herokuapp.com/api/v1/people/18
RESPONSE
{
"id": 18,
"first_name": "Brad",
"last_name": "Pitt",
"aliases": [],
"movies_as_actor": [
{
"title": "Ad Astra",
"release_year": "MMXIX"
},
{
"title": "Fight Club (by David Fincher)",
"release_year": "MCMXCIX"
}
],
"movies_as_director": [],
"movies_as_producer": [
{
"title": "Ad Astra",
"release_year": "MMXIX"
}
]
}
// CREATE Person - Require Authentication
POST https://movies-rest-api-marco.herokuapp.com/api/v1/persons
{
"person": {
"first_name": "Helena",
"last_name": "Bonham",
"aliases": ["CBE"],
"movies_as_actor_ids": ["10"],
"movies_as_director_ids": [],
"movies_as_producer_ids": []
}
}
RESPONSE
{
"id": 22,
"first_name": "Helena",
"last_name": "Bonham",
"aliases": [
"CBE"
],
"movies_as_actor": [
{
"title": "Fight Club (by David Fincher)",
"release_year": "MCMXCIX"
}
],
"movies_as_director": [],
"movies_as_producer": []
}
// UPDATE Person - Require Authentication
PUT https://movies-rest-api-marco.herokuapp.com/api/v1/people/1
{
"person": {
"first_name": "Helena",
"last_name": "Bonham Carter",
"aliases": ["Helen", "CBE"]
}
}
RESPONSE
{
"id": 22,
"first_name": "Helena",
"last_name": "Bonham Carter",
"aliases": [
"Helen",
"CBE"
],
"movies_as_actor": [
{
"title": "Fight Club (by David Fincher)",
"release_year": "MCMXCIX"
}
],
"movies_as_director": [],
"movies_as_producer": []
}