update user home base (last_jam_blah) fields upon registation and joining a music session as a musician

This commit is contained in:
Scott Comer 2014-05-08 19:44:52 -05:00
parent e6ea200b19
commit 3f688a8392
17 changed files with 80 additions and 31 deletions

View File

@ -151,3 +151,4 @@ user_mods.sql
connection_stale_expire.sql connection_stale_expire.sql
rename_chat_messages.sql rename_chat_messages.sql
fix_connection_fields.sql fix_connection_fields.sql
add_last_jam_user_fields.sql

View File

@ -0,0 +1,8 @@
ALTER TABLE users ADD COLUMN last_jam_addr BIGINT;
ALTER TABLE users ADD COLUMN last_jam_locidispid BIGINT;
-- (j)oin session as musician, (r)egister, (f)tue, (n)etwork test
ALTER TABLE users ADD COLUMN last_jam_updated_reason CHAR(1);
ALTER TABLE users ADD COLUMN last_jam_updated_at TIMESTAMP;

View File

@ -352,7 +352,7 @@ SQL
connection = Connection.find_by_client_id_and_user_id!(client_id, user.id) connection = Connection.find_by_client_id_and_user_id!(client_id, user.id)
connection.join_the_session(music_session, as_musician, tracks) connection.join_the_session(music_session, as_musician, tracks, user)
# connection.music_session_id = music_session.id # connection.music_session_id = music_session.id
# connection.as_musician = as_musician # connection.as_musician = as_musician
# connection.joining_session = true # connection.joining_session = true

View File

@ -146,13 +146,18 @@ module JamRuby
true true
end end
def join_the_session(music_session, as_musician, tracks) def join_the_session(music_session, as_musician, tracks, user)
self.music_session_id = music_session.id self.music_session_id = music_session.id
self.as_musician = as_musician self.as_musician = as_musician
self.joining_session = true self.joining_session = true
self.joined_session_at = Time.now self.joined_session_at = Time.now
associate_tracks(tracks) unless tracks.nil? associate_tracks(tracks) unless tracks.nil?
self.save self.save
# if user joins the session as a musician, update their addr and location
if as_musician
user.update_addr_loc(self, 'j')
end
end end
def associate_tracks(tracks) def associate_tracks(tracks)

View File

@ -773,7 +773,14 @@ module JamRuby
user.country = location[:country] user.country = location[:country]
user.birth_date = birth_date user.birth_date = birth_date
if user.musician # only update instruments if the user is a musician if musician
user.last_jam_addr = location[:addr]
user.last_jam_locidispid = location[:locidispid]
user.last_jam_updated_reason = 'r'
user.last_jam_updated_at = Time.now
end
if musician # only update instruments if the user is a musician
unless instruments.nil? unless instruments.nil?
instruments.each do |musician_instrument_param| instruments.each do |musician_instrument_param|
instrument = Instrument.find(musician_instrument_param[:instrument_id]) instrument = Instrument.find(musician_instrument_param[:instrument_id])
@ -1138,6 +1145,14 @@ module JamRuby
end end
end end
def update_addr_loc(connection, reason)
self.last_jam_addr = connection.addr
self.last_jam_locidispid = connection.locidispid
self.last_jam_updated_reason = reason
self.last_jam_updated_at = Time.now
self.save
end
def top_followings def top_followings
@topf ||= User.joins("INNER JOIN follows ON follows.followable_id = users.id AND follows.followable_type = '#{self.class.to_s}'") @topf ||= User.joins("INNER JOIN follows ON follows.followable_id = users.id AND follows.followable_type = '#{self.class.to_s}'")
.where(['follows.user_id = ?', self.id]) .where(['follows.user_id = ?', self.id])

View File

@ -21,7 +21,7 @@ describe ClaimedRecording do
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save @music_session.save
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, @user)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@recording.stop @recording.stop
@recording.reload @recording.reload

View File

@ -10,7 +10,7 @@ describe Mix do
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save @music_session.save
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, @user)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@recording.stop @recording.stop
@recording.claim(@user, "name", "description", Genre.first, true) @recording.claim(@user, "name", "description", Genre.first, true)

View File

@ -398,7 +398,7 @@ describe MusicSession do
@music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save! @music_session.save!
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, @user1)
end end
describe "not recording" do describe "not recording" do

View File

@ -115,7 +115,7 @@ describe 'Musician search' do
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true) music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
# music_session.connections << connection # music_session.connections << connection
music_session.save music_session.save
connection.join_the_session(music_session, true, nil) connection.join_the_session(music_session, true, nil, usr)
recording = Recording.start(music_session, usr) recording = Recording.start(music_session, usr)
recording.stop recording.stop
recording.reload recording.reload
@ -130,7 +130,7 @@ describe 'Musician search' do
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true) music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
# music_session.connections << connection # music_session.connections << connection
music_session.save music_session.save
connection.join_the_session(music_session, true, nil) connection.join_the_session(music_session, true, nil, usr)
end end
context 'musician stat counters' do context 'musician stat counters' do

View File

@ -80,7 +80,7 @@ describe Recording do
@track2 = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument2) @track2 = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument2)
# @music_session.connections << @connection2 # @music_session.connections << @connection2
@connection2.join_the_session(@music_session, true, nil) @connection2.join_the_session(@music_session, true, nil, @user2)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@user.recordings.length.should == 0 @user.recordings.length.should == 0
@ -179,7 +179,7 @@ describe Recording do
@track = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument) @track = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument)
# @music_session.connections << @connection2 # @music_session.connections << @connection2
@music_session.save @music_session.save
@connection2.join_the_session(@music_session, true, nil) @connection2.join_the_session(@music_session, true, nil, @user2)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@recording.stop @recording.stop
@recording.reload @recording.reload

View File

@ -10,7 +10,8 @@ class MaxMindManager < BaseManager
def self.lookup(ip_address) def self.lookup(ip_address)
city = state = country = nil city = state = country = nil
locid = ispid = 0
unless ip_address.nil? || ip_address !~ /^\d+\.\d+\.\d+\.\d+$/ unless ip_address.nil? || ip_address !~ /^\d+\.\d+\.\d+\.\d+$/
#ActiveRecord::Base.connection_pool.with_connection do |connection| #ActiveRecord::Base.connection_pool.with_connection do |connection|
# pg_conn = connection.instance_variable_get("@connection") # pg_conn = connection.instance_variable_get("@connection")
@ -23,17 +24,29 @@ class MaxMindManager < BaseManager
# end # end
# end # end
#end #end
ip_as_int = ip_address_to_int(ip_address)
block = GeoIpBlocks.lookup(ip_as_int) addr = ip_address_to_int(ip_address)
location = block ? GeoIpLocations.lookup(block.locid) : nil
if location block = GeoIpBlocks.lookup(addr)
country = location.countrycode if block
state = location.region locid = block.locid
city = location.city
location = GeoIpLocations.lookup(locid)
if location
# todo translate countrycode to country, region(code) to region
country = location.countrycode
state = location.region
city = location.city
end
end
isp = JamIsp.lookup(addr)
if isp
ispid = isp.coid
end end
end end
a = {:city => city, :state => state, :country => country} {city: city, state: state, country: country, addr: addr, locidispid: locid*1000000+ispid}
end end
def self.lookup_isp(ip_address) def self.lookup_isp(ip_address)

View File

@ -35,9 +35,15 @@ class UserManager < BaseManager
raise PermissionError, "Signups are currently disabled" raise PermissionError, "Signups are currently disabled"
end end
# a user should be able to specify their location, but if they don't, we'll best effort it loc = MaxMindManager.lookup(remote_ip)
if location.nil? # there are three cases here: if location is missing, we'll auto set the city, etc. from
location = MaxMindManager.lookup(remote_ip) # the ip address; if location is present, empty or not empty, we'll set the city, etc. from
# what is present in location. we should NOT normally default city, etc. for the user, they
# own it, they may want it to be unspecified, that is their right.
if location
loc[:city] = location[:city]
loc[:state] = location[:state]
loc[:country] = location[:country]
end end
# TODO: figure out why can't user verify_recaptcha here # TODO: figure out why can't user verify_recaptcha here
@ -54,7 +60,7 @@ class UserManager < BaseManager
password: password, password: password,
password_confirmation: password_confirmation, password_confirmation: password_confirmation,
terms_of_service: terms_of_service, terms_of_service: terms_of_service,
location: location, location: loc,
instruments: instruments, instruments: instruments,
birth_date: birth_date, birth_date: birth_date,
musician: musician, musician: musician,

View File

@ -11,7 +11,7 @@ describe ApiClaimedRecordingsController do
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save @music_session.save
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, @user)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@recording.stop @recording.stop
@recording.reload @recording.reload

View File

@ -65,7 +65,7 @@ describe "social metadata" do
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
# ms.connections << connection # ms.connections << connection
ms.save! ms.save!
connection.join_the_session(ms, true, nil) connection.join_the_session(ms, true, nil, user)
ms ms
} }
@ -93,7 +93,7 @@ describe "social metadata" do
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save @music_session.save
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, @user)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@recording.stop @recording.stop
@recording.reload @recording.reload

View File

@ -10,7 +10,7 @@ describe MusicSessionHelper do
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save @music_session.save
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, @user)
@recording = Recording.start(@music_session, @user) @recording = Recording.start(@music_session, @user)
@recording.stop @recording.stop
@recording.reload @recording.reload

View File

@ -700,7 +700,7 @@ describe "Music Session API ", :type => :api do
music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
# music_session.connections << connection # music_session.connections << connection
music_session.save music_session.save
connection.join_the_session(music_session, true, nil) connection.join_the_session(music_session, true, nil, user)
recording = Recording.start(music_session, user) recording = Recording.start(music_session, user)
recording.stop recording.stop
recording.reload recording.reload

View File

@ -985,8 +985,9 @@ describe "User API", :type => :api do
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
# ms.connections << connection # ms.connections << connection
ms.save! ms.save!
connection.join_the_session(ms, true, nil) connection.join_the_session(ms, true, nil, user)
ms } ms
}
it "fetches facebook successfully" do it "fetches facebook successfully" do
login(user.email, user.password, 200, true) login(user.email, user.password, 200, true)
@ -1122,7 +1123,7 @@ describe "User API", :type => :api do
@music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true) @music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
# @music_session.connections << @connection # @music_session.connections << @connection
@music_session.save @music_session.save
@connection.join_the_session(@music_session, true, nil) @connection.join_the_session(@music_session, true, nil, user)
@recording = Recording.start(@music_session, user) @recording = Recording.start(@music_session, user)
@recording.stop @recording.stop
@recording.reload @recording.reload