librarix/lib/librarix/application.rb

146 lines
3.1 KiB
Ruby
Raw Normal View History

2015-10-30 12:59:58 +01:00
require 'librarix/filter'
2015-10-30 12:56:44 +01:00
require 'librarix/menu'
require 'librarix/the_movie_db'
2015-11-12 12:33:22 +01:00
require 'librarix/helpers'
require 'sinatra/base'
require 'sinatra/content_for'
require 'sinatra/json'
2019-06-13 12:43:58 +02:00
require 'sinatra/namespace'
require 'yaml'
require 'slim'
require 'themoviedb'
module Librarix
class Application < Sinatra::Application
2015-10-30 12:56:44 +01:00
def initialize(app = nil)
super
Librarix::Menu.menu.add 'Home', '/'
Librarix::Menu.menu.add 'Add a movie', '/search'
end
helpers Librarix::TheMovieDB
2015-10-30 12:56:44 +01:00
helpers Librarix::Menu::Helper
2015-11-12 12:33:22 +01:00
helpers Librarix::Helpers
2019-06-13 12:43:58 +02:00
namespace '/api/v1' do
helpers do
def base_url
@base_url ||= "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
end
def json_params
begin
JSON.parse(request.body.read)
rescue
halt 400, { message:'Invalid JSON' }.to_json
end
end
end
before do
content_type 'application/json'
end
get '/movies' do
Librarix::Filter.new(params).movies.to_json
end
post '/movies' do
id = json_params['tmdb_id'].to_i
movie = Tmdb::Movie.detail(id)
if movie['status_code'] != 34 && !Librarix::Redis::Movie.new(id).added?
Librarix::Redis::Movie.new(id).add.to_json
end
end
get '/movies/:id' do |id|
Librarix::Redis::Movie.new(id).fetch.to_json
end
get '/movies/:id/fetch' do |id|
Librarix::Redis::Movie.new(id).update
end
patch '/movies/:id/view' do |id|
Librarix::Redis::Movie.new(params[:id]).view
end
delete '/movies/:id' do |id|
Librarix::Redis::Movie.new(params[:id]).remove
end
end
get '/' do
2015-11-13 12:54:45 +01:00
slim :index, locals: {filter: Librarix::Filter.new(params)}
end
2015-11-12 12:40:16 +01:00
get '/movie/:id' do |id|
movie = Librarix::Redis::Movie.new(id).fetch
2015-11-19 12:48:37 +01:00
if request.xhr?
slim :'partials/movie', layout: false, locals: {movie: movie}
else
slim :movie, locals: {movie: movie}
end
2015-11-12 12:40:16 +01:00
end
get '/search' do
movies = if params['search'].nil?
Tmdb::Movie.popular.map { |m| Tmdb::Movie.new(m) }
elsif params['search'] == ''
[]
else
Tmdb::Movie.find(params['search'])
end
2015-11-18 16:18:59 +01:00
slim :search, locals: {movies: movies}
end
post '/add' do
id = params[:id].to_i
movie = Tmdb::Movie.detail(id)
if movie['status_code'] == 34
elsif Librarix::Redis::Movie.new(id).added?
else
Librarix::Redis::Movie.new(id).add
end
redirect to('/')
end
post '/update' do
movie = Librarix::Redis::Movie.new(params[:id]).update
if request.xhr?
slim :'partials/movie', layout: false, locals: {movie: movie}
else
redirect to('/')
end
end
post '/remove' do
Librarix::Redis::Movie.new(params[:id]).remove
if request.xhr?
""
else
redirect to('/')
end
end
2015-10-30 12:48:47 +01:00
post '/view' do
Librarix::Redis::Movie.new(params[:id]).view
if request.xhr?
""
else
redirect to('/')
end
end
end
end