diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 362e2791..6ad45166 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -21,6 +21,16 @@ def show ) end + def create + movie = Movie.new(movie_params) + + if movie.save + render json: { id: movie.id }, status: :ok + else + render json: { ok: false, errors: movie.errors.messages}, status: :bad_request + end + end + private def require_movie @@ -29,4 +39,8 @@ def require_movie render status: :not_found, json: { errors: { title: ["No movie with title #{params["title"]}"] } } end end + + def movie_params + params.permit(:title, :overview, :release_date, :inventory, :image_url, :external_id) + end end diff --git a/app/controllers/rentals_controller.rb b/app/controllers/rentals_controller.rb index 67e77073..bd3f25c5 100644 --- a/app/controllers/rentals_controller.rb +++ b/app/controllers/rentals_controller.rb @@ -38,7 +38,8 @@ def overdue name: rental.customer.name, postal_code: rental.customer.postal_code, checkout_date: rental.checkout_date, - due_date: rental.due_date + due_date: rental.due_date, + image_url: rental.movie.image_url } end render status: :ok, json: rentals diff --git a/app/models/movie.rb b/app/models/movie.rb index 0016080b..ee2a4cc3 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -2,6 +2,8 @@ class Movie < ApplicationRecord has_many :rentals has_many :customers, through: :rentals + validates :external_id, presence:true, uniqueness: true + def available_inventory self.inventory - Rental.where(movie: self, returned: false).length end diff --git a/app/models/rental.rb b/app/models/rental.rb index 18654f04..c255b9ca 100644 --- a/app/models/rental.rb +++ b/app/models/rental.rb @@ -4,6 +4,7 @@ class Rental < ApplicationRecord # validates :movie, uniqueness: { scope: :customer } validates :due_date, presence: true + # Comment out "validate :due_date_in_future, on: :create" to seed DB validate :due_date_in_future, on: :create after_initialize :set_checkout_date diff --git a/config/routes.rb b/config/routes.rb index f4c99688..450bed57 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -8,6 +8,7 @@ post "/rentals/:title/check-out", to: "rentals#check_out", as: "check_out" post "/rentals/:title/return", to: "rentals#check_in", as: "check_in" get "/rentals/overdue", to: "rentals#overdue", as: "overdue" + post "/movies", to: "movies#create", as: "create_movie" root 'movies#index' diff --git a/db/seeds.rb b/db/seeds.rb index 6abb1e9f..8ee44696 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -10,3 +10,15 @@ movies.first.inventory = movie_data['inventory'] movies.first.save unless movies.empty? end + +# Comment out "validate :due_date_in_future, on: :create" to seed DB + +JSON.parse(File.read('db/seeds/rentals.json')).each do |rental| + new_rental = Rental.new(rental) + customer = Customer.all.sample + movie = Movie.all.sample + new_rental.customer = customer + new_rental.movie = movie + + new_rental.save +end diff --git a/db/seeds/rentals.json b/db/seeds/rentals.json new file mode 100644 index 00000000..7a0e053d --- /dev/null +++ b/db/seeds/rentals.json @@ -0,0 +1,72 @@ +[ +{ +"checkout_date": "Mon, 03 Dec 2018", +"due_date": "Tue, 18 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Mon, 03 Dec 2018", +"due_date": "Mon, 17 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Mon, 27 Nov 2018", +"due_date": "Tue, 18 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Tue, 27 Nov 2018", +"due_date": "Tue, 18 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Tue, 04 Dec 2018", +"due_date": "Tue, 18 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Mon, 03 Dec 2018", +"due_date": "Tue, 18 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Sun, 26 Nov 2018", +"due_date": "Mon, 17 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Wed, 28 Nov 2018", +"due_date": "Sun, 16 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Wed, 28 Nov 2018", +"due_date": "Sun, 16 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +}, +{ +"checkout_date": "Wed, 28 Nov 2018", +"due_date": "Sun, 16 Dec 2018", +"returned": false, +"customer_id": 0, +"movie_id": 0 +} +] diff --git a/lib/movie_wrapper.rb b/lib/movie_wrapper.rb index c51d05ee..2fb45608 100644 --- a/lib/movie_wrapper.rb +++ b/lib/movie_wrapper.rb @@ -10,7 +10,6 @@ class MovieWrapper def self.search(query) url = BASE_URL + "search/movie?api_key=" + KEY + "&query=" + query puts url - # puts url response = HTTParty.get(url) if response["total_results"] == 0 return [] @@ -38,4 +37,8 @@ def self.construct_image_url(img_name) return BASE_IMG_URL + DEFAULT_IMG_SIZE + img_name end + # def self.construct_image_url_new(img_name) + # return DEFAULT_IMG_SIZE + img_name + # end + end