|
|
|
|
|
CREATE TABLE IF NOT EXISTS public.users_bot_telegram ( |
|
|
id SERIAL PRIMARY KEY, |
|
|
telegram_id BIGINT NOT NULL, |
|
|
username VARCHAR(255), |
|
|
first_name VARCHAR(255), |
|
|
last_name VARCHAR(255), |
|
|
email VARCHAR(255) UNIQUE NOT NULL, |
|
|
password_hash VARCHAR(255) NOT NULL, |
|
|
language VARCHAR(10) NOT NULL DEFAULT 'en', |
|
|
role VARCHAR(10) NOT NULL DEFAULT 'user', |
|
|
balance DECIMAL(10, 2) NOT NULL DEFAULT 0, |
|
|
is_banned BOOLEAN NOT NULL DEFAULT false, |
|
|
last_login TIMESTAMPTZ, |
|
|
bot_id UUID REFERENCES public.bots(id) ON DELETE SET NULL, |
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
UNIQUE(telegram_id, bot_id) |
|
|
); |
|
|
|
|
|
COMMENT ON TABLE public.users_bot_telegram IS 'Stores Telegram user accounts and their associated data.'; |
|
|
|
|
|
|
|
|
ALTER TABLE public.users_bot_telegram ENABLE ROW LEVEL SECURITY; |
|
|
|
|
|
|
|
|
CREATE POLICY "Users can manage their own data." ON public.users_bot_telegram |
|
|
FOR ALL USING (true); |
|
|
|
|
|
|
|
|
CREATE TRIGGER update_users_bot_telegram_timestamp BEFORE UPDATE ON public.users_bot_telegram |
|
|
FOR EACH ROW EXECUTE FUNCTION update_timestamp(); |
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS public.transactions ( |
|
|
id SERIAL PRIMARY KEY, |
|
|
user_id INTEGER NOT NULL REFERENCES public.users_bot_telegram(id) ON DELETE CASCADE, |
|
|
agent_id INTEGER REFERENCES public.users_bot_telegram(id) ON DELETE SET NULL, |
|
|
type VARCHAR(20) NOT NULL, |
|
|
amount DECIMAL(10, 2) NOT NULL, |
|
|
reference_id VARCHAR(255), |
|
|
description TEXT, |
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
|
|
); |
|
|
|
|
|
COMMENT ON TABLE public.transactions IS 'Stores financial transactions for users.'; |
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS public.recharge_cards ( |
|
|
id SERIAL PRIMARY KEY, |
|
|
code VARCHAR(50) UNIQUE NOT NULL, |
|
|
amount DECIMAL(10, 2) NOT NULL, |
|
|
is_used BOOLEAN NOT NULL DEFAULT false, |
|
|
is_reusable BOOLEAN NOT NULL DEFAULT false, |
|
|
created_by INTEGER NOT NULL REFERENCES public.users_bot_telegram(id) ON DELETE CASCADE, |
|
|
used_by INTEGER REFERENCES public.users_bot_telegram(id) ON DELETE SET NULL, |
|
|
used_at TIMESTAMPTZ, |
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
expires_at TIMESTAMPTZ |
|
|
); |
|
|
|
|
|
COMMENT ON TABLE public.recharge_cards IS 'Stores recharge cards for user balance top-ups.'; |
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS public.phone_numbers ( |
|
|
id SERIAL PRIMARY KEY, |
|
|
user_id INTEGER NOT NULL REFERENCES public.users_bot_telegram(id) ON DELETE CASCADE, |
|
|
country_code VARCHAR(10) NOT NULL, |
|
|
service VARCHAR(50) NOT NULL, |
|
|
number VARCHAR(50) NOT NULL, |
|
|
price DECIMAL(10, 2) NOT NULL, |
|
|
status VARCHAR(20) NOT NULL DEFAULT 'pending', |
|
|
fivesim_id VARCHAR(50) NOT NULL, |
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
expires_at TIMESTAMPTZ |
|
|
); |
|
|
|
|
|
COMMENT ON TABLE public.phone_numbers IS 'Stores phone numbers acquired for verification services.'; |
|
|
|
|
|
|
|
|
CREATE TRIGGER update_phone_numbers_timestamp BEFORE UPDATE ON public.phone_numbers |
|
|
FOR EACH ROW EXECUTE FUNCTION update_timestamp(); |
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS public.sms_messages ( |
|
|
id SERIAL PRIMARY KEY, |
|
|
phone_number_id INTEGER NOT NULL REFERENCES public.phone_numbers(id) ON DELETE CASCADE, |
|
|
code VARCHAR(50) NOT NULL, |
|
|
text TEXT NOT NULL, |
|
|
received_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
is_delivered BOOLEAN NOT NULL DEFAULT false, |
|
|
delivered_at TIMESTAMPTZ |
|
|
); |
|
|
|
|
|
COMMENT ON TABLE public.sms_messages IS 'Stores SMS messages received for verification services.'; |
|
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS public.settings ( |
|
|
id SERIAL PRIMARY KEY, |
|
|
key VARCHAR(50) UNIQUE NOT NULL, |
|
|
value TEXT NOT NULL, |
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), |
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() |
|
|
); |
|
|
|
|
|
COMMENT ON TABLE public.settings IS 'Stores system configuration settings.'; |
|
|
|
|
|
|
|
|
CREATE TRIGGER update_settings_timestamp BEFORE UPDATE ON public.settings |
|
|
FOR EACH ROW EXECUTE FUNCTION update_timestamp(); |
|
|
|
|
|
|
|
|
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', |
|
|
|
|
|
|
|
|
fivesim_api_key VARCHAR(255), |
|
|
paypal_client_id VARCHAR(255), |
|
|
paypal_client_secret VARCHAR(255), |
|
|
crypto_wallet_address VARCHAR(255), |
|
|
admin_contact VARCHAR(255), |
|
|
|
|
|
|
|
|
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'; |
|
|
|
|
|
|
|
|
ALTER TABLE public.bots ENABLE ROW LEVEL SECURITY; |
|
|
|
|
|
|
|
|
CREATE TRIGGER update_bots_timestamp BEFORE UPDATE ON public.bots |
|
|
FOR EACH ROW EXECUTE FUNCTION update_timestamp(); |
|
|
|
|
|
|