From e254e05ca62bfdb6e8cbdf4baede3ba78adb224c Mon Sep 17 00:00:00 2001 From: Ada Date: Mon, 17 Dec 2018 17:10:25 -0800 Subject: [PATCH 1/3] create API method create to add movie --- app/controllers/movies_controller.rb | 14 ++++++++++++++ app/models/movie.rb | 7 ++++++- config/routes.rb | 1 + lib/movie_wrapper.rb | 4 ++++ 4 files changed, 25 insertions(+), 1 deletion(-) 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/models/movie.rb b/app/models/movie.rb index 0016080b..99b4e610 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -2,16 +2,21 @@ 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 def image_url orig_value = read_attribute :image_url + puts orig_value if !orig_value MovieWrapper::DEFAULT_IMG_URL - elsif external_id + elsif external_id ##&& id < 100 MovieWrapper.construct_image_url(orig_value) + # elsif external_id && id > 100 + # MovieWrapper.construct_image_url_new(orig_value) else orig_value end 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/lib/movie_wrapper.rb b/lib/movie_wrapper.rb index c51d05ee..ea3a8c94 100644 --- a/lib/movie_wrapper.rb +++ b/lib/movie_wrapper.rb @@ -38,4 +38,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 From ec631a489af792f662899300aaef4b1cc7ad0d96 Mon Sep 17 00:00:00 2001 From: Jane Date: Wed, 19 Dec 2018 10:40:28 -0800 Subject: [PATCH 2/3] added overdue rental seeds --- app/models/movie.rb | 5 +-- app/models/rental.rb | 1 + db/seeds.rb | 12 ++++++++ db/seeds/rentals.json | 72 +++++++++++++++++++++++++++++++++++++++++++ lib/movie_wrapper.rb | 1 - 5 files changed, 86 insertions(+), 5 deletions(-) create mode 100644 db/seeds/rentals.json diff --git a/app/models/movie.rb b/app/models/movie.rb index 99b4e610..ee2a4cc3 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -10,13 +10,10 @@ def available_inventory def image_url orig_value = read_attribute :image_url - puts orig_value if !orig_value MovieWrapper::DEFAULT_IMG_URL - elsif external_id ##&& id < 100 + elsif external_id MovieWrapper.construct_image_url(orig_value) - # elsif external_id && id > 100 - # MovieWrapper.construct_image_url_new(orig_value) else orig_value 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/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 ea3a8c94..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 [] From a0a20a58d87f238ec39a6cc08c2db5f31c8f59f9 Mon Sep 17 00:00:00 2001 From: Ada Date: Wed, 19 Dec 2018 11:52:32 -0800 Subject: [PATCH 3/3] add image to result of rental --- app/controllers/rentals_controller.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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