46 lines
2.3 KiB
SQL
46 lines
2.3 KiB
SQL
CREATE TYPE ReferralStatus AS ENUM ('PENDING', 'COMPLETED', 'EXPIRED', 'CANCELLED');
|
|
CREATE TABLE IF NOT EXISTS referral_settings (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
referral_reward_amount DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
|
|
cashback_percentage DECIMAL(5, 2) NOT NULL DEFAULT 0.00,
|
|
bet_referral_bonus_percentage NUMERIC DEFAULT 5.0,
|
|
max_referrals INTEGER NOT NULL DEFAULT 0,
|
|
expires_after_days INTEGER NOT NULL DEFAULT 30,
|
|
updated_by VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
version INTEGER NOT NULL DEFAULT 0,
|
|
CONSTRAINT referral_reward_amount_positive CHECK (referral_reward_amount >= 0),
|
|
CONSTRAINT cashback_percentage_range CHECK (
|
|
cashback_percentage >= 0
|
|
AND cashback_percentage <= 100
|
|
)
|
|
);
|
|
CREATE TABLE IF NOT EXISTS referrals (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
referral_code VARCHAR(10) NOT NULL UNIQUE,
|
|
referrer_id VARCHAR(255) NOT NULL,
|
|
referred_id VARCHAR(255) UNIQUE,
|
|
status ReferralStatus NOT NULL DEFAULT 'PENDING',
|
|
reward_amount DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
|
|
cashback_amount DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
expires_at TIMESTAMPTZ NOT NULL,
|
|
-- FOREIGN KEY (referrer_id) REFERENCES users (id),
|
|
-- FOREIGN KEY (referred_id) REFERENCES users (id),
|
|
CONSTRAINT reward_amount_positive CHECK (reward_amount >= 0),
|
|
CONSTRAINT cashback_amount_positive CHECK (cashback_amount >= 0)
|
|
);
|
|
CREATE INDEX idx_referrals_referral_code ON referrals (referral_code);
|
|
CREATE INDEX idx_referrals_referrer_id ON referrals (referrer_id);
|
|
CREATE INDEX idx_referrals_status ON referrals (status);
|
|
ALTER TABLE users
|
|
ADD COLUMN IF NOT EXISTS referral_code VARCHAR(10) UNIQUE,
|
|
ADD COLUMN IF NOT EXISTS referred_by VARCHAR(10);
|
|
-- Modify wallet table to track bonus money separately
|
|
ALTER TABLE wallets
|
|
ADD COLUMN IF NOT EXISTS bonus_balance DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
|
|
ADD COLUMN IF NOT EXISTS cash_balance DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
|
|
ADD CONSTRAINT bonus_balance_positive CHECK (bonus_balance >= 0),
|
|
ADD CONSTRAINT cash_balance_positive CHECK (cash_balance >= 0); |