From d7fc313d5f5d0609e500f3a6ebca3ac4fe335819 Mon Sep 17 00:00:00 2001 From: Steven Miers Date: Wed, 28 Jan 2015 19:17:20 -0600 Subject: [PATCH] VRFS-2665, VRFS-2666 : Create models and relationships for two new tables: backing_tracks and recorded_backing_tracks --- db/manifest | 3 +- db/up/recorded_backing_tracks.sql | 38 +++++++++++++++++++ ruby/lib/jam_ruby.rb | 4 +- ruby/lib/jam_ruby/models/backing_track.rb | 20 ++++++++++ ruby/lib/jam_ruby/models/connection.rb | 1 + .../jam_ruby/models/recorded_backing_track.rb | 18 +++++++++ ruby/spec/factories.rb | 5 +++ 7 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 db/up/recorded_backing_tracks.sql create mode 100644 ruby/lib/jam_ruby/models/backing_track.rb create mode 100644 ruby/lib/jam_ruby/models/recorded_backing_track.rb diff --git a/db/manifest b/db/manifest index 161ba7501..e0eeb557b 100755 --- a/db/manifest +++ b/db/manifest @@ -244,4 +244,5 @@ jamtracks_job.sql text_messages.sql text_message_migration.sql backing_tracks.sql -metronome.sql \ No newline at end of file +metronome.sql +recorded_backing_tracks.sql diff --git a/db/up/recorded_backing_tracks.sql b/db/up/recorded_backing_tracks.sql new file mode 100644 index 000000000..2b59895a0 --- /dev/null +++ b/db/up/recorded_backing_tracks.sql @@ -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'); diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index 084ae7d9e..f707fcf27 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -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" diff --git a/ruby/lib/jam_ruby/models/backing_track.rb b/ruby/lib/jam_ruby/models/backing_track.rb new file mode 100644 index 000000000..66304e333 --- /dev/null +++ b/ruby/lib/jam_ruby/models/backing_track.rb @@ -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 \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/connection.rb b/ruby/lib/jam_ruby/models/connection.rb index 8a813f9ce..56591a318 100644 --- a/ruby/lib/jam_ruby/models/connection.rb +++ b/ruby/lib/jam_ruby/models/connection.rb @@ -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]} diff --git a/ruby/lib/jam_ruby/models/recorded_backing_track.rb b/ruby/lib/jam_ruby/models/recorded_backing_track.rb new file mode 100644 index 000000000..d3b3493ae --- /dev/null +++ b/ruby/lib/jam_ruby/models/recorded_backing_track.rb @@ -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 diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb index bd52cc17f..717ff789e 100644 --- a/ruby/spec/factories.rb +++ b/ruby/spec/factories.rb @@ -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'