VRFS-1333 refactoring {recording,music_sessions_history}_plays into playable_plays

This commit is contained in:
Jonathan Kolyer 2014-03-05 06:40:04 +00:00
parent 6d277f6597
commit 1eb4b80482
11 changed files with 54 additions and 62 deletions

View File

@ -127,4 +127,4 @@ scores_mod_users2.sql
user_bio.sql
track_changes_counter.sql
scores_better_test_data.sql
plays_refactor.sql

13
db/up/plays_refactor.sql Normal file
View File

@ -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
);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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'

View File

@ -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

View File

@ -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

View File

@ -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)