Mohammed Foud
all
959b027
-- users_bot_telegram table
CREATE TABLE IF NOT EXISTS public.users_bot_telegram (
id SERIAL PRIMARY KEY, -- Auto-incrementing primary key
telegram_id BIGINT NOT NULL, -- Telegram user ID (not unique)
username VARCHAR(255), -- Telegram username
first_name VARCHAR(255), -- User's first name
last_name VARCHAR(255), -- User's last name
email VARCHAR(255) UNIQUE NOT NULL, -- User's email address
password_hash VARCHAR(255) NOT NULL, -- Hashed password for authentication
language VARCHAR(10) NOT NULL DEFAULT 'en', -- User's preferred language
role VARCHAR(10) NOT NULL DEFAULT 'user', -- User role (user/admin/etc.)
balance DECIMAL(10, 2) NOT NULL DEFAULT 0, -- User's account balance
is_banned BOOLEAN NOT NULL DEFAULT false, -- Whether the user is banned
last_login TIMESTAMPTZ, -- Timestamp of last login
bot_id UUID REFERENCES public.bots(id) ON DELETE SET NULL, -- Reference to associated bot
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- Timestamp when record was created
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- Timestamp when record was last updated
UNIQUE(telegram_id, bot_id) -- Composite unique constraint
);
COMMENT ON TABLE public.users_bot_telegram IS 'Stores Telegram user accounts and their associated data.';
-- Enable Row Level Security
ALTER TABLE public.users_bot_telegram ENABLE ROW LEVEL SECURITY;
-- Policies
CREATE POLICY "Users can manage their own data." ON public.users_bot_telegram
FOR ALL USING (true);
-- Trigger for updating timestamps
CREATE TRIGGER update_users_bot_telegram_timestamp BEFORE UPDATE ON public.users_bot_telegram
FOR EACH ROW EXECUTE FUNCTION update_timestamp();
-- Transactions table
CREATE TABLE IF NOT EXISTS public.transactions (
id SERIAL PRIMARY KEY, -- Auto-incrementing primary key
user_id INTEGER NOT NULL REFERENCES public.users_bot_telegram(id) ON DELETE CASCADE, -- Reference to user
agent_id INTEGER REFERENCES public.users_bot_telegram(id) ON DELETE SET NULL, -- Reference to agent who processed transaction
type VARCHAR(20) NOT NULL, -- Type of transaction (deposit/withdrawal/etc.)
amount DECIMAL(10, 2) NOT NULL, -- Transaction amount
reference_id VARCHAR(255), -- External reference ID
description TEXT, -- Transaction description
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() -- Timestamp when transaction was created
);
COMMENT ON TABLE public.transactions IS 'Stores financial transactions for users.';
-- Recharge cards table
CREATE TABLE IF NOT EXISTS public.recharge_cards (
id SERIAL PRIMARY KEY, -- Auto-incrementing primary key
code VARCHAR(50) UNIQUE NOT NULL, -- Unique card code
amount DECIMAL(10, 2) NOT NULL, -- Card value amount
is_used BOOLEAN NOT NULL DEFAULT false, -- Whether card has been used
is_reusable BOOLEAN NOT NULL DEFAULT false, -- Whether card can be reused
created_by INTEGER NOT NULL REFERENCES public.users_bot_telegram(id) ON DELETE CASCADE, -- Who created the card
used_by INTEGER REFERENCES public.users_bot_telegram(id) ON DELETE SET NULL, -- Who used the card
used_at TIMESTAMPTZ, -- When card was used
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- When card was created
expires_at TIMESTAMPTZ -- When card expires
);
COMMENT ON TABLE public.recharge_cards IS 'Stores recharge cards for user balance top-ups.';
-- Phone numbers table
CREATE TABLE IF NOT EXISTS public.phone_numbers (
id SERIAL PRIMARY KEY, -- Auto-incrementing primary key
user_id INTEGER NOT NULL REFERENCES public.users_bot_telegram(id) ON DELETE CASCADE, -- Owner of the number
country_code VARCHAR(10) NOT NULL, -- Country code for number
service VARCHAR(50) NOT NULL, -- Service the number is for
number VARCHAR(50) NOT NULL, -- Phone number
price DECIMAL(10, 2) NOT NULL, -- Cost of the number
status VARCHAR(20) NOT NULL DEFAULT 'pending', -- Current status of number
fivesim_id VARCHAR(50) NOT NULL, -- Reference to 5sim.net ID
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- When number was acquired
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- When number was last updated
expires_at TIMESTAMPTZ -- When number expires
);
COMMENT ON TABLE public.phone_numbers IS 'Stores phone numbers acquired for verification services.';
-- Trigger for updating timestamps
CREATE TRIGGER update_phone_numbers_timestamp BEFORE UPDATE ON public.phone_numbers
FOR EACH ROW EXECUTE FUNCTION update_timestamp();
-- SMS messages table
CREATE TABLE IF NOT EXISTS public.sms_messages (
id SERIAL PRIMARY KEY, -- Auto-incrementing primary key
phone_number_id INTEGER NOT NULL REFERENCES public.phone_numbers(id) ON DELETE CASCADE, -- Associated phone number
code VARCHAR(50) NOT NULL, -- Verification code from SMS
text TEXT NOT NULL, -- Full SMS text
received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- When SMS was received
is_delivered BOOLEAN NOT NULL DEFAULT false, -- Whether SMS was delivered to user
delivered_at TIMESTAMPTZ -- When SMS was delivered to user
);
COMMENT ON TABLE public.sms_messages IS 'Stores SMS messages received for verification services.';
-- Settings table
CREATE TABLE IF NOT EXISTS public.settings (
id SERIAL PRIMARY KEY, -- Auto-incrementing primary key
key VARCHAR(50) UNIQUE NOT NULL, -- Setting key
value TEXT NOT NULL, -- Setting value
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), -- When setting was created
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() -- When setting was last updated
);
COMMENT ON TABLE public.settings IS 'Stores system configuration settings.';
-- Trigger for updating timestamps
CREATE TRIGGER update_settings_timestamp BEFORE UPDATE ON public.settings
FOR EACH ROW EXECUTE FUNCTION update_timestamp();
-- Add bots table if it doesn't exist
CREATE TABLE IF NOT EXISTS public.bots (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR(255) NOT NULL,
user_id UUID NOT NULL,
bot_token VARCHAR(255) NOT NULL UNIQUE,
is_active BOOLEAN NOT NULL DEFAULT true,
currency VARCHAR(10) NOT NULL DEFAULT 'USD',
profit_type VARCHAR(10) NOT NULL DEFAULT 'percentage',
profit_value_percentage DECIMAL(5,2) DEFAULT 0,
profit_value_fix DECIMAL(10,2) DEFAULT 0,
last_activity TIMESTAMPTZ,
version VARCHAR(20) NOT NULL DEFAULT '1.0.0',
-- API Keys and External Service Configuration
fivesim_api_key VARCHAR(255),
paypal_client_id VARCHAR(255),
paypal_client_secret VARCHAR(255),
crypto_wallet_address VARCHAR(255),
admin_contact VARCHAR(255),
-- Group Join Settings
join_group_required BOOLEAN DEFAULT false,
group_channel_username VARCHAR(255),
settings JSONB DEFAULT '{}',
state JSONB DEFAULT '{}',
suffix_email VARCHAR(255) DEFAULT 'saerosms.com',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
COMMENT ON TABLE public.bots IS 'Stores bot configurations and settings';
-- Enable Row Level Security
ALTER TABLE public.bots ENABLE ROW LEVEL SECURITY;
-- Trigger for updating timestamps
CREATE TRIGGER update_bots_timestamp BEFORE UPDATE ON public.bots
FOR EACH ROW EXECUTE FUNCTION update_timestamp();