80 lines
1.7 KiB
Ruby
80 lines
1.7 KiB
Ruby
require 'sinatra/base'
|
|
require 'sinatra/json'
|
|
require 'sinatra/namespace'
|
|
|
|
require 'yaml'
|
|
require 'themoviedb'
|
|
|
|
module Librarix
|
|
class Application < Sinatra::Application
|
|
namespace '/api/v1' do
|
|
not_found do
|
|
{error: :not_found}.to_json
|
|
end
|
|
|
|
helpers do
|
|
def base_url
|
|
@base_url ||= "#{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}"
|
|
end
|
|
|
|
def json_params
|
|
JSON.parse(request.body.read)
|
|
rescue
|
|
halt 400, { message:'Invalid JSON' }.to_json
|
|
end
|
|
end
|
|
|
|
before do
|
|
content_type 'application/json'
|
|
end
|
|
|
|
namespace '/genres' do
|
|
get '' do
|
|
Librarix::Models::Genre.fetch.to_json
|
|
end
|
|
end
|
|
|
|
namespace '/movies' do
|
|
get '' do
|
|
Librarix::Models::Movie.where(added: true).all.to_json
|
|
end
|
|
|
|
get '/popular' do
|
|
Librarix::Models::Movie.popular.to_json
|
|
end
|
|
|
|
get '/search' do
|
|
end
|
|
|
|
get '/:id' do |id|
|
|
Librarix::Models::Movie.find_or_fetch(id).to_json
|
|
end
|
|
|
|
post '/:id' do
|
|
Librarix::Models::Movie.find_or_fetch(id).add!
|
|
{success: true}.to_json
|
|
end
|
|
|
|
get '/:id/fetch' do |id|
|
|
Librarix::Models::Movie.fetch(id).to_json
|
|
end
|
|
|
|
patch '/:id/view' do |id|
|
|
Librarix::Models::Movie.find(id: id).view!
|
|
{success: true}.to_json
|
|
end
|
|
|
|
patch '/:id/download' do |id|
|
|
Librarix::Models::Movie.find(id: id).download!
|
|
{success: true}.to_json
|
|
end
|
|
|
|
delete '/:id' do |id|
|
|
Librarix::Models::Movie.find(id: id).destroy
|
|
{success: true}.to_json
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|