wip
This commit is contained in:
parent
50684890cb
commit
e29050b0db
|
|
@ -18,6 +18,7 @@ CREATE TABLE jam_track_mixdown_packages (
|
|||
md5 VARCHAR,
|
||||
length INTEGER,
|
||||
downloaded_since_sign BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
last_step_at TIMESTAMP,
|
||||
last_signed_at TIMESTAMP,
|
||||
download_count INTEGER NOT NULL DEFAULT 0,
|
||||
signed_at TIMESTAMP,
|
||||
|
|
|
|||
|
|
@ -8,6 +8,8 @@ module JamRuby
|
|||
belongs_to :user, class_name: "JamRuby::User" # the owner, or purchaser of the jam_track
|
||||
belongs_to :jam_track, class_name: "JamRuby::JamTrack"
|
||||
|
||||
has_many :jam_track_mixdown_packages, class_name: "JamRuby::JamTrackMixdownPackage"
|
||||
|
||||
validates :name, presence: true, length: {maximum: 100}
|
||||
validates :description, length: {maximum: 1000}
|
||||
validates :user, presence: true
|
||||
|
|
@ -18,6 +20,24 @@ module JamRuby
|
|||
|
||||
validate :verify_settings
|
||||
|
||||
def self.index(params, user)
|
||||
jam_track_id = params[:id]
|
||||
|
||||
limit = 20
|
||||
|
||||
query = JamTrackMixdown.where('jam_track_id = ?', jam_track_id).where('user_id = ?', user.id).order('created_at').paginate(page: 1, per_page: limit)
|
||||
|
||||
count = query.total_entries
|
||||
|
||||
if count == 0
|
||||
[query, nil, count]
|
||||
elsif query.length < limit
|
||||
[query, nil, count]
|
||||
else
|
||||
[query, start + limit, count]
|
||||
end
|
||||
end
|
||||
|
||||
def verify_settings
|
||||
# TODO: validate settings
|
||||
if false
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ module JamRuby
|
|||
MAX_JAM_TRACK_DOWNLOADS = 1000
|
||||
|
||||
|
||||
|
||||
def after_save
|
||||
# try to catch major transitions:
|
||||
|
||||
|
|
|
|||
|
|
@ -15,5 +15,44 @@ describe JamTrackMixdownPackage do
|
|||
puts package.errors.inspect
|
||||
package.errors.any?.should == false
|
||||
end
|
||||
|
||||
|
||||
describe "signing_state" do
|
||||
it "quiet" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package)
|
||||
package.signing_state.should eq('QUIET')
|
||||
end
|
||||
|
||||
it "signed" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package, signed: true, signing_started_at: Time.now)
|
||||
package.signing_state.should eq('SIGNED')
|
||||
end
|
||||
|
||||
it "error" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package, error_count: 1)
|
||||
package.signing_state.should eq('ERROR')
|
||||
end
|
||||
|
||||
it "signing" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package, signing_started_at: Time.now, packaging_steps: 3, current_packaging_step:0, last_step_at:Time.now)
|
||||
package.signing_state.should eq('SIGNING')
|
||||
end
|
||||
|
||||
it "signing timeout" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package, signing_started_at: Time.now - 100, packaging_steps: 3, current_packaging_step:0, last_step_at:Time.now)
|
||||
package.signing_state.should eq('SIGNING_TIMEOUT')
|
||||
end
|
||||
|
||||
it "queued" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package, signing_queued_at: Time.now)
|
||||
package.signing_state.should eq('QUEUED')
|
||||
end
|
||||
|
||||
it "signing timeout" do
|
||||
package = FactoryGirl.create(:jam_track_mixdown_package, signing_queued_at: Time.now - (APP_CONFIG.signing_job_queue_max_time + 1))
|
||||
package.signing_state.should eq('QUEUED_TIMEOUT')
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -16,5 +16,21 @@ describe JamTrackMixdown do
|
|||
mixdown = JamTrackMixdown.create('abc', user, jam_track, {})
|
||||
mixdown.errors.any?.should == false
|
||||
end
|
||||
|
||||
it "index" do
|
||||
query, start, count = JamTrackMixdown.index({id: jam_track}, user)
|
||||
|
||||
query.length.should eq(0)
|
||||
start.should be_nil
|
||||
count.should eq(0)
|
||||
|
||||
mixdown = FactoryGirl.create(:jam_track_mixdown, user: user, jam_track: jam_track)
|
||||
|
||||
query, start, count = JamTrackMixdown.index({id: jam_track}, user)
|
||||
query[0].should eq(mixdown)
|
||||
start.should be_nil
|
||||
count.should eq(1)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
class ApiJamTrackMixdownsController < ApiController
|
||||
|
||||
# have to be signed in currently to see this screen
|
||||
before_filter :api_signed_in_user
|
||||
before_filter :lookup_jam_track_right, :only => [:download,:enqueue]
|
||||
|
||||
respond_to :json
|
||||
|
||||
def log
|
||||
@log || Logging.logger[ApiJamTrackMixdownsController]
|
||||
end
|
||||
|
||||
def index
|
||||
data = JamTrackMixdown.index(params, current_user)
|
||||
@jam_track_mixdowns, @next, @count = data[0], data[1], data[2]
|
||||
|
||||
render "api_jam_track_mixdowns/index", :layout => nil
|
||||
end
|
||||
|
||||
def download
|
||||
if @jam_track_right.valid?
|
||||
|
||||
all_fingerprint = params[:all_fp]
|
||||
running_fingerprint = params[:running_fp]
|
||||
|
||||
if Rails.application.config.guard_against_fraud
|
||||
error = @jam_track_right.guard_against_fraud(current_user, {all:all_fingerprint, running: running_fingerprint}, request.remote_ip)
|
||||
if error
|
||||
log.warn("potential fraud detected: #{error}")
|
||||
render :json => { :message => error }, :status => 403
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
sample_rate = params[:sample_rate].nil? ? nil : params[:sample_rate].to_i
|
||||
if @jam_track_right && @jam_track_right.ready?(sample_rate)
|
||||
@jam_track_right.update_download_count
|
||||
now = Time.now
|
||||
@jam_track_right.last_downloaded_at = now
|
||||
@jam_track_right.first_downloaded_at = now if @jam_track_right.first_downloaded_at.nil?
|
||||
@jam_track_right.save!
|
||||
redirect_to @jam_track_right.sign_url(120, sample_rate)
|
||||
else
|
||||
@jam_track_right.enqueue_if_needed(sample_rate)
|
||||
render :json => { :message => "not available, digitally signing Jam Track offline." }, :status => 202
|
||||
end
|
||||
else
|
||||
render :json => { :message => "download limit surpassed", :errors=>@jam_track_right.errors }, :status => 403
|
||||
end
|
||||
end
|
||||
|
||||
def enqueue
|
||||
sample_rate = params[:sample_rate].nil? ? nil : params[:sample_rate].to_i
|
||||
enqueued = @jam_track_right.enqueue_if_needed(sample_rate)
|
||||
log.debug("jamtrack #{enqueued ? "ENQUEUED" : "NOT ENQUEUED"}: jam_track_right=#{@jam_track_right.id} sample_rate=#{sample_rate} ")
|
||||
render :json => { :message => "enqueued" }, :status => 200
|
||||
end
|
||||
|
||||
private
|
||||
def lookup_jam_track_right
|
||||
@jam_track_right = JamTrackRight.where("jam_track_id=? AND user_id=?", params[:id], current_user.id).first
|
||||
raise JamPermissionError, ValidationMessages::PERMISSION_VALIDATION_ERROR unless @jam_track_right
|
||||
end
|
||||
|
||||
end # class ApiJamTracksController
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
node :next do |page|
|
||||
@next
|
||||
end
|
||||
|
||||
node :count do |page|
|
||||
@count
|
||||
end
|
||||
|
||||
node :mixdowns do |page|
|
||||
partial "api_jam_track_mixdowns/show", object: @jam_track_mixdowns
|
||||
end
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
object @jam_track_mixdown
|
||||
|
||||
attributes :id, :name, :description, :jam_track_id
|
||||
|
||||
node :settings do |item|
|
||||
JSON.parse(item.settings)
|
||||
end
|
||||
|
||||
child(:jam_track_mixdown_packages => :packages) {
|
||||
node do |package|
|
||||
partial("api_jam_track_mixdowns/show_package", :object => package)
|
||||
end
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
object @package
|
||||
|
||||
attributes :id, :file_type, :sample_rate, :encrypt_type, :error_count, :error_reason, :error_detail, :signing_state, :packaging_steps, :current_packaging_step
|
||||
|
|
@ -247,6 +247,7 @@ SampleApp::Application.routes.draw do
|
|||
match '/jamtracks/enqueue/:id' => 'api_jam_tracks#enqueue', :via => :post, :as => 'api_jam_tracks_enqueue'
|
||||
match '/jamtracks/rights/:id' => 'api_jam_tracks#show_jam_track_right', :via => :get, :as => 'api_jam_tracks_show_right'
|
||||
match '/jamtracks/keys' => 'api_jam_tracks#keys', :via => :post, :as => 'api_jam_tracks_keys'
|
||||
match '/jamtracks/:id/mixdowns' => 'api_jam_track_mixdowns#index', :via => :get
|
||||
|
||||
# Shopping carts
|
||||
match '/shopping_carts/add_jamtrack' => 'api_shopping_carts#add_jamtrack', :via => :post
|
||||
|
|
|
|||
Loading…
Reference in New Issue