VRFS-2665, VRFS-2666 : Create models and relationships for two new tables: backing_tracks and recorded_backing_tracks

This commit is contained in:
Steven Miers 2015-01-28 19:17:20 -06:00
parent aa20f77eaf
commit d7fc313d5f
7 changed files with 87 additions and 2 deletions

View File

@ -244,4 +244,5 @@ jamtracks_job.sql
text_messages.sql
text_message_migration.sql
backing_tracks.sql
metronome.sql
metronome.sql
recorded_backing_tracks.sql

View File

@ -0,0 +1,38 @@
CREATE TABLE backing_tracks (
id VARCHAR(64) NOT NULL PRIMARY KEY DEFAULT uuid_generate_v4(),
filename VARCHAR(1024) NOT NULL,
connection_id VARCHAR(64) NOT NULL,
client_track_id VARCHAR(64) NOT NULL,
client_resource_id VARCHAR(100),
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE recorded_backing_tracks (
id BIGINT PRIMARY KEY,
user_id VARCHAR(64) REFERENCES users(id) ON DELETE CASCADE,
backing_track_id VARCHAR(64) REFERENCES backing_tracks(id) ON DELETE CASCADE,
recording_id VARCHAR(64) NOT NULL,
client_track_id VARCHAR(64) NOT NULL,
is_part_uploading BOOLEAN NOT NULL DEFAULT FALSE,
next_part_to_upload INTEGER NOT NULL DEFAULT 0,
upload_id CHARACTER VARYING(1024),
part_failures INTEGER NOT NULL DEFAULT 0,
discard BOOLEAN,
download_count INTEGER NOT NULL DEFAULT 0,
md5 CHARACTER VARYING(100),
length BIGINT,
client_id VARCHAR(64) NOT NULL,
file_offset BIGINT,
url VARCHAR(1024) NOT NULL,
fully_uploaded BOOLEAN NOT NULL DEFAULT FALSE,
upload_failures INTEGER NOT NULL DEFAULT 0,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
ALTER TABLE recorded_backing_tracks ALTER COLUMN id SET DEFAULT nextval('tracks_next_tracker_seq');

View File

@ -86,6 +86,7 @@ require "jam_ruby/lib/stats.rb"
require "jam_ruby/amqp/amqp_connection_manager"
require "jam_ruby/database"
require "jam_ruby/message_factory"
require "jam_ruby/models/backing_track"
require "jam_ruby/models/feedback"
require "jam_ruby/models/feedback_observer"
#require "jam_ruby/models/max_mind_geo"
@ -131,8 +132,10 @@ require "jam_ruby/models/search"
require "jam_ruby/models/recording"
require "jam_ruby/models/recording_comment"
require "jam_ruby/models/recording_liker"
require "jam_ruby/models/recorded_backing_track"
require "jam_ruby/models/recorded_track"
require "jam_ruby/models/recorded_track_observer"
require "jam_ruby/models/recorded_video"
require "jam_ruby/models/quick_mix"
require "jam_ruby/models/quick_mix_observer"
require "jam_ruby/models/share_token"
@ -196,7 +199,6 @@ require "jam_ruby/models/score_history"
require "jam_ruby/models/jam_company"
require "jam_ruby/models/user_sync"
require "jam_ruby/models/video_source"
require "jam_ruby/models/recorded_video"
require "jam_ruby/models/text_message"
require "jam_ruby/jam_tracks_manager"

View File

@ -0,0 +1,20 @@
module JamRuby
class BackingTrack < ActiveRecord::Base
self.table_name = "backing_tracks"
self.primary_key = 'id'
default_scope order('created_at ASC')
belongs_to :connection, :class_name => "JamRuby::Connection", :inverse_of => :tracks, :foreign_key => 'connection_id'
validates :connection, presence: true
validates :client_track_id, presence: true
def user
self.connection.user
end
end
end

View File

@ -18,6 +18,7 @@ module JamRuby
belongs_to :music_session, :class_name => "JamRuby::ActiveMusicSession", foreign_key: :music_session_id
has_one :latency_tester, class_name: 'JamRuby::LatencyTester', foreign_key: :client_id, primary_key: :client_id
has_many :tracks, :class_name => "JamRuby::Track", :inverse_of => :connection, :foreign_key => 'connection_id', :dependent => :delete_all
has_many :backing_tracks, :class_name => "JamRuby::BackingTrack", :inverse_of => :connection, :foreign_key => 'connection_id', :dependent => :delete_all
has_many :video_sources, :class_name => "JamRuby::VideoSource", :inverse_of => :connection, :foreign_key => 'connection_id', :dependent => :delete_all
validates :as_musician, :inclusion => {:in => [true, false, nil]}

View File

@ -0,0 +1,18 @@
module JamRuby
# BackingTrack analog to JamRuby::RecordedTrack
class RecordedBackingTrack < ActiveRecord::Base
belongs_to :user, :class_name => "JamRuby::User", :inverse_of => :recorded_backing_tracks
belongs_to :recording, :class_name => "JamRuby::Recording", :inverse_of => :recorded_backing_tracks
validates :filename, :presence => true
def self.create_from_backing_track(backing_track, recording)
recorded_backing_track = self.new
recorded_backing_track.recording = recording
recorded_backing_track.client_backing_track_id = backing_track.client_backing_track_id
recorded_backing_track.user = backing_track.connection.user
recorded_backing_track.save
recorded_backing_track
end
end
end

View File

@ -237,6 +237,11 @@ FactoryGirl.define do
sequence(:client_video_source_id) { |n| "client_video_source_id#{n}"}
end
factory :backing_track, :class => JamRuby::BackingTrack do
sequence(:client_track_id) { |n| "client_track_id#{n}"}
filename 'foo.mp3'
end
factory :recorded_track, :class => JamRuby::RecordedTrack do
instrument JamRuby::Instrument.first
sound 'stereo'