Create new transaction log table to track user conversions
This commit is contained in:
@@ -12,6 +12,7 @@ module Admin
|
|||||||
sanitize_params!
|
sanitize_params!
|
||||||
@user.level = params[:user][:level]
|
@user.level = params[:user][:level]
|
||||||
@user.inviter_id = CurrentUser.id
|
@user.inviter_id = CurrentUser.id
|
||||||
|
TransactionLogItem.record_account_upgrade(@user)
|
||||||
@user.save
|
@user.save
|
||||||
redirect_to edit_admin_user_path(@user), :notice => "User updated"
|
redirect_to edit_admin_user_path(@user), :notice => "User updated"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -59,6 +59,12 @@ class UsersController < ApplicationController
|
|||||||
respond_with(@user)
|
respond_with(@user)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def upgrade_information
|
||||||
|
unless CurrentUser.user.is_anonymous?
|
||||||
|
TransactionLogItem.record_account_upgrade_view(CurrentUser.user, request.referer)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def upgrade
|
def upgrade
|
||||||
@user = User.find(params[:id])
|
@user = User.find(params[:id])
|
||||||
|
|
||||||
|
|||||||
27
app/models/transaction_log_item.rb
Normal file
27
app/models/transaction_log_item.rb
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
class TransactionLogItem < ActiveRecord::Base
|
||||||
|
attr_accessible :category, :data, :user_id
|
||||||
|
validates_inclusion_of :category, :in => %w(
|
||||||
|
account_upgrade_basic_to_gold
|
||||||
|
account_upgrade_basic_to_platinum
|
||||||
|
account_upgrade_gold_to_platinum
|
||||||
|
account_upgrade_view
|
||||||
|
)
|
||||||
|
|
||||||
|
def self.record_account_upgrade_view(user, referrer)
|
||||||
|
create(:category => "account_upgrade_view", :user_id => user.id, :data => referrer)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.record_account_upgrade(user)
|
||||||
|
attributes = {:user_id => user.id}
|
||||||
|
|
||||||
|
if user.level_was < User::Levels::PLATINUM && user.level == User::Levels::PLATINUM
|
||||||
|
attributes[:category] = "account_upgrade_gold_to_platinum"
|
||||||
|
elsif user.level_was < User::Levels::GOLD && user.level == User::Levels::GOLD
|
||||||
|
attributes[:category] = "account_upgrade_basic_to_gold"
|
||||||
|
elsif user.level_was < User::Levels::GOLD && user.level == User::Levels::PLATINUM
|
||||||
|
attributes[:category] = "account_upgrade_basic_to_platinum"
|
||||||
|
end
|
||||||
|
|
||||||
|
create(attributes)
|
||||||
|
end
|
||||||
|
end
|
||||||
14
db/migrate/20140204233337_create_transaction_log_items.rb
Normal file
14
db/migrate/20140204233337_create_transaction_log_items.rb
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
class CreateTransactionLogItems < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
create_table :transaction_log_items do |t|
|
||||||
|
t.string :category
|
||||||
|
t.integer :user_id
|
||||||
|
t.text :data
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
|
||||||
|
add_index :transaction_log_items, :user_id
|
||||||
|
add_index :transaction_log_items, :created_at
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -2586,6 +2586,39 @@ CREATE SEQUENCE tags_id_seq
|
|||||||
ALTER SEQUENCE tags_id_seq OWNED BY tags.id;
|
ALTER SEQUENCE tags_id_seq OWNED BY tags.id;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: transaction_log_items; Type: TABLE; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE TABLE transaction_log_items (
|
||||||
|
id integer NOT NULL,
|
||||||
|
category character varying(255),
|
||||||
|
user_id integer,
|
||||||
|
data text,
|
||||||
|
created_at timestamp without time zone NOT NULL,
|
||||||
|
updated_at timestamp without time zone NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: transaction_log_items_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE SEQUENCE transaction_log_items_id_seq
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 1
|
||||||
|
NO MAXVALUE
|
||||||
|
NO MINVALUE
|
||||||
|
CACHE 1;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: transaction_log_items_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER SEQUENCE transaction_log_items_id_seq OWNED BY transaction_log_items.id;
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: uploads; Type: TABLE; Schema: public; Owner: -; Tablespace:
|
-- Name: uploads; Type: TABLE; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
@@ -3812,6 +3845,13 @@ ALTER TABLE ONLY tag_subscriptions ALTER COLUMN id SET DEFAULT nextval('tag_subs
|
|||||||
ALTER TABLE ONLY tags ALTER COLUMN id SET DEFAULT nextval('tags_id_seq'::regclass);
|
ALTER TABLE ONLY tags ALTER COLUMN id SET DEFAULT nextval('tags_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY transaction_log_items ALTER COLUMN id SET DEFAULT nextval('transaction_log_items_id_seq'::regclass);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
|
-- Name: id; Type: DEFAULT; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
@@ -4141,6 +4181,14 @@ ALTER TABLE ONLY tags
|
|||||||
ADD CONSTRAINT tags_pkey PRIMARY KEY (id);
|
ADD CONSTRAINT tags_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: transaction_log_items_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
ALTER TABLE ONLY transaction_log_items
|
||||||
|
ADD CONSTRAINT transaction_log_items_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: uploads_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
|
-- Name: uploads_pkey; Type: CONSTRAINT; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
@@ -6220,6 +6268,20 @@ CREATE UNIQUE INDEX index_tags_on_name ON tags USING btree (name);
|
|||||||
CREATE INDEX index_tags_on_name_pattern ON tags USING btree (name text_pattern_ops);
|
CREATE INDEX index_tags_on_name_pattern ON tags USING btree (name text_pattern_ops);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: index_transaction_log_items_on_created_at; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE INDEX index_transaction_log_items_on_created_at ON transaction_log_items USING btree (created_at);
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: index_transaction_log_items_on_user_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE INDEX index_transaction_log_items_on_user_id ON transaction_log_items USING btree (user_id);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: index_uploads_on_uploader_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
-- Name: index_uploads_on_uploader_id; Type: INDEX; Schema: public; Owner: -; Tablespace:
|
||||||
--
|
--
|
||||||
@@ -6572,4 +6634,6 @@ INSERT INTO schema_migrations (version) VALUES ('20131225002748');
|
|||||||
|
|
||||||
INSERT INTO schema_migrations (version) VALUES ('20131228230219');
|
INSERT INTO schema_migrations (version) VALUES ('20131228230219');
|
||||||
|
|
||||||
INSERT INTO schema_migrations (version) VALUES ('20140111191413');
|
INSERT INTO schema_migrations (version) VALUES ('20140111191413');
|
||||||
|
|
||||||
|
INSERT INTO schema_migrations (version) VALUES ('20140204233337');
|
||||||
9
test/fixtures/transaction_log_items.yml
vendored
Normal file
9
test/fixtures/transaction_log_items.yml
vendored
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
||||||
|
|
||||||
|
one:
|
||||||
|
category: MyString
|
||||||
|
data: MyText
|
||||||
|
|
||||||
|
two:
|
||||||
|
category: MyString
|
||||||
|
data: MyText
|
||||||
28
test/unit/transaction_log_item_test.rb
Normal file
28
test/unit/transaction_log_item_test.rb
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
require 'test_helper'
|
||||||
|
|
||||||
|
class TransactionLogItemTest < ActiveSupport::TestCase
|
||||||
|
setup do
|
||||||
|
@user = FactoryGirl.create(:user)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Promoting a user" do
|
||||||
|
should "create a new line item in the transaction log" do
|
||||||
|
@user.level = User::Levels::GOLD
|
||||||
|
assert_difference("TransactionLogItem.count", 1) do
|
||||||
|
TransactionLogItem.record_account_upgrade(@user)
|
||||||
|
end
|
||||||
|
|
||||||
|
item = TransactionLogItem.last
|
||||||
|
assert_equal(@user.id, item.user_id)
|
||||||
|
assert_equal("account_upgrade_basic_to_gold", item.category)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "Viewing the account upgrade page" do
|
||||||
|
should "create a new line item in the transaction log" do
|
||||||
|
assert_difference("TransactionLogItem.count", 1) do
|
||||||
|
TransactionLogItem.record_account_upgrade_view(@user, "xxx")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user