-
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
Emilce and Maja Octos #23
base: master
Are you sure you want to change the base?
Changes from all commits
82965e1
6306ce5
5b762eb
6d16a91
1ed3fb4
071d0d0
a6515f7
8bc020e
cd24961
58351c3
94e9536
b74a235
4cf5015
926b8e0
4a0a9fb
9bf9604
9e55760
838ae1e
8450dcf
f2917d8
7cf2c9f
35ef903
f50a5a6
b4f71a3
4bfeda0
dcaf466
a8cd9f9
33f8417
d3a7b1f
a6d4d48
5ad83c7
153a7b8
6238c49
bb8bcd3
acdc1c6
18ef11e
c4e1eb1
f54ecea
31628a9
1a75be5
3a0431f
a36093a
bdf7074
eefff5d
72905f3
f73735f
f2e3424
2bf3d92
e5c7119
8481ed0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
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 |
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 |
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 |
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 |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
module ApplicationCable | ||
class Channel < ActionCable::Channel::Base | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
module ApplicationCable | ||
class Connection < ActionCable::Connection::Base | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
class ApplicationController < ActionController::API | ||
|
||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
class CustomersController < ApplicationController | ||
|
||
def index | ||
customers = Customer.all | ||
|
||
render json: customers.as_json(only: [:id, :name, :registered_at, :address, :city, :state, :postal_code, :phone, :movies_checked_out_count]), status: :ok | ||
end | ||
|
||
def show | ||
customer = Customer.find_by(id: params[:id]) | ||
|
||
if customer.nil? | ||
render json: {errors: {id: ["No customer like that found, #{params[:id]}"]}}, status: :not_found | ||
else | ||
render json: customer.as_json(only: [:name, :registered_at, :address, :city, :state, :postal_code, :phone]), status: :ok | ||
end | ||
end | ||
|
||
def create | ||
customer = Customer.new(customer_params) | ||
|
||
if customer.save | ||
#do something | ||
render json: { id: customer.id}, status: :created | ||
else | ||
render json: { errors: customer.errors.messages }, status: :bad_request | ||
end | ||
end | ||
|
||
private | ||
def customer_params | ||
params.require(:customer).permit(:name, :registered_at, :address, :city, :state, :postal_code, :phone) | ||
end | ||
|
||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
class MoviesController < ApplicationController | ||
|
||
def index | ||
movies = Movie.all | ||
|
||
render json: movies.as_json(only: [:id, :inventory, :title, :overview, :release_date, :available_inventory]), status: :ok | ||
end | ||
|
||
def show | ||
# binding.pry | ||
movie = Movie.find_by(id: params[:id]) | ||
|
||
if movie.nil? | ||
render json: { | ||
errors: { | ||
id: ["No movie like that found, #{params[:id]}"] | ||
} | ||
}, status: :not_found | ||
else | ||
render json: movie.as_json(only: [:overview, :release_date, :title, :inventory], methods: [:available_inventory]), status: :ok | ||
# won't work unless rabl | ||
# render 'movies/show' | ||
end | ||
end | ||
|
||
def create | ||
movie = Movie.new(movie_params) | ||
|
||
if movie.save | ||
render json: { id: movie.id}, status: :ok | ||
else | ||
render json: { errors: movie.errors.messages }, status: :bad_request | ||
end | ||
end | ||
|
||
private | ||
def movie_params | ||
params.permit(:title, :overview, :release_date, :inventory) | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
require 'pry' | ||
|
||
class RentalsController < ApplicationController | ||
def checkout | ||
# take in query params | ||
movie_id = params[:movie_id] | ||
customer_id = params[:customer_id] | ||
|
||
# find customer and movie by id's | ||
movie = Movie.find_by(id: movie_id) | ||
customer = Customer.find_by(id: customer_id) | ||
|
||
checkout_date = Date.today | ||
due_date = checkout_date + 7 | ||
|
||
# initialize a rental | ||
rental = Rental.new(customer_id: customer_id, movie_id: movie_id, checkout_date: checkout_date, due_date: due_date) | ||
|
||
if movie && customer | ||
|
||
# save rental if valid, otherwise send errors | ||
if rental.save | ||
|
||
# increase the customer's checked-out movie number | ||
customer.movies_checked_out_count += 1 | ||
customer.save | ||
|
||
# if the rental custom validations pass, set rental attributes | ||
# and return rental id and status | ||
render json: { id: rental.id }, status: :ok | ||
else | ||
# if the rental's custom validations fail, render errors | ||
# errors come from custom rental validation method (see rental.rb) | ||
render json: { errors: rental.errors.messages }, status: :bad_request | ||
end | ||
else | ||
render json: {errors: { id: ["Must enter a valid movie and customer"]}}, status: :bad_request | ||
end | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here you should probably specify which field is bad. |
||
end | ||
|
||
def checkin | ||
movie_id = params[:movie_id].to_i | ||
customer_id = params[:customer_id].to_i | ||
|
||
# rental = Rental.where(movie_id: movie_id, customer_id: customer_id).where.not(due_date: nil).first | ||
|
||
rental = Rental.where.not(due_date: nil).where(movie_id: movie_id, customer_id: customer_id).order(checkout_date: :desc).first | ||
# rental = Rental.where(movie_id: movie_id, customer_id: customer_id).order(checkout_date: :desc).where.not(due_date: nil) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a really complex database query! Could you encapsulate it as a self method on |
||
|
||
if rental && rental.due_date != nil | ||
|
||
rental.due_date = nil | ||
|
||
unless rental.save | ||
render json: { errors: rental.errors.messages }, status: :bad_request | ||
return | ||
end | ||
|
||
rental.customer.movies_checked_out_count -= 1 | ||
rental.customer.save | ||
|
||
render json: rental.as_json(only: [:id, :checkout_date, :due_date]), status: :ok | ||
else | ||
render json: { errors: { rental: ["not found"]}}, status: :not_found | ||
end | ||
end | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
class ApplicationJob < ActiveJob::Base | ||
end |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
class ApplicationMailer < ActionMailer::Base | ||
default from: '[email protected]' | ||
layout 'mailer' | ||
end |
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.
You do a lot of work in this function: calculating dates, creating a
Rental
, increasing the movie count. It would be good to encapsulate all that in one model method.