Skip to content
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

Amy & Christiane -- Carets #20

Open
wants to merge 45 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
fe5cf19
setup new rails API project and initial routes for Movies, Customers,…
ayjlee Nov 6, 2017
66d25df
created Movie Model
ayjlee Nov 6, 2017
f868fdb
Added Customer model and relationships, updated the schema
ayjlee Nov 6, 2017
e06981c
Created Rental Model with relationships and foreign keys
ayjlee Nov 6, 2017
d7e9806
Adds a account_credit column to customer. Seeds the database
Nov 6, 2017
d5b37be
Creates Movies controller with index, show, create and check actions
Nov 6, 2017
c2795e7
Test the json response
Nov 6, 2017
43e6f54
Creates Customers controller with index action
Nov 6, 2017
281d19b
Customer index controller passes all tests
Nov 6, 2017
fff6070
seeded data and ran migrations from git pull
ayjlee Nov 6, 2017
2834cf8
ran migration to add account_credit to customers
ayjlee Nov 6, 2017
ac8bc5f
tested and wrote Movie#show method
ayjlee Nov 6, 2017
fa464fa
Created Movie#create method, passing basic positive test of can creat…
ayjlee Nov 6, 2017
e189b14
tested Movie validations, refactored Movie controller methods to acco…
ayjlee Nov 6, 2017
89436e4
Removes require(:movie) from the Movies controller strong params. Cha…
Nov 7, 2017
43d8e5d
Returns the movie id in the json response when a new movie is success…
Nov 7, 2017
5c42cb7
Customers controller index passes all tests
Nov 7, 2017
dcefa3b
starts validating title uniqueness within same year scope. Not finished
Nov 7, 2017
e94e39a
removes comment in Movies controller
Nov 7, 2017
6f0a696
comments out the uniq title validation for the movie model
Nov 7, 2017
8db92f7
added gem active_model_serializers
ayjlee Nov 7, 2017
4adaa97
deleted DS_store to solve merge conflict
ayjlee Nov 7, 2017
0a20af6
Merge pull request #1 from ayjlee/serializer
ayjlee Nov 7, 2017
50f3bd2
added serializer for Movies controller, updated controller methods
ayjlee Nov 7, 2017
245c482
comments out the test for movie uniqueness by release date year
ayjlee Nov 7, 2017
81c5504
adds serializer for Customers controller, updated Controller methods …
ayjlee Nov 7, 2017
7f192a2
added placeholder serializer for rentals
ayjlee Nov 7, 2017
3e4c536
added routes and placeholder methods for Rental controller
ayjlee Nov 7, 2017
b26709a
Merge branch 'serializer'
ayjlee Nov 7, 2017
18326bd
added movies_checked_out field to Customer with default value of 0
ayjlee Nov 7, 2017
f5e6eea
added available_inventory column to Movie table
ayjlee Nov 7, 2017
b12dc08
added default values to available inventory for movies
ayjlee Nov 7, 2017
5ca00c8
Adds a movies_checked_out field to the Customer Serializer
Nov 7, 2017
270bcde
fixes movies and customers controller test to take new serializer att…
Nov 7, 2017
fc81591
Added default values for customers movies_checked_out, implemented re…
Nov 8, 2017
0bd6cdb
added belongs to relationship for Rental
ayjlee Nov 8, 2017
6680806
added logic to find a Rental given a customer id and movie id
ayjlee Nov 8, 2017
a1ec535
working Rental#check-in method, needs refactoring. Passes smoke test
ayjlee Nov 8, 2017
05d6eb1
Implements Rentals Check_out
Nov 8, 2017
432d046
moved overdue method to Customers controller, updated corresponding r…
ayjlee Nov 8, 2017
a699d20
updated serializer to include customer id
ayjlee Nov 8, 2017
58bbd62
created Customer#overdue method, passing smoke tests
ayjlee Nov 8, 2017
bea4f0b
Merge branch 'overdue'
ayjlee Nov 8, 2017
501fde7
Created customers route
Nov 8, 2017
e3f5edf
Started implementing customer#query method
Nov 9, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# 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

