From 1eb4b804824b2ad49a3432cee78cc792d68e55a6 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 5 Mar 2014 06:40:04 +0000 Subject: [PATCH] VRFS-1333 refactoring {recording,music_sessions_history}_plays into playable_plays --- db/manifest | 2 +- db/up/plays_refactor.sql | 13 ++++++ ruby/lib/jam_ruby.rb | 4 +- ruby/lib/jam_ruby/models/claimed_recording.rb | 2 +- .../jam_ruby/models/music_session_history.rb | 2 +- .../lib/jam_ruby/models/music_session_play.rb | 11 ----- ruby/lib/jam_ruby/models/playable_play.rb | 10 +++++ ruby/lib/jam_ruby/models/recording.rb | 2 +- ruby/lib/jam_ruby/models/recording_play.rb | 13 ------ ruby/spec/factories.rb | 43 ++++++++----------- ruby/spec/jam_ruby/models/feed_spec.rb | 14 +++--- 11 files changed, 54 insertions(+), 62 deletions(-) create mode 100644 db/up/plays_refactor.sql delete mode 100644 ruby/lib/jam_ruby/models/music_session_play.rb create mode 100644 ruby/lib/jam_ruby/models/playable_play.rb delete mode 100644 ruby/lib/jam_ruby/models/recording_play.rb diff --git a/db/manifest b/db/manifest index 9f989d8be..4e0273edb 100755 --- a/db/manifest +++ b/db/manifest @@ -127,4 +127,4 @@ scores_mod_users2.sql user_bio.sql track_changes_counter.sql scores_better_test_data.sql - +plays_refactor.sql diff --git a/db/up/plays_refactor.sql b/db/up/plays_refactor.sql new file mode 100644 index 000000000..bec0dd433 --- /dev/null +++ b/db/up/plays_refactor.sql @@ -0,0 +1,13 @@ +DROP table music_sessions_plays; +DROP table recordings_plays; + +CREATE TABLE playable_plays( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + playable_id VARCHAR(64) NOT NULL, + playable_type VARCHAR(128) NOT NULL, + player_id VARCHAR(64) REFERENCES users(id) ON DELETE CASCADE, + claimed_recording_id VARCHAR(64) REFERENCES claimed_recordings(id), + ip_address inet, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index 4e840a9ee..6d3903af7 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -76,7 +76,6 @@ require "jam_ruby/models/music_session" require "jam_ruby/models/music_session_comment" require "jam_ruby/models/music_session_history" require "jam_ruby/models/music_session_liker" -require "jam_ruby/models/music_session_play" require "jam_ruby/models/music_session_user_history" require "jam_ruby/models/music_session_perf_data" require "jam_ruby/models/invitation" @@ -92,7 +91,6 @@ 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/recording_play" require "jam_ruby/models/recorded_track" require "jam_ruby/models/recorded_track_observer" require "jam_ruby/models/share_token" @@ -121,13 +119,13 @@ require "jam_ruby/models/icecast_template_socket" require "jam_ruby/models/icecast_server_group" require "jam_ruby/models/icecast_mount_template" require "jam_ruby/models/facebook_signup" -require "jam_ruby/models/recording_play" require "jam_ruby/models/feed" require "jam_ruby/models/jam_isp" require "jam_ruby/models/geo_ip_blocks" require "jam_ruby/models/geo_ip_locations" require "jam_ruby/models/score" require "jam_ruby/models/get_work" +require "jam_ruby/models/playable_play" include Jampb diff --git a/ruby/lib/jam_ruby/models/claimed_recording.rb b/ruby/lib/jam_ruby/models/claimed_recording.rb index 1002068bf..036b2cd66 100644 --- a/ruby/lib/jam_ruby/models/claimed_recording.rb +++ b/ruby/lib/jam_ruby/models/claimed_recording.rb @@ -9,7 +9,7 @@ module JamRuby has_many :recorded_tracks, :through => :recording, :class_name => "JamRuby::RecordedTrack" has_many :playing_sessions, :class_name => "JamRuby::MusicSession" has_many :likes, :class_name => "JamRuby::RecordingLiker", :foreign_key => "claimed_recording_id" - has_many :plays, :class_name => "JamRuby::RecordingPlay", :foreign_key => "claimed_recording_id" + has_many :plays, :class_name => "JamRuby::PlayablePlay", :foreign_key => "claimed_recording_id", :dependent => :destroy has_one :share_token, :class_name => "JamRuby::ShareToken", :inverse_of => :shareable, :foreign_key => 'shareable_id' validates :name, no_profanity: true, length: {minimum: 3, maximum: 64}, presence: true diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb index 1bdc4676e..e04a0e6f8 100644 --- a/ruby/lib/jam_ruby/models/music_session_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_history.rb @@ -22,7 +22,7 @@ module JamRuby has_many :music_session_user_histories, :class_name => "JamRuby::MusicSessionUserHistory", :foreign_key => "music_session_id", :dependent => :delete_all has_many :comments, :class_name => "JamRuby::MusicSessionComment", :foreign_key => "music_session_id" has_many :likes, :class_name => "JamRuby::MusicSessionLiker", :foreign_key => "session_id" - has_many :plays, :class_name => "JamRuby::MusicSessionPlay", :foreign_key => "music_session_id" + has_many :plays, :class_name => "JamRuby::PlayablePlay", :as => :playable, :dependent => :destroy has_one :share_token, :class_name => "JamRuby::ShareToken", :inverse_of => :shareable, :foreign_key => 'shareable_id' has_one :feed, :class_name => "JamRuby::Feed", :inverse_of => :music_session_history, :foreign_key => 'music_session_id', :dependent => :destroy diff --git a/ruby/lib/jam_ruby/models/music_session_play.rb b/ruby/lib/jam_ruby/models/music_session_play.rb deleted file mode 100644 index 883d44389..000000000 --- a/ruby/lib/jam_ruby/models/music_session_play.rb +++ /dev/null @@ -1,11 +0,0 @@ -module JamRuby - class MusicSessionPlay < ActiveRecord::Base - - self.table_name = "music_sessions_plays" - - self.primary_key = 'id' - - belongs_to :music_session, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "music_session_id", :counter_cache => :play_count - belongs_to :user, :class_name => "JamRuby::User", :foreign_key => "player_id" - end -end diff --git a/ruby/lib/jam_ruby/models/playable_play.rb b/ruby/lib/jam_ruby/models/playable_play.rb new file mode 100644 index 000000000..4631bc4db --- /dev/null +++ b/ruby/lib/jam_ruby/models/playable_play.rb @@ -0,0 +1,10 @@ +module JamRuby + class PlayablePlay < ActiveRecord::Base + self.table_name = "playable_plays" + + belongs_to :playable, :polymorphic => :true, :counter_cache => :play_count + belongs_to :user, :class_name => "JamRuby::User", :foreign_key => "player_id" + belongs_to :claimed_recording, :class_name => "JamRuby::ClaimedRecording", :foreign_key => "claimed_recording_id" + + end +end diff --git a/ruby/lib/jam_ruby/models/recording.rb b/ruby/lib/jam_ruby/models/recording.rb index fba123938..65ab57968 100644 --- a/ruby/lib/jam_ruby/models/recording.rb +++ b/ruby/lib/jam_ruby/models/recording.rb @@ -11,7 +11,7 @@ module JamRuby has_many :recorded_tracks, :class_name => "JamRuby::RecordedTrack", :foreign_key => :recording_id, :dependent => :destroy has_many :comments, :class_name => "JamRuby::RecordingComment", :foreign_key => "recording_id" has_many :likes, :class_name => "JamRuby::RecordingLiker", :foreign_key => "recording_id" - has_many :plays, :class_name => "JamRuby::RecordingPlay", :foreign_key => "recording_id" + has_many :plays, :class_name => "JamRuby::PlayablePlay", :as => :playable, :dependent => :destroy has_one :feed, :class_name => "JamRuby::Feed", :inverse_of => :recording, :foreign_key => 'recording_id', :dependent => :destroy belongs_to :owner, :class_name => "JamRuby::User", :inverse_of => :owned_recordings, :foreign_key => 'owner_id' diff --git a/ruby/lib/jam_ruby/models/recording_play.rb b/ruby/lib/jam_ruby/models/recording_play.rb deleted file mode 100644 index 56bd2d298..000000000 --- a/ruby/lib/jam_ruby/models/recording_play.rb +++ /dev/null @@ -1,13 +0,0 @@ -module JamRuby - class RecordingPlay < ActiveRecord::Base - - self.table_name = "recordings_plays" - - self.primary_key = 'id' - - belongs_to :recording, :class_name => "JamRuby::Recording", :foreign_key => "recording_id", :counter_cache => :play_count - belongs_to :claimed_recording, :class_name => "JamRuby::ClaimedRecording", :foreign_key => "claimed_recording_id" - belongs_to :user, :class_name => "JamRuby::User", :foreign_key => "player_id" - - end -end diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb index a0a6cdbfd..2842661ef 100644 --- a/ruby/spec/factories.rb +++ b/ruby/spec/factories.rb @@ -357,24 +357,6 @@ FactoryGirl.define do end end - factory :icecast_template, :class => JamRuby::IcecastTemplate do - - sequence(:name) { |n| "name-#{n}"} - sequence(:location) { |n| "location-#{n}"} - - factory :icecast_template_minimal do - association :limit, :factory => :icecast_limit - association :admin_auth, :factory => :icecast_admin_authentication - association :path, :factory => :icecast_path - association :logging, :factory => :icecast_logging - association :security, :factory => :icecast_security - - before(:create) do |template| - template.listen_sockets << FactoryGirl.build(:icecast_listen_socket) - end - end - end - factory :icecast_mount_template, :class => JamRuby::IcecastMountTemplate do sequence(:name) { |n| "name-#{n}"} source_username Faker::Lorem.characters(10) @@ -393,6 +375,24 @@ FactoryGirl.define do association :authentication, :factory => :icecast_user_authentication end + factory :icecast_template, :class => JamRuby::IcecastTemplate do + + sequence(:name) { |n| "name-#{n}"} + sequence(:location) { |n| "location-#{n}"} + + factory :icecast_template_minimal do + association :limit, :factory => :icecast_limit + association :admin_auth, :factory => :icecast_admin_authentication + association :path, :factory => :icecast_path + association :logging, :factory => :icecast_logging + association :security, :factory => :icecast_security + + before(:create) do |template| + template.listen_sockets << FactoryGirl.build(:icecast_listen_socket) + end + end + end + factory :facebook_signup, :class => JamRuby::FacebookSignup do sequence(:lookup_id) { |n| "lookup-#{n}"} sequence(:first_name) { |n| "first-#{n}"} @@ -404,12 +404,7 @@ FactoryGirl.define do token_expires_at Time.now end - factory :recording_play, :class => JamRuby::RecordingPlay do - - end - - factory :music_session_play, :class => JamRuby::MusicSessionPlay do - + factory :playable_play, :class => JamRuby::PlayablePlay do end factory :recording_like, :class => JamRuby::RecordingLiker do diff --git a/ruby/spec/jam_ruby/models/feed_spec.rb b/ruby/spec/jam_ruby/models/feed_spec.rb index f2cc0c427..b61596fc9 100644 --- a/ruby/spec/jam_ruby/models/feed_spec.rb +++ b/ruby/spec/jam_ruby/models/feed_spec.rb @@ -67,22 +67,22 @@ describe Feed do claimed_recording1 = FactoryGirl.create(:claimed_recording) claimed_recording2 = FactoryGirl.create(:claimed_recording) - FactoryGirl.create(:recording_play, recording: claimed_recording1.recording, claimed_recording: claimed_recording1, user:claimed_recording1.user) + FactoryGirl.create(:playable_play, playable: claimed_recording1.recording, claimed_recording: claimed_recording1, user:claimed_recording1.user) feeds, start = Feed.index(user1, :sort => 'plays') feeds.length.should == 4 - FactoryGirl.create(:recording_play, recording: claimed_recording2.recording, claimed_recording: claimed_recording2, user:claimed_recording1.user) - FactoryGirl.create(:recording_play, recording: claimed_recording2.recording, claimed_recording: claimed_recording2, user:claimed_recording2.user) + FactoryGirl.create(:playable_play, playable: claimed_recording2.recording, claimed_recording: claimed_recording2, user:claimed_recording1.user) + FactoryGirl.create(:playable_play, playable: claimed_recording2.recording, claimed_recording: claimed_recording2, user:claimed_recording2.user) feeds, start = Feed.index(user1, :sort => 'plays') feeds.length.should == 4 feeds[0].recording.should == claimed_recording2.recording feeds[1].recording.should == claimed_recording1.recording - FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user1) - FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user2) - FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user3) + FactoryGirl.create(:playable_play, playable: claimed_recording1.recording.music_session.music_session_history, user: user1) + FactoryGirl.create(:playable_play, playable: claimed_recording1.recording.music_session.music_session_history, user: user2) + FactoryGirl.create(:playable_play, playable: claimed_recording1.recording.music_session.music_session_history, user: user3) feeds, start = Feed.index(user1, :sort => 'plays') @@ -235,7 +235,7 @@ describe Feed do it "supports plays pagination" do claimed_recording1 = FactoryGirl.create(:claimed_recording) - FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user1) + FactoryGirl.create(:playable_play, playable: claimed_recording1.recording.music_session.music_session_history, user: user1) options = {limit: 1, sort: 'plays'} feeds, start = Feed.index(user1, options)