diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 362e2791..8a8831da 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -1,32 +1,49 @@ class MoviesController < ApplicationController - before_action :require_movie, only: [:show] + before_action :require_movie, only: [:show] - def index - if params[:query] - data = MovieWrapper.search(params[:query]) - else - data = Movie.all + def index + data = if params[:query] + MovieWrapper.search(params[:query]) + else + Movie.all + end + + render status: :ok, json: data end - render status: :ok, json: data - end + def create + if Movie.where(title: movie_params[:title], release_date: movie_params[:release_date]).empty? + movie = Movie.new(movie_params) + if movie.save + render status: :ok, json: { id: movie.id } + else + render status: :bad_request, json: { errors: movie.errors.messages } + end + else + render status: :bad_request, json: { errors: movie.errors.messages } + end + end - def show - render( - status: :ok, - json: @movie.as_json( - only: [:title, :overview, :release_date, :inventory], - methods: [:available_inventory] + def show + render( + status: :ok, + json: @movie.as_json( + only: [:title, :overview, :release_date, :inventory], + methods: [:available_inventory] + ) ) - ) - end + end - private + private + + def require_movie + @movie = Movie.find_by(title: params[:title]) + unless @movie + render status: :not_found, json: { errors: { title: ["No movie with title #{params['title']}"] } } + end + end - def require_movie - @movie = Movie.find_by(title: params[:title]) - unless @movie - render status: :not_found, json: { errors: { title: ["No movie with title #{params["title"]}"] } } + def movie_params + params.require(:movie).permit(:title, :overview, :release_date, :image_url) end - end end diff --git a/app/models/movie.rb b/app/models/movie.rb index 0327a4d6..7bad873a 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -10,10 +10,11 @@ def available_inventory def image_url orig_value = read_attribute :image_url - if !orig_value + if !orig_value || orig_value == "http://lorempixel.com/185/278/" MovieWrapper::DEFAULT_IMG_URL else - MovieWrapper.construct_image_url(orig_value) + url = orig_value.sub('https://image.tmdb.org/t/p/w185', '') + MovieWrapper.construct_image_url(url) end end end diff --git a/config/routes.rb b/config/routes.rb index 54bf033e..8eff1ff6 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,7 +3,7 @@ resources :customers, only: [:index] - resources :movies, only: [:index, :show], param: :title + resources :movies, only: [:index, :show, :create], param: :title post "/rentals/:title/check-out", to: "rentals#check_out", as: "check_out" post "/rentals/:title/return", to: "rentals#check_in", as: "check_in"