.DS_Store
55 changes: 55 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
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

gem 'active_model_serializers'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.1.4'
# Use postgresql as the database for Active Record
gem 'pg', '~> 0.18'
# 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', '~> 3.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]

gem 'jquery-turbolinks'
gem 'foundation-rails', '6.4.1.2'
group :development do
gem 'better_errors'
gem 'pry-rails'
gem 'binding_of_caller'
end

group :test do
gem 'minitest-rails'
gem 'minitest-reporters'
end
194 changes: 194 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (5.1.4)
actionpack (= 5.1.4)
nio4r (~> 2.0)
websocket-driver (~> 0.6.1)
actionmailer (5.1.4)
actionpack (= 5.1.4)
actionview (= 5.1.4)
activejob (= 5.1.4)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (5.1.4)
actionview (= 5.1.4)
activesupport (= 5.1.4)
rack (~> 2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
actionview (5.1.4)
activesupport (= 5.1.4)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.0.3)
active_model_serializers (0.10.6)
actionpack (>= 4.1, < 6)
activemodel (>= 4.1, < 6)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.2)
activejob (5.1.4)
activesupport (= 5.1.4)
globalid (>= 0.3.6)
activemodel (5.1.4)
activesupport (= 5.1.4)
activerecord (5.1.4)
activemodel (= 5.1.4)
activesupport (= 5.1.4)
arel (~> 8.0)
activesupport (5.1.4)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (~> 0.7)
minitest (~> 5.1)
tzinfo (~> 1.1)
ansi (1.5.0)
arel (8.0.0)
babel-source (5.8.35)
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
better_errors (2.4.0)
coderay (>= 1.0.0)
erubi (>= 1.0.0)
rack (>= 0.9.0)
binding_of_caller (0.7.3)
debug_inspector (>= 0.0.1)
builder (3.2.3)
byebug (9.1.0)
case_transform (0.2)
activesupport
coderay (1.1.2)
concurrent-ruby (1.0.5)
crass (1.0.2)
debug_inspector (0.0.3)
erubi (1.7.0)
execjs (2.7.0)
ffi (1.9.18)
foundation-rails (6.4.1.2)
railties (>= 3.1.0)
sass (>= 3.3.0, < 3.5)
sprockets-es6 (>= 0.9.0)
globalid (0.4.1)
activesupport (>= 4.2.0)
i18n (0.9.1)
concurrent-ruby (~> 1.0)
jquery-turbolinks (2.1.0)
railties (>= 3.1.0)
turbolinks
jsonapi-renderer (0.1.3)
listen (3.1.5)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
ruby_dep (~> 1.2)
loofah (2.1.1)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.0)
mini_mime (>= 0.1.1)
method_source (0.9.0)
mini_mime (0.1.4)
mini_portile2 (2.3.0)
minitest (5.10.3)
minitest-rails (3.0.0)
minitest (~> 5.8)
railties (~> 5.0)
minitest-reporters (1.1.18)
ansi
builder
minitest (>= 5.0)
ruby-progressbar
nio4r (2.1.0)
nokogiri (1.8.1)
mini_portile2 (~> 2.3.0)
pg (0.21.0)
pry (0.11.2)
coderay (~> 1.1.0)
method_source (~> 0.9.0)
pry-rails (0.3.6)
pry (>= 0.10.4)
puma (3.10.0)
rack (2.0.3)
rack-test (0.7.0)
rack (>= 1.0, < 3)
rails (5.1.4)
actioncable (= 5.1.4)
actionmailer (= 5.1.4)
actionpack (= 5.1.4)
actionview (= 5.1.4)
activejob (= 5.1.4)
activemodel (= 5.1.4)
activerecord (= 5.1.4)
activesupport (= 5.1.4)
bundler (>= 1.3.0)
railties (= 5.1.4)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.0.3)
loofah (~> 2.0)
railties (5.1.4)
actionpack (= 5.1.4)
activesupport (= 5.1.4)
method_source
rake (>= 0.8.7)
thor (>= 0.18.1, < 2.0)
rake (12.2.1)
rb-fsevent (0.10.2)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
ruby-progressbar (1.9.0)
ruby_dep (1.5.0)
sass (3.4.25)
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-es6 (0.9.2)
babel-source (>= 5.8.11)
babel-transpiler
sprockets (>= 3.0.0)
sprockets-rails (3.2.1)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (0.20.0)
thread_safe (0.3.6)
turbolinks (5.0.1)
turbolinks-source (~> 5)
turbolinks-source (5.0.3)
tzinfo (1.2.4)
thread_safe (~> 0.1)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.2)

PLATFORMS
ruby

DEPENDENCIES
active_model_serializers
better_errors
binding_of_caller
byebug
foundation-rails (= 6.4.1.2)
jquery-turbolinks
listen (>= 3.0.5, < 3.2)
minitest-rails
minitest-reporters
pg (~> 0.18)
pry-rails
puma (~> 3.7)
rails (~> 5.1.4)
spring
spring-watcher-listen (~> 2.0.0)
tzinfo-data

BUNDLED WITH
1.15.3
6 changes: 6 additions & 0 deletions Rakefile
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
4 changes: 4 additions & 0 deletions app/channels/application_cable/channel.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module ApplicationCable
class Channel < ActionCable::Channel::Base
end
end
4 changes: 4 additions & 0 deletions app/channels/application_cable/connection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module ApplicationCable
class Connection < ActionCable::Connection::Base
end
end
24 changes: 24 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
class ApplicationController < ActionController::API

def build_overdue_array(rentals_array)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this here? This looks like it should be in the model!

Come to think of it it looks like it is!

overdues = []

rentals_array.each do |rental|
rental_info = {}
movie = Movie.find_by(id: rental.movie_id)
rental_info[:title] = movie.title
rental_info[:checkout_date] = pretty_date(rental.created_at.to_s)
rental_info[:due_date] = rental.due_date

overdues << rental_info
end

return overdues
end

def pretty_date(date)
d = Date.parse(date)
return d.strftime('%a %d %b %Y')
end

end
Empty file added app/controllers/concerns/.keep
Empty file.
59 changes: 59 additions & 0 deletions app/controllers/customers_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
class CustomersController < ApplicationController
def index
customers = Customer.all

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your customers don't have a count of the movies checked out!

render json: customers, status: :ok
end

def overdue
# overdue_rentals = Rental.where("movie_id = ? AND customer_id = ?", movie.id, customer.id)
# theoretical: has_overdue?
customers_with_overdue= Customer.all.select {|customer| customer.has_overdue?}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While this will work, it's usually better to let the database do a lot of the work, with some sort of where clause, probably in a class method of Customer which selects movies which are overdue.

The database is almost always faster about this.


if customers_with_overdue.empty?
return render json: { ok: true, message: "No customers with overdue items" }, status: :ok
end

overdue_customers_array = []

customers_with_overdue.each do |customer|

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should really be in the model

#helper method: Customer# find_overdue_rentals, which returns an array of overdues
# build the hash
overdue_customer_hash = {}

overdue_customer_hash[:customer_id] = customer.id
overdue_customer_hash[:customer_name] = customer.name
overdue_customer_hash[:postal_code] = customer.postal_code

overdue_rentals = customer.find_overdue_rentals

overdue_customer_hash[:overdue_rentals] = build_overdue_array(overdue_rentals)

overdue_customers_array << overdue_customer_hash
end

render json: overdue_customers_array.as_json, status: :ok

end

def query(sort: params[:sort], n: params[:n], p: params[:p])
# sort: params[:sort], n: params[:n], p: params[:p]


# if sort = not recognise
# return error
# end

case sort
when nil
# Customer.all
when "name"
# Customer.sort_by(:name)
when "registered_at"
# Customer.sort_by(:registered_at)
when "postal_code"
# Customer.sort_by(:postal_code)
end


end
end
Loading