Skip to content

Commit

Permalink
Add files API
Browse files Browse the repository at this point in the history
  • Loading branch information
KMosc committed May 21, 2021
1 parent 3799a07 commit 80124ce
Show file tree
Hide file tree
Showing 77 changed files with 1,440 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# See https://git-scm.com/docs/gitattributes for more about git attribute files.

# Mark the database schema as having been generated.
db/schema.rb linguist-generated


# Mark any vendored files as having been vendored.
vendor/* linguist-vendored
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# 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

# Ignore pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/
!/tmp/pids/.keep

# Ignore uploaded files in development.
/storage/*
!/storage/.keep
.byebug_history

# Ignore master key for decrypting credentials and more.
/config/master.key
1 change: 1 addition & 0 deletions .ruby-version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ruby-3.0.1
42 changes: 42 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '3.0.1'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 6.1.3', '>= 6.1.3.2'
# Use postgresql as the database for Active Record
gem 'pg', '~> 1.1'
# Use Puma as the app server
gem 'puma', '~> 5.0'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
# gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'
gem 'bcrypt', '~> 3.1.7'

# Use Active Storage variant
# gem 'image_processing', '~> 1.2'

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.4', require: false
gem 'jwt'

# 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.3'
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
165 changes: 165 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
GEM
remote: https://rubygems.org/
specs:
actioncable (6.1.3.2)
actionpack (= 6.1.3.2)
activesupport (= 6.1.3.2)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (6.1.3.2)
actionpack (= 6.1.3.2)
activejob (= 6.1.3.2)
activerecord (= 6.1.3.2)
activestorage (= 6.1.3.2)
activesupport (= 6.1.3.2)
mail (>= 2.7.1)
actionmailer (6.1.3.2)
actionpack (= 6.1.3.2)
actionview (= 6.1.3.2)
activejob (= 6.1.3.2)
activesupport (= 6.1.3.2)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (6.1.3.2)
actionview (= 6.1.3.2)
activesupport (= 6.1.3.2)
rack (~> 2.0, >= 2.0.9)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (6.1.3.2)
actionpack (= 6.1.3.2)
activerecord (= 6.1.3.2)
activestorage (= 6.1.3.2)
activesupport (= 6.1.3.2)
nokogiri (>= 1.8.5)
actionview (6.1.3.2)
activesupport (= 6.1.3.2)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
activejob (6.1.3.2)
activesupport (= 6.1.3.2)
globalid (>= 0.3.6)
activemodel (6.1.3.2)
activesupport (= 6.1.3.2)
activerecord (6.1.3.2)
activemodel (= 6.1.3.2)
activesupport (= 6.1.3.2)
activestorage (6.1.3.2)
actionpack (= 6.1.3.2)
activejob (= 6.1.3.2)
activerecord (= 6.1.3.2)
activesupport (= 6.1.3.2)
marcel (~> 1.0.0)
mini_mime (~> 1.0.2)
activesupport (6.1.3.2)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
bcrypt (3.1.16)
bootsnap (1.7.5)
msgpack (~> 1.0)
builder (3.2.4)
byebug (11.1.3)
concurrent-ruby (1.1.8)
crass (1.0.6)
erubi (1.10.0)
ffi (1.15.0)
globalid (0.4.2)
activesupport (>= 4.2.0)
i18n (1.8.10)
concurrent-ruby (~> 1.0)
jwt (2.2.3)
listen (3.5.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.9.1)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (1.0.1)
method_source (1.0.0)
mini_mime (1.0.3)
minitest (5.14.4)
msgpack (1.4.2)
nio4r (2.5.7)
nokogiri (1.11.5-x86_64-linux)
racc (~> 1.4)
pg (1.2.3)
puma (5.3.1)
nio4r (~> 2.0)
racc (1.5.2)
rack (2.2.3)
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (6.1.3.2)
actioncable (= 6.1.3.2)
actionmailbox (= 6.1.3.2)
actionmailer (= 6.1.3.2)
actionpack (= 6.1.3.2)
actiontext (= 6.1.3.2)
actionview (= 6.1.3.2)
activejob (= 6.1.3.2)
activemodel (= 6.1.3.2)
activerecord (= 6.1.3.2)
activestorage (= 6.1.3.2)
activesupport (= 6.1.3.2)
bundler (>= 1.15.0)
railties (= 6.1.3.2)
sprockets-rails (>= 2.0.0)
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0)
loofah (~> 2.3)
railties (6.1.3.2)
actionpack (= 6.1.3.2)
activesupport (= 6.1.3.2)
method_source
rake (>= 0.8.7)
thor (~> 1.0)
rake (13.0.3)
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
ffi (~> 1.0)
spring (2.1.1)
sprockets (4.0.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-rails (3.2.2)
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
thor (1.1.0)
tzinfo (2.0.4)
concurrent-ruby (~> 1.0)
websocket-driver (0.7.3)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
zeitwerk (2.4.2)

PLATFORMS
x86_64-linux

DEPENDENCIES
bcrypt (~> 3.1.7)
bootsnap (>= 1.4.4)
byebug
jwt
listen (~> 3.3)
pg (~> 1.1)
puma (~> 5.0)
rails (~> 6.1.3, >= 6.1.3.2)
spring
tzinfo-data

RUBY VERSION
ruby 3.0.1p64

BUNDLED WITH
2.2.17
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
2 changes: 2 additions & 0 deletions app/controllers/application_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
class ApplicationController < ActionController::API
end
51 changes: 51 additions & 0 deletions app/controllers/cinema_halls_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
class CinemaHallsController < ApplicationController
before_action :set_cinema_hall, only: [:show, :update, :destroy]

# GET /cinema_halls
def index
@cinema_halls = CinemaHall.all

render json: @cinema_halls
end

# GET /cinema_halls/1
def show
render json: @cinema_hall
end

# POST /cinema_halls
def create
@cinema_hall = CinemaHall.new(cinema_hall_params)

if @cinema_hall.save
render json: @cinema_hall, status: :created, location: @cinema_hall
else
render json: @cinema_hall.errors, status: :unprocessable_entity
end
end

# PATCH/PUT /cinema_halls/1
def update
if @cinema_hall.update(cinema_hall_params)
render json: @cinema_hall
else
render json: @cinema_hall.errors, status: :unprocessable_entity
end
end

# DELETE /cinema_halls/1
def destroy
@cinema_hall.destroy
end

private
# Use callbacks to share common setup or constraints between actions.
def set_cinema_hall
@cinema_hall = CinemaHall.find(params[:id])
end

# Only allow a list of trusted parameters through.
def cinema_hall_params
params.require(:cinema_hall).permit(:volume)
end
end
Empty file added app/controllers/concerns/.keep
Empty file.
43 changes: 43 additions & 0 deletions app/controllers/ticket_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
class TicketController < ApplicationController
before_action :set_ticket, only: [:show]

def index
@ticket = Ticket.all

render json: @ticket
end
def show
render json: @ticket
end
def buy
@ticket = Ticket.new(ticket_params)
@ticket.paid = false

if @ticket.save
render json: @ticket, status: :created, location: @ticket
else
render json: @ticket.errors, status: :unprocessable_entity
end
end

def reservation
@ticket = Ticket.new(ticket_params)
@ticket.paid = false


if @ticket.save
render json: @ticket, status: :created, location: @ticket
else
render json: @ticket.errors, status: :unprocessable_entity
end
end

private

def set_ticket
@ticket = Ticket.find(params[:id])
end
def ticket_params
params.require(:ticket).permit(:ticket_desk_id, :cinema_hall_id, :paid)

This comment has been minimized.

Copy link
@jandudulski

jandudulski May 22, 2021

Are you sure about paid? It seems you don't use such param.

This comment has been minimized.

Copy link
@GoodSingularity

GoodSingularity May 23, 2021

Are you sure about paid? It seems you don't use such param.

At least not right now. This params purpose is for #reservation and buy method.

If you have reservation and you use buy method next, paid boolean is gonna change to true in tickets that have boolean false. If you use buy method, new one is created.

This comment has been minimized.

Copy link
@jandudulski

jandudulski May 23, 2021

Ok, but do you need to send paid param in the request? I think buy method will be "paid" anyway, so there is no need to send such param.

This comment has been minimized.

Copy link
@KMosc

KMosc May 23, 2021

Author Owner

Well, It's gonna look like this.
https://apidock.com/rails/ActiveRecord/Batches/ClassMethods/find_each
Ticket.find_each(:paid=> false) do |ticket|
if ticket.owner == @user.id
ticket.paid = true
ticket.save!
end
end
Well If you make reservation, It accepts every each of them, so unpaid tickets, become paid.
Extra feature: I think about creating method to cancel reservation, so There could not be such situation that someone has unwanted ticket. That's why I'm gonna fixup Ticket model, so it points to movie and user.

Right now user model is not needed, I focus on side of app that handle user actions, from the bottom to up and when everything works fine, I'm gonna fixup all methods, to improve code readibility.

end
end

This comment has been minimized.

Copy link
@jandudulski

jandudulski May 22, 2021

Formatting get messy in this file :)

Loading

0 comments on commit 80124ce

Please sign in to comment.