From 0d82a71c8882accbd4000e0fc7210c2a088b5154 Mon Sep 17 00:00:00 2001 From: AlisonZ Date: Wed, 14 Jun 2017 16:25:59 -0700 Subject: [PATCH 1/4] can add a movie to inventory, shows default image or custom image if available --- app/controllers/movies_controller.rb | 16 ++++++++++++++++ app/models/movie.rb | 17 +++++++++++------ config/routes.rb | 2 +- lib/movie_wrapper.rb | 6 ++++-- 4 files changed, 32 insertions(+), 9 deletions(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 362e2791..40324292 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -21,6 +21,17 @@ def show ) end + def create + movie = Movie.create(movie_params) + if movie.id + render status: :ok, json:{ + id: movie.id + } + else + render status: :bad_request, json: {errors: 'could not create movie'} + end + end + private def require_movie @@ -29,4 +40,9 @@ def require_movie render status: :not_found, json: { errors: { title: ["No movie with title #{params["title"]}"] } } end end + + def movie_params + params.require(:movie).permit(:title, :overview, :release_date, :image_url, :external_id) + + end end diff --git a/app/models/movie.rb b/app/models/movie.rb index 0327a4d6..85a4777a 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -9,11 +9,16 @@ def available_inventory end def image_url - orig_value = read_attribute :image_url - if !orig_value - MovieWrapper::DEFAULT_IMG_URL - else - MovieWrapper.construct_image_url(orig_value) - end + orig_value = read_attribute :image_url + # why doesn't external work for the elsif condition?????? + # external = read_attribute :external_id + if !orig_value + MovieWrapper::DEFAULT_IMG_URL + # elsif external == null + elsif orig_value[0] == "/" + MovieWrapper.construct_image_url(orig_value) + else + orig_value + 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" diff --git a/lib/movie_wrapper.rb b/lib/movie_wrapper.rb index 7bd05c0e..43826b57 100644 --- a/lib/movie_wrapper.rb +++ b/lib/movie_wrapper.rb @@ -27,12 +27,14 @@ def self.construct_movie(api_result) title: api_result["title"], overview: api_result["overview"], release_date: api_result["release_date"], - image_url: api_result["poster_path"], #(api_result["poster_path"] ? self.construct_image_url(api_result["poster_path"]) : nil), + image_url: api_result["poster_path"], external_id: api_result["id"]) + #(api_result["poster_path"] ? self.construct_image_url(api_result["poster_path"]) : nil), + end def self.construct_image_url(img_name) - return BASE_IMG_URL + DEFAULT_IMG_SIZE + img_name + return BASE_IMG_URL + DEFAULT_IMG_SIZE + img_name end end From cf2b2d27c89ad031aa47591a23ebd2d5c775864f Mon Sep 17 00:00:00 2001 From: add2point71dots Date: Fri, 16 Jun 2017 10:55:55 -0700 Subject: [PATCH 2/4] cleaned up image_url method --- app/models/movie.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/models/movie.rb b/app/models/movie.rb index 85a4777a..8ac98060 100644 --- a/app/models/movie.rb +++ b/app/models/movie.rb @@ -10,12 +10,9 @@ def available_inventory def image_url orig_value = read_attribute :image_url - # why doesn't external work for the elsif condition?????? - # external = read_attribute :external_id if !orig_value MovieWrapper::DEFAULT_IMG_URL - # elsif external == null - elsif orig_value[0] == "/" + elsif external_id MovieWrapper.construct_image_url(orig_value) else orig_value From 34665c30dab44ef0b487735e528c321af4eca607 Mon Sep 17 00:00:00 2001 From: add2point71dots Date: Fri, 16 Jun 2017 11:00:33 -0700 Subject: [PATCH 3/4] deleted unneccessary thing from movie_params --- app/controllers/movies_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index 40324292..db56b434 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -42,7 +42,7 @@ def require_movie end def movie_params - params.require(:movie).permit(:title, :overview, :release_date, :image_url, :external_id) + params.require(:movie).permit(:title, :overview, :release_date, :image_url) end end From 55300ad19ecf988fb40d9c226129217b49524170 Mon Sep 17 00:00:00 2001 From: add2point71dots Date: Tue, 20 Jun 2017 14:50:15 -0700 Subject: [PATCH 4/4] inventory updates when adding a movie --- app/controllers/movies_controller.rb | 23 +++++++++++++++---- .../20170620213100_set_default_inventory.rb | 5 ++++ db/schema.rb | 8 +++---- 3 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 db/migrate/20170620213100_set_default_inventory.rb diff --git a/app/controllers/movies_controller.rb b/app/controllers/movies_controller.rb index db56b434..d00326f4 100644 --- a/app/controllers/movies_controller.rb +++ b/app/controllers/movies_controller.rb @@ -22,13 +22,26 @@ def show end def create - movie = Movie.create(movie_params) - if movie.id - render status: :ok, json:{ - id: movie.id + existing_movie = Movie.find_by(title: params["title"]) + if existing_movie + puts existing_movie + existing_movie.inventory += 1 + if existing_movie.save + render status: :ok, json: { + id: existing_movie.id } + else + render status: :bad_request, json: {errors: 'could not add movie'} + end else - render status: :bad_request, json: {errors: 'could not create movie'} + new_movie = Movie.create(movie_params) + if new_movie.id + render status: :ok, json:{ + id: new_movie.id + } + else + render status: :bad_request, json: {errors: 'could not create movie'} + end end end diff --git a/db/migrate/20170620213100_set_default_inventory.rb b/db/migrate/20170620213100_set_default_inventory.rb new file mode 100644 index 00000000..6ba066dc --- /dev/null +++ b/db/migrate/20170620213100_set_default_inventory.rb @@ -0,0 +1,5 @@ +class SetDefaultInventory < ActiveRecord::Migration[5.0] + def change + change_column_default :movies, :inventory, 1 + end +end diff --git a/db/schema.rb b/db/schema.rb index 15e75977..56909b67 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170612201103) do +ActiveRecord::Schema.define(version: 20170620213100) do create_table "customers", force: :cascade do |t| t.string "name" @@ -29,9 +29,9 @@ t.string "title" t.text "overview" t.date "release_date" - t.integer "inventory" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.integer "inventory", default: 1 + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "image_url" end