41 lines
1.8 KiB
SQL
41 lines
1.8 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 referral_codes (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
referral_code VARCHAR(10) NOT NULL UNIQUE,
|
|
referrer_id BIGINT NOT NULL UNIQUE REFERENCES users (id),
|
|
company_id BIGINT NOT NULL REFERENCES companies (id),
|
|
is_active BOOLEAN NOT NULL DEFAULT true,
|
|
number_of_referrals BIGINT NOT NULL,
|
|
reward_amount BIGINT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT reward_amount_positive CHECK (reward_amount >= 0)
|
|
);
|
|
CREATE INDEX idx_referrals_referrer_id ON referrals (referrer_id);
|
|
CREATE INDEX idx_referrals_status ON referrals (status);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_referrals (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
referred_id BIGINT UNIQUE NOT NULL REFERENCES users (id),
|
|
referral_code_id BIGINT NOT NULL REFERENCES referral_codes (id),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|