132 lines
5.0 KiB
MySQL
132 lines
5.0 KiB
MySQL
|
|
CREATE TABLE affiliate_legalese (
|
||
|
|
id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
legalese TEXT,
|
||
|
|
version INTEGER NOT NULL DEFAULT 1,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
ALTER TABLE users DROP CONSTRAINT users_affiliate_referral_id_fkey;
|
||
|
|
ALTER TABLE users DROP COLUMN affiliate_referral_id;
|
||
|
|
DROP TABLE affiliate_partners;
|
||
|
|
|
||
|
|
CREATE TABLE affiliate_partners (
|
||
|
|
id INTEGER PRIMARY KEY,
|
||
|
|
partner_name VARCHAR(1000),
|
||
|
|
partner_user_id VARCHAR(64) REFERENCES users(id) ON DELETE SET NULL,
|
||
|
|
entity_type VARCHAR(64),
|
||
|
|
legalese_id VARCHAR(64),
|
||
|
|
signed_at TIMESTAMP,
|
||
|
|
last_paid_at TIMESTAMP,
|
||
|
|
address JSON NOT NULL DEFAULT '{}',
|
||
|
|
tax_identifier VARCHAR(1000),
|
||
|
|
referral_user_count INTEGER NOT NULL DEFAULT 0,
|
||
|
|
cumulative_earnings_in_cents INTEGER NOT NULL DEFAULT 0,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
CREATE SEQUENCE partner_key_sequence;
|
||
|
|
ALTER SEQUENCE partner_key_sequence RESTART WITH 10000;
|
||
|
|
ALTER TABLE affiliate_partners ALTER COLUMN id SET DEFAULT nextval('partner_key_sequence');;
|
||
|
|
|
||
|
|
ALTER TABLE users ADD COLUMN affiliate_referral_id INTEGER REFERENCES affiliate_partners(id) ON DELETE SET NULL;
|
||
|
|
CREATE INDEX affiliate_partners_legalese_idx ON affiliate_partners(legalese_id);
|
||
|
|
|
||
|
|
CREATE UNLOGGED TABLE affiliate_referral_visits (
|
||
|
|
id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
affiliate_partner_id INTEGER NOT NULL,
|
||
|
|
ip_address VARCHAR NOT NULL,
|
||
|
|
visited_url VARCHAR,
|
||
|
|
referral_url VARCHAR,
|
||
|
|
first_visit BOOLEAN NOT NULL DEFAULT TRUE,
|
||
|
|
user_id VARCHAR(64),
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX on affiliate_referral_visits (affiliate_partner_id, created_at);
|
||
|
|
|
||
|
|
CREATE TABLE affiliate_quarterly_payments (
|
||
|
|
id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
quarter INTEGER NOT NULL,
|
||
|
|
year INTEGER NOT NULL,
|
||
|
|
affiliate_partner_id INTEGER NOT NULL REFERENCES affiliate_partners(id),
|
||
|
|
due_amount_in_cents INTEGER NOT NULL DEFAULT 0,
|
||
|
|
paid BOOLEAN NOT NULL DEFAULT FALSE,
|
||
|
|
closed BOOLEAN NOT NULL DEFAULT FALSE,
|
||
|
|
jamtracks_sold INTEGER NOT NULL DEFAULT 0,
|
||
|
|
closed_at TIMESTAMP,
|
||
|
|
paid_at TIMESTAMP,
|
||
|
|
last_updated TIMESTAMP,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
|
||
|
|
CREATE TABLE affiliate_monthly_payments (
|
||
|
|
id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
month INTEGER NOT NULL,
|
||
|
|
year INTEGER NOT NULL,
|
||
|
|
affiliate_partner_id INTEGER NOT NULL REFERENCES affiliate_partners(id),
|
||
|
|
due_amount_in_cents INTEGER NOT NULL DEFAULT 0,
|
||
|
|
closed BOOLEAN NOT NULL DEFAULT FALSE,
|
||
|
|
jamtracks_sold INTEGER NOT NULL DEFAULT 0,
|
||
|
|
closed_at TIMESTAMP,
|
||
|
|
last_updated TIMESTAMP,
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
|
||
|
|
CREATE INDEX ON affiliate_quarterly_payments (affiliate_partner_id, year, quarter);
|
||
|
|
CREATE UNIQUE INDEX ON affiliate_quarterly_payments (year, quarter, affiliate_partner_id);
|
||
|
|
CREATE UNIQUE INDEX ON affiliate_monthly_payments (year, month, affiliate_partner_id);
|
||
|
|
CREATE INDEX ON affiliate_monthly_payments (affiliate_partner_id, year, month);
|
||
|
|
|
||
|
|
|
||
|
|
ALTER TABLE sale_line_items ADD COLUMN affiliate_referral_id INTEGER REFERENCES affiliate_partners(id);
|
||
|
|
ALTER TABLE sale_line_items ADD COLUMN affiliate_referral_fee_in_cents INTEGER;
|
||
|
|
ALTER TABLE sale_line_items ADD COLUMN affiliate_refunded BOOLEAN NOT NULL DEFAULT FALSE;
|
||
|
|
ALTER TABLE sale_line_items ADD COLUMN affiliate_refunded_at TIMESTAMP;
|
||
|
|
ALTER TABLE generic_state ADD COLUMN affiliate_tallied_at TIMESTAMP;
|
||
|
|
|
||
|
|
CREATE TABLE affiliate_traffic_totals (
|
||
|
|
day DATE NOT NULL,
|
||
|
|
signups INTEGER NOT NULL DEFAULT 0,
|
||
|
|
visits INTEGER NOT NULL DEFAULT 0,
|
||
|
|
affiliate_partner_id INTEGER NOT NULL REFERENCES affiliate_partners(id),
|
||
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE UNIQUE INDEX ON affiliate_traffic_totals (day, affiliate_partner_id);
|
||
|
|
CREATE INDEX ON affiliate_traffic_totals (affiliate_partner_id, day);
|
||
|
|
|
||
|
|
CREATE VIEW affiliate_payments AS
|
||
|
|
SELECT id AS monthly_id,
|
||
|
|
CAST(NULL as VARCHAR) AS quarterly_id,
|
||
|
|
affiliate_partner_id,
|
||
|
|
due_amount_in_cents,
|
||
|
|
jamtracks_sold,
|
||
|
|
created_at,
|
||
|
|
closed,
|
||
|
|
CAST(NULL AS BOOLEAN) AS paid,
|
||
|
|
year,
|
||
|
|
month as month,
|
||
|
|
CAST(NULL AS INTEGER) as quarter,
|
||
|
|
month as time_sort,
|
||
|
|
'monthly' AS payment_type
|
||
|
|
FROM affiliate_monthly_payments
|
||
|
|
UNION ALL
|
||
|
|
SELECT CAST(NULL as VARCHAR) AS monthly_id,
|
||
|
|
id AS quarterly_id,
|
||
|
|
affiliate_partner_id,
|
||
|
|
due_amount_in_cents,
|
||
|
|
jamtracks_sold,
|
||
|
|
created_at,
|
||
|
|
closed,
|
||
|
|
paid,
|
||
|
|
year,
|
||
|
|
CAST(NULL AS INTEGER) as month,
|
||
|
|
quarter,
|
||
|
|
(quarter * 3) + 3 as time_sort,
|
||
|
|
'quarterly' AS payment_type
|
||
|
|
FROM affiliate_quarterly_payments;
|