update user home base (last_jam_blah) fields upon registation and joining a music session as a musician
This commit is contained in:
parent
e6ea200b19
commit
3f688a8392
|
|
@ -151,3 +151,4 @@ user_mods.sql
|
|||
connection_stale_expire.sql
|
||||
rename_chat_messages.sql
|
||||
fix_connection_fields.sql
|
||||
add_last_jam_user_fields.sql
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
@ -352,7 +352,7 @@ SQL
|
|||
|
||||
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.as_musician = as_musician
|
||||
# connection.joining_session = true
|
||||
|
|
|
|||
|
|
@ -146,13 +146,18 @@ module JamRuby
|
|||
true
|
||||
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.as_musician = as_musician
|
||||
self.joining_session = true
|
||||
self.joined_session_at = Time.now
|
||||
associate_tracks(tracks) unless tracks.nil?
|
||||
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
|
||||
|
||||
def associate_tracks(tracks)
|
||||
|
|
|
|||
|
|
@ -773,7 +773,14 @@ module JamRuby
|
|||
user.country = location[:country]
|
||||
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?
|
||||
instruments.each do |musician_instrument_param|
|
||||
instrument = Instrument.find(musician_instrument_param[:instrument_id])
|
||||
|
|
@ -1138,6 +1145,14 @@ module JamRuby
|
|||
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
|
||||
@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])
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ describe ClaimedRecording do
|
|||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||
# @music_session.connections << @connection
|
||||
@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.stop
|
||||
@recording.reload
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ describe Mix do
|
|||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||
# @music_session.connections << @connection
|
||||
@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.stop
|
||||
@recording.claim(@user, "name", "description", Genre.first, true)
|
||||
|
|
|
|||
|
|
@ -398,7 +398,7 @@ describe MusicSession do
|
|||
@music_session = FactoryGirl.create(:music_session, :creator => @user1, :musician_access => true)
|
||||
# @music_session.connections << @connection
|
||||
@music_session.save!
|
||||
@connection.join_the_session(@music_session, true, nil)
|
||||
@connection.join_the_session(@music_session, true, nil, @user1)
|
||||
end
|
||||
|
||||
describe "not recording" do
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ describe 'Musician search' do
|
|||
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
|
||||
# music_session.connections << connection
|
||||
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.stop
|
||||
recording.reload
|
||||
|
|
@ -130,7 +130,7 @@ describe 'Musician search' do
|
|||
music_session = FactoryGirl.create(:music_session, :creator => usr, :musician_access => true)
|
||||
# music_session.connections << connection
|
||||
music_session.save
|
||||
connection.join_the_session(music_session, true, nil)
|
||||
connection.join_the_session(music_session, true, nil, usr)
|
||||
end
|
||||
|
||||
context 'musician stat counters' do
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ describe Recording do
|
|||
@track2 = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument2)
|
||||
|
||||
# @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)
|
||||
@user.recordings.length.should == 0
|
||||
|
|
@ -179,7 +179,7 @@ describe Recording do
|
|||
@track = FactoryGirl.create(:track, :connection => @connection2, :instrument => @instrument)
|
||||
# @music_session.connections << @connection2
|
||||
@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.stop
|
||||
@recording.reload
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ class MaxMindManager < BaseManager
|
|||
def self.lookup(ip_address)
|
||||
|
||||
city = state = country = nil
|
||||
|
||||
locid = ispid = 0
|
||||
|
||||
unless ip_address.nil? || ip_address !~ /^\d+\.\d+\.\d+\.\d+$/
|
||||
#ActiveRecord::Base.connection_pool.with_connection do |connection|
|
||||
# pg_conn = connection.instance_variable_get("@connection")
|
||||
|
|
@ -23,17 +24,29 @@ class MaxMindManager < BaseManager
|
|||
# end
|
||||
# end
|
||||
#end
|
||||
ip_as_int = ip_address_to_int(ip_address)
|
||||
block = GeoIpBlocks.lookup(ip_as_int)
|
||||
location = block ? GeoIpLocations.lookup(block.locid) : nil
|
||||
if location
|
||||
country = location.countrycode
|
||||
state = location.region
|
||||
city = location.city
|
||||
|
||||
addr = ip_address_to_int(ip_address)
|
||||
|
||||
block = GeoIpBlocks.lookup(addr)
|
||||
if block
|
||||
locid = block.locid
|
||||
|
||||
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
|
||||
|
||||
a = {:city => city, :state => state, :country => country}
|
||||
{city: city, state: state, country: country, addr: addr, locidispid: locid*1000000+ispid}
|
||||
end
|
||||
|
||||
def self.lookup_isp(ip_address)
|
||||
|
|
|
|||
|
|
@ -35,9 +35,15 @@ class UserManager < BaseManager
|
|||
raise PermissionError, "Signups are currently disabled"
|
||||
end
|
||||
|
||||
# a user should be able to specify their location, but if they don't, we'll best effort it
|
||||
if location.nil?
|
||||
location = MaxMindManager.lookup(remote_ip)
|
||||
loc = MaxMindManager.lookup(remote_ip)
|
||||
# there are three cases here: if location is missing, we'll auto set the city, etc. from
|
||||
# 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
|
||||
|
||||
# TODO: figure out why can't user verify_recaptcha here
|
||||
|
|
@ -54,7 +60,7 @@ class UserManager < BaseManager
|
|||
password: password,
|
||||
password_confirmation: password_confirmation,
|
||||
terms_of_service: terms_of_service,
|
||||
location: location,
|
||||
location: loc,
|
||||
instruments: instruments,
|
||||
birth_date: birth_date,
|
||||
musician: musician,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ describe ApiClaimedRecordingsController do
|
|||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||
# @music_session.connections << @connection
|
||||
@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.stop
|
||||
@recording.reload
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ describe "social metadata" do
|
|||
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||
# ms.connections << connection
|
||||
ms.save!
|
||||
connection.join_the_session(ms, true, nil)
|
||||
connection.join_the_session(ms, true, nil, user)
|
||||
ms
|
||||
}
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ describe "social metadata" do
|
|||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||
# @music_session.connections << @connection
|
||||
@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.stop
|
||||
@recording.reload
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ describe MusicSessionHelper do
|
|||
@music_session = FactoryGirl.create(:music_session, :creator => @user, :musician_access => true)
|
||||
# @music_session.connections << @connection
|
||||
@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.stop
|
||||
@recording.reload
|
||||
|
|
|
|||
|
|
@ -700,7 +700,7 @@ describe "Music Session API ", :type => :api do
|
|||
music_session = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||
# music_session.connections << connection
|
||||
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.stop
|
||||
recording.reload
|
||||
|
|
|
|||
|
|
@ -985,8 +985,9 @@ describe "User API", :type => :api do
|
|||
ms = FactoryGirl.create(:music_session, :creator => user, :musician_access => true)
|
||||
# ms.connections << connection
|
||||
ms.save!
|
||||
connection.join_the_session(ms, true, nil)
|
||||
ms }
|
||||
connection.join_the_session(ms, true, nil, user)
|
||||
ms
|
||||
}
|
||||
|
||||
it "fetches facebook successfully" do
|
||||
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.connections << @connection
|
||||
@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.stop
|
||||
@recording.reload
|
||||
|
|
|
|||
Loading…
Reference in New Issue