Merge branch 'develop' into feature/jamtracks_enhancements

This commit is contained in:
Brian T. Smith 2016-01-03 22:36:03 -06:00
commit 1f84f5c130
16 changed files with 98 additions and 14 deletions

View File

@ -316,4 +316,5 @@ acappella.sql
purchasable_gift_cards.sql
versionable_jamtracks.sql
session_controller.sql
jam_tracks_bpm.sql
jam_tracks_bpm.sql
jam_track_sessions.sql

View File

@ -15,7 +15,6 @@ CREATE TABLE admin_users (
updated_at timestamp without time zone NOT NULL
);
ALTER TABLE public.admin_users OWNER TO postgres;
CREATE SEQUENCE admin_users_id_seq
START WITH 1
INCREMENT BY 1
@ -23,7 +22,6 @@ CREATE SEQUENCE admin_users_id_seq
NO MAXVALUE
CACHE 1;
ALTER TABLE public.admin_users_id_seq OWNER TO postgres;
ALTER SEQUENCE admin_users_id_seq OWNED BY admin_users.id;
SELECT pg_catalog.setval('admin_users_id_seq', 2, true);
ALTER TABLE ONLY admin_users ALTER COLUMN id SET DEFAULT nextval('admin_users_id_seq'::regclass);
@ -45,7 +43,6 @@ CREATE TABLE active_admin_comments (
updated_at timestamp without time zone NOT NULL,
namespace character varying(255)
);
ALTER TABLE public.active_admin_comments OWNER TO postgres;
CREATE SEQUENCE active_admin_comments_id_seq
START WITH 1
INCREMENT BY 1
@ -53,7 +50,6 @@ CREATE SEQUENCE active_admin_comments_id_seq
NO MAXVALUE
CACHE 1;
ALTER TABLE public.active_admin_comments_id_seq OWNER TO postgres;
ALTER SEQUENCE active_admin_comments_id_seq OWNED BY active_admin_comments.id;
SELECT pg_catalog.setval('active_admin_comments_id_seq', 1, false);
ALTER TABLE ONLY active_admin_comments ALTER COLUMN id SET DEFAULT nextval('active_admin_comments_id_seq'::regclass);

View File

@ -0,0 +1,9 @@
CREATE TABLE jam_track_sessions (
id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(),
jam_track_id VARCHAR(64) NOT NULL REFERENCES jam_tracks(id) ON DELETE CASCADE,
session_type VARCHAR(10) NOT NULL,
music_session_id VARCHAR(64) REFERENCES music_sessions(id) ON DELETE SET NULL,
user_id VARCHAR(64) NOT NULL REFERENCES users(id),
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

View File

@ -256,6 +256,7 @@ require "jam_ruby/models/jam_track_search"
require "jam_ruby/models/gift_card"
require "jam_ruby/models/gift_card_purchase"
require "jam_ruby/models/gift_card_type"
require "jam_ruby/models/jam_track_session"
include Jampb

View File

@ -20,6 +20,14 @@ module JamRuby
subject: options[:subject])
end
def crash_alert(options)
mail(to: APP_CONFIG.email_crashes_alias,
from: APP_CONFIG.email_generic_from,
body: options[:body],
content_type: "text/plain",
subject: options[:subject])
end
def social(options)
mail(to: APP_CONFIG.email_social_alias,
from: APP_CONFIG.email_generic_from,

View File

@ -774,6 +774,8 @@ module JamRuby
self.opening_jam_track = true
self.save
self.opening_jam_track = false
JamTrackSession.create_session(jam_track, user, self.music_session) if jam_track && user
#self.tick_track_changes
end

View File

@ -73,6 +73,8 @@ module JamRuby
# VRFS-2916 jam_tracks.id is varchar: ADD
has_many :plays, :class_name => "JamRuby::PlayablePlay", :as => :playable, :dependent => :destroy
has_many :jam_track_session, :class_name => "JamRuby::JamTrackSession"
# when we know what JamTrack this refund is related to, these are associated
belongs_to :recurly_transactions, class_name: 'JamRuby::RecurlyTransactionWebHook'

View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
module JamRuby
class JamTrackSession < ActiveRecord::Base
BROWSER = 'browser'
SESSION = 'session'
TYPES = [BROWSER, SESSION]
@@log = Logging.logger[JamTrackSession]
belongs_to :music_session, class_name: 'JamRuby::MusicSession'
belongs_to :user, class_name: 'JamRuby::User'
belongs_to :jam_track, class_name: 'JamRuby::JamTrack'
def self.create_session(jam_track, user, music_session)
create(jam_track, user, SESSION, music_session)
end
def self.create_browser(jam_track, user)
create(jam_track, user, BROWSER, nil)
end
private
def self.create(jam_track, user, type, music_session)
jam_track_session = JamTrackSession.new
jam_track_session.jam_track = jam_track
jam_track_session.user = user
jam_track_session.session_type = type
jam_track_session.music_session = music_session
jam_track_session.save
jam_track_session
end
end
end

View File

@ -53,6 +53,7 @@ module JamRuby
has_many :invited_fans, :through => :fan_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver
has_many :rsvp_slots, :class_name => "JamRuby::RsvpSlot", :foreign_key => "music_session_id", :dependent => :destroy
has_many :music_notations, :class_name => "JamRuby::MusicNotation", :foreign_key => "music_session_id"
has_many :jam_track_session, :class_name => "JamRuby::JamTrackSession"
validates :genre, :presence => true
validates :description, :presence => true, :no_profanity => true

View File

@ -71,6 +71,8 @@ module JamRuby
def self.ios_purchase(current_user, jam_track, receipt)
current_user.redeem_free_credit
jam_track_right = JamRuby::JamTrackRight.find_or_create_by_user_id_and_jam_track_id(current_user.id, jam_track.id) do |jam_track_right|
jam_track_right.redeemed = false
jam_track_right.version = jam_track.version
@ -336,16 +338,9 @@ module JamRuby
# first, mark the free has_redeemable_jamtrack field if that's still true
# and if still they have more free things, then redeem the giftable_jamtracks
if shopping_cart.free?
if user.has_redeemable_jamtrack
User.where(id: current_user.id).update_all(has_redeemable_jamtrack: false)
current_user.has_redeemable_jamtrack = false
else
User.where(id: current_user.id).update_all(gifted_jamtracks: current_user.gifted_jamtracks - 1)
current_user.gifted_jamtracks = current_user.gifted_jamtracks - 1
end
current_user.redeem_free_credit
end
# this can't go in the block above, as it's here to fix bad subscription UUIDs in an update path
if jam_track_right.recurly_adjustment_uuid != recurly_adjustment_uuid
jam_track_right.recurly_adjustment_uuid = recurly_adjustment_uuid
@ -426,4 +421,4 @@ module JamRuby
WHERE sale_type = '#{JAMTRACK_SALE}'")
end
end
end
end

View File

@ -183,6 +183,8 @@ module JamRuby
has_one :musician_search, :class_name => 'JamRuby::MusicianSearch'
has_one :band_search, :class_name => 'JamRuby::BandSearch'
has_many :jam_track_session, :class_name => "JamRuby::JamTrackSession"
before_save :default_anonymous_names
before_save :create_remember_token, :if => :should_validate_password?
before_save :stringify_avatar_info , :if => :updating_avatar
@ -1740,6 +1742,22 @@ module JamRuby
false
end
end
def redeem_free_credit
yn = false
if self.has_redeemable_jamtrack
User.where(id: self.id).update_all(has_redeemable_jamtrack: false)
self.has_redeemable_jamtrack = false
yn = true
elsif 0 < self.gifted_jamtracks
User.where(id: self.id).update_all(gifted_jamtracks: self.gifted_jamtracks - 1)
self.gifted_jamtracks = self.gifted_jamtracks - 1
yn = true
end
yn
end
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64

View File

@ -15,6 +15,10 @@ def app_config
'alerts@jamkazam.com'
end
def email_crashes_alias
'clientcrash@jamkazam.com'
end
def email_recurly_notice
'recurly-alerts@jamkazam.com'
end

View File

@ -626,6 +626,12 @@ ApiUsersController < ApiController
logger.debug("crash_dump can read from url #{read_url}")
body = "Client crash for user #{current_user.email} (#{current_user.name})\n"
body << "Client type: #{@dump.client_type}"
body << "Client version: #{@dump.client_version}"
body << "Download at: #{read_url}\n"
body << "User admin url: #{current_user.admin_url}"
AdminMailer.crash_alert(subject: "Crash for #{@dump.client_type} #{current_user.email} (#{current_user.name})", body:body)
redirect_to write_url, status: 307
else
# we should store it here to aid in development, but we don't have to until someone wants the feature

View File

@ -33,6 +33,11 @@ class PopupsController < ApplicationController
@jamtrack_id = params[:jam_track_id]
@websocket = true
gon.jamtrack_id = @jamtrack_id
jam_track = JamTrack.find_by_id(@jamtrack_id)
JamTrackSession.create_browser(jam_track, current_user) if jam_track && current_user
render :layout => "minimal"
end

View File

@ -240,6 +240,7 @@ if defined?(Bundler)
config.num_packaging_nodes = 2
config.email_social_alias = 'social@jamkazam.com'
config.email_crashes_alias = 'clientcrash@jamkazam.com'
config.email_alerts_alias = 'alerts@jamkazam.com' # should be used for 'oh no' server down/service down sorts of emails
config.email_generic_from = 'nobody@jamkazam.com'
config.email_recurly_notice = 'recurly-alerts@jamkazam.com'

View File

@ -95,6 +95,7 @@ SampleApp::Application.configure do
config.video_available= ENV['VIDEO_AVAILABILITY'] || "full"
config.email_generic_from = 'nobody-dev@jamkazam.com'
config.email_alerts_alias = ENV['ALERT_EMAIL'] || 'alerts-dev@jamkazam.com'
config.email_crashes_alias = ENV['ALERT_EMAIL'] || 'clientcrash@jamkazam.com'
config.email_social_alias = ENV['ALERT_EMAIL'] || 'social-dev@jamkazam.com'
config.guard_against_fraud = true
config.guard_against_browser_fraud = false