forked from AdaGold/video-store-api
-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tor & Wenjie - VideoStore - Octos #6
Open
torshimizu
wants to merge
25
commits into
Ada-C9:master
Choose a base branch
from
torshimizu:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
25 commits
Select commit
Hold shift + click to select a range
9e98095
ran rails new
torshimizu eeaef79
created models customer, movie, rental
torshimizu decf6bf
fixed table columns and ran db:seed
torshimizu 64eaa54
wrote movie model validations
torshimizu 58e6130
Added model validations
wf1101 a5e5d0d
Merge branch 'master' of https://github.com/torshimizu/VideoStoreAPI
torshimizu 1c94d5e
created tests and controller for customers
torshimizu c5c92d8
Created yml for customers and movies
wf1101 1e48b75
Added movies controller actions
wf1101 48c4e6e
added a positive case for movie model
torshimizu 16673a1
Added relations to models
wf1101 859da32
Implemented tests for model relations
wf1101 5e90218
Added yml for rentals
wf1101 1c0519d
wrote tests for rentals_controller, added conditional validations for…
torshimizu 340a3a0
Added a checkout action in rental controller
wf1101 6df4de1
Added available inventory column to movies and movies checkout count …
wf1101 08f4df0
updated inventory to available inventory. removed required :movie fro…
torshimizu d8c34f9
Added business logic to rental model
wf1101 2c228ea
Added check out action for rentals controller
wf1101 2f1a355
Implemented tests for rentals check in
wf1101 562ef6a
Fixed validation bug and made all tests passed
torshimizu 5cc36de
Added ERD for this project
wf1101 658a45e
moving updating rental movie and customer inventory to rental model
torshimizu d09a9ad
moved updating customer movies_checked_in_count and movie available i…
torshimizu 08ecc76
Merge branch 'master' of https://github.com/torshimizu/VideoStoreAPI
torshimizu File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# See https://help.github.com/articles/ignoring-files for more about ignoring files. | ||
# | ||
# If you find yourself ignoring temporary files generated by your text editor | ||
# or operating system, you probably want to add a global ignore instead: | ||
# git config --global core.excludesfile '~/.gitignore_global' | ||
|
||
# Ignore bundler config. | ||
/.bundle | ||
|
||
# Ignore all logfiles and tempfiles. | ||
/log/* | ||
/tmp/* | ||
!/log/.keep | ||
!/tmp/.keep | ||
|
||
.byebug_history |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
source 'https://rubygems.org' | ||
|
||
git_source(:github) do |repo_name| | ||
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") | ||
"https://github.com/#{repo_name}.git" | ||
end | ||
|
||
|
||
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' | ||
gem 'rails', '~> 5.1.6' | ||
# Use postgresql as the database for Active Record | ||
gem 'pg', '>= 0.18', '< 2.0' | ||
# Use Puma as the app server | ||
gem 'puma', '~> 3.7' | ||
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder | ||
# gem 'jbuilder', '~> 2.5' | ||
# Use Redis adapter to run Action Cable in production | ||
# gem 'redis', '~> 4.0' | ||
# Use ActiveModel has_secure_password | ||
# gem 'bcrypt', '~> 3.1.7' | ||
|
||
# Use Capistrano for deployment | ||
# gem 'capistrano-rails', group: :development | ||
|
||
# Use Rack CORS for handling Cross-Origin Resource Sharing (CORS), making cross-origin AJAX possible | ||
# gem 'rack-cors' | ||
|
||
group :development, :test do | ||
# Call 'byebug' anywhere in the code to stop execution and get a debugger console | ||
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] | ||
end | ||
|
||
group :development do | ||
gem 'listen', '>= 3.0.5', '< 3.2' | ||
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring | ||
gem 'spring' | ||
gem 'spring-watcher-listen', '~> 2.0.0' | ||
end | ||
|
||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem | ||
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] | ||
|
||
group :development, :test do | ||
gem 'pry-rails' | ||
end | ||
|
||
group :test do | ||
gem 'minitest-rails' | ||
gem 'minitest-reporters' | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
GEM | ||
remote: https://rubygems.org/ | ||
specs: | ||
actioncable (5.1.6) | ||
actionpack (= 5.1.6) | ||
nio4r (~> 2.0) | ||
websocket-driver (~> 0.6.1) | ||
actionmailer (5.1.6) | ||
actionpack (= 5.1.6) | ||
actionview (= 5.1.6) | ||
activejob (= 5.1.6) | ||
mail (~> 2.5, >= 2.5.4) | ||
rails-dom-testing (~> 2.0) | ||
actionpack (5.1.6) | ||
actionview (= 5.1.6) | ||
activesupport (= 5.1.6) | ||
rack (~> 2.0) | ||
rack-test (>= 0.6.3) | ||
rails-dom-testing (~> 2.0) | ||
rails-html-sanitizer (~> 1.0, >= 1.0.2) | ||
actionview (5.1.6) | ||
activesupport (= 5.1.6) | ||
builder (~> 3.1) | ||
erubi (~> 1.4) | ||
rails-dom-testing (~> 2.0) | ||
rails-html-sanitizer (~> 1.0, >= 1.0.3) | ||
activejob (5.1.6) | ||
activesupport (= 5.1.6) | ||
globalid (>= 0.3.6) | ||
activemodel (5.1.6) | ||
activesupport (= 5.1.6) | ||
activerecord (5.1.6) | ||
activemodel (= 5.1.6) | ||
activesupport (= 5.1.6) | ||
arel (~> 8.0) | ||
activesupport (5.1.6) | ||
concurrent-ruby (~> 1.0, >= 1.0.2) | ||
i18n (>= 0.7, < 2) | ||
minitest (~> 5.1) | ||
tzinfo (~> 1.1) | ||
ansi (1.5.0) | ||
arel (8.0.0) | ||
builder (3.2.3) | ||
byebug (10.0.2) | ||
coderay (1.1.2) | ||
concurrent-ruby (1.0.5) | ||
crass (1.0.4) | ||
erubi (1.7.1) | ||
ffi (1.9.23) | ||
globalid (0.4.1) | ||
activesupport (>= 4.2.0) | ||
i18n (1.0.1) | ||
concurrent-ruby (~> 1.0) | ||
listen (3.1.5) | ||
rb-fsevent (~> 0.9, >= 0.9.4) | ||
rb-inotify (~> 0.9, >= 0.9.7) | ||
ruby_dep (~> 1.2) | ||
loofah (2.2.2) | ||
crass (~> 1.0.2) | ||
nokogiri (>= 1.5.9) | ||
mail (2.7.0) | ||
mini_mime (>= 0.1.1) | ||
method_source (0.9.0) | ||
mini_mime (1.0.0) | ||
mini_portile2 (2.3.0) | ||
minitest (5.11.3) | ||
minitest-rails (3.0.0) | ||
minitest (~> 5.8) | ||
railties (~> 5.0) | ||
minitest-reporters (1.2.0) | ||
ansi | ||
builder | ||
minitest (>= 5.0) | ||
ruby-progressbar | ||
nio4r (2.3.1) | ||
nokogiri (1.8.2) | ||
mini_portile2 (~> 2.3.0) | ||
pg (1.0.0) | ||
pry (0.11.3) | ||
coderay (~> 1.1.0) | ||
method_source (~> 0.9.0) | ||
pry-rails (0.3.6) | ||
pry (>= 0.10.4) | ||
puma (3.11.4) | ||
rack (2.0.5) | ||
rack-test (1.0.0) | ||
rack (>= 1.0, < 3) | ||
rails (5.1.6) | ||
actioncable (= 5.1.6) | ||
actionmailer (= 5.1.6) | ||
actionpack (= 5.1.6) | ||
actionview (= 5.1.6) | ||
activejob (= 5.1.6) | ||
activemodel (= 5.1.6) | ||
activerecord (= 5.1.6) | ||
activesupport (= 5.1.6) | ||
bundler (>= 1.3.0) | ||
railties (= 5.1.6) | ||
sprockets-rails (>= 2.0.0) | ||
rails-dom-testing (2.0.3) | ||
activesupport (>= 4.2.0) | ||
nokogiri (>= 1.6) | ||
rails-html-sanitizer (1.0.4) | ||
loofah (~> 2.2, >= 2.2.2) | ||
railties (5.1.6) | ||
actionpack (= 5.1.6) | ||
activesupport (= 5.1.6) | ||
method_source | ||
rake (>= 0.8.7) | ||
thor (>= 0.18.1, < 2.0) | ||
rake (12.3.1) | ||
rb-fsevent (0.10.3) | ||
rb-inotify (0.9.10) | ||
ffi (>= 0.5.0, < 2) | ||
ruby-progressbar (1.9.0) | ||
ruby_dep (1.5.0) | ||
spring (2.0.2) | ||
activesupport (>= 4.2) | ||
spring-watcher-listen (2.0.1) | ||
listen (>= 2.7, < 4.0) | ||
spring (>= 1.2, < 3.0) | ||
sprockets (3.7.1) | ||
concurrent-ruby (~> 1.0) | ||
rack (> 1, < 3) | ||
sprockets-rails (3.2.1) | ||
actionpack (>= 4.0) | ||
activesupport (>= 4.0) | ||
sprockets (>= 3.0.0) | ||
thor (0.20.0) | ||
thread_safe (0.3.6) | ||
tzinfo (1.2.5) | ||
thread_safe (~> 0.1) | ||
websocket-driver (0.6.5) | ||
websocket-extensions (>= 0.1.0) | ||
websocket-extensions (0.1.3) | ||
|
||
PLATFORMS | ||
ruby | ||
|
||
DEPENDENCIES | ||
byebug | ||
listen (>= 3.0.5, < 3.2) | ||
minitest-rails | ||
minitest-reporters | ||
pg (>= 0.18, < 2.0) | ||
pry-rails | ||
puma (~> 3.7) | ||
rails (~> 5.1.6) | ||
spring | ||
spring-watcher-listen (~> 2.0.0) | ||
tzinfo-data | ||
|
||
BUNDLED WITH | ||
1.16.1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# Add your own tasks in files placed in lib/tasks ending in .rake, | ||
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. | ||
|
||
require_relative 'config/application' | ||
|
||
Rails.application.load_tasks |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
module ApplicationCable | ||
class Channel < ActionCable::Channel::Base | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
module ApplicationCable | ||
class Connection < ActionCable::Connection::Base | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
class ApplicationController < ActionController::API | ||
end |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
class CustomersController < ApplicationController | ||
|
||
def index | ||
customers = Customer.all | ||
render json: customers.as_json(except: [:created_at, :updated_at], status: :ok) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
class MoviesController < ApplicationController | ||
def index | ||
movies = Movie.all | ||
render json: movies.as_json(except: [:created_at, :updated_at], status: :ok) | ||
end | ||
|
||
def show | ||
movie = Movie.find_by(id: params[:id]) | ||
if movie | ||
render json: movie.as_json(except: [:created_at, :updated_at], status: :ok) | ||
else | ||
render json: { | ||
errors: { | ||
id: ["No movie with ID #{params[:id]}"] | ||
} | ||
}, status: :not_found | ||
end | ||
end | ||
|
||
def create | ||
movie = Movie.new(movie_params) | ||
movie.available_inventory = movie.inventory | ||
if movie.save | ||
render json: movie.as_json(except: [:created_at, :updated_at], status: :ok) | ||
else | ||
render json: { | ||
errors: movie.errors.messages | ||
}, status: :bad_request | ||
end | ||
end | ||
|
||
|
||
private | ||
def movie_params | ||
params.permit(:title, :inventory, :release_date, :overview) | ||
end | ||
|
||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
class RentalsController < ApplicationController | ||
def check_out | ||
rental = Rental.new(rental_params) | ||
rental.due_date = Date.today + 7 | ||
|
||
if rental.save | ||
rental = Rental.update_movie_and_customer(rental) | ||
render json: rental.as_json(except: [:updated_at], status: :ok) | ||
else | ||
render json: { errors: rental.errors.messages}, status: :bad_request | ||
end | ||
end | ||
|
||
def check_in | ||
rental = Rental.find_checked_out_movie(params[:movie_id], params[:customer_id]) | ||
if rental | ||
rental.update(check_in_date: Date.today) | ||
rental = Rental.update_movie_and_customer(rental) | ||
render json: rental.as_json(except: [:updated_at], status: :ok) | ||
else | ||
render json: { | ||
errors: { | ||
rental: ["No rental found"] | ||
} | ||
}, status: :not_found | ||
end | ||
|
||
end | ||
|
||
|
||
|
||
private | ||
|
||
def rental_params | ||
params.permit(:movie_id, :customer_id) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
class ApplicationJob < ActiveJob::Base | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
class ApplicationMailer < ActionMailer::Base | ||
default from: 'from@example.com' | ||
layout 'mailer' | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
class ApplicationRecord < ActiveRecord::Base | ||
self.abstract_class = true | ||
end |
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
class Customer < ApplicationRecord | ||
validates :name, presence: true | ||
validates :phone, presence: true | ||
validate :same_name_and_same_phone, on: :create | ||
|
||
has_many :rentals | ||
|
||
def same_name_and_same_phone | ||
customers = Customer.where(name: name) | ||
|
||
if customers.any? {|customer| customer.phone == phone} | ||
errors[:phone] << "Can not have the same name and same phone number" | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
class Movie < ApplicationRecord | ||
validates :title, presence: true | ||
validates :inventory, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 0 }, on: :create | ||
|
||
validate :uniq_title_release_date_combo, on: :create | ||
|
||
has_many :rentals | ||
|
||
def uniq_title_release_date_combo | ||
movies = Movie.where(title: title) | ||
|
||
if movies.any?{ |movie| movie.release_date == release_date } | ||
errors[:release_date] << 'Cannot have a movie with the same title and release date' | ||
end | ||
end | ||
end |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rails supports this natively: