mass refactor

This commit is contained in:
2025-09-18 08:31:14 +09:00
parent 856bf3ca2a
commit bdd7d0424f
58 changed files with 3009 additions and 291 deletions

2
sql/add_looking_for.sql Normal file
View File

@@ -0,0 +1,2 @@
-- Добавление колонки looking_for в таблицу profiles
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS looking_for VARCHAR(20) DEFAULT 'both' CHECK (looking_for IN ('male', 'female', 'both'));

View File

@@ -0,0 +1,7 @@
-- Добавление недостающих колонок в таблицу profiles
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS hobbies TEXT[];
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS religion VARCHAR(255);
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS dating_goal VARCHAR(50);
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS smoking VARCHAR(20) CHECK (smoking IS NULL OR smoking IN ('never', 'sometimes', 'regularly'));
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS drinking VARCHAR(20) CHECK (drinking IS NULL OR drinking IN ('never', 'sometimes', 'regularly'));
ALTER TABLE profiles ADD COLUMN IF NOT EXISTS has_kids BOOLEAN DEFAULT FALSE;

View File

@@ -0,0 +1,4 @@
-- Добавление колонок premium и premium_expires_at в таблицу users
ALTER TABLE users
ADD COLUMN IF NOT EXISTS premium BOOLEAN DEFAULT FALSE,
ADD COLUMN IF NOT EXISTS premium_expires_at TIMESTAMP;

21
sql/add_updated_at.sql Normal file
View File

@@ -0,0 +1,21 @@
-- Добавление колонки updated_at в таблицу users
ALTER TABLE users ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP;
-- Обновление триггера для автоматического обновления updated_at
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Проверка и создание триггера, если он не существует
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_trigger WHERE tgname = 'users_updated_at') THEN
CREATE TRIGGER users_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
END IF;
END$$;

73
sql/clear_database.sql Normal file
View File

@@ -0,0 +1,73 @@
-- Скрипт для полной очистки базы данных Telegram Tinder Bot
-- ВНИМАНИЕ: Этот скрипт удалит ВСЕ данные из базы данных!
-- Отключаем проверки внешних ключей для более быстрой очистки
SET session_replication_role = replica;
-- Очищаем все таблицы в правильном порядке (учитывая зависимости)
TRUNCATE TABLE messages CASCADE;
TRUNCATE TABLE matches CASCADE;
TRUNCATE TABLE swipes CASCADE;
TRUNCATE TABLE profile_views CASCADE;
TRUNCATE TABLE scheduled_notifications CASCADE;
TRUNCATE TABLE reports CASCADE;
TRUNCATE TABLE blocks CASCADE;
TRUNCATE TABLE user_sessions CASCADE;
TRUNCATE TABLE profiles CASCADE;
TRUNCATE TABLE users CASCADE;
-- Включаем обратно проверки внешних ключей
SET session_replication_role = DEFAULT;
-- Сбрасываем счетчики автоинкремента (если есть)
-- В данном случае используются UUID, поэтому это не нужно
-- Выводим статистику после очистки
SELECT
'users' as table_name,
COUNT(*) as rows_count
FROM users
UNION ALL
SELECT
'profiles' as table_name,
COUNT(*) as rows_count
FROM profiles
UNION ALL
SELECT
'matches' as table_name,
COUNT(*) as rows_count
FROM matches
UNION ALL
SELECT
'swipes' as table_name,
COUNT(*) as rows_count
FROM swipes
UNION ALL
SELECT
'messages' as table_name,
COUNT(*) as rows_count
FROM messages
UNION ALL
SELECT
'profile_views' as table_name,
COUNT(*) as rows_count
FROM profile_views
UNION ALL
SELECT
'scheduled_notifications' as table_name,
COUNT(*) as rows_count
FROM scheduled_notifications;
PRINT '✅ База данных успешно очищена!';

67
sql/recreate_tables.sql Normal file
View File

@@ -0,0 +1,67 @@
-- Сначала создаем таблицы заново
DROP TABLE IF EXISTS profiles CASCADE;
DROP TABLE IF EXISTS users CASCADE;
-- Users table
CREATE TABLE IF NOT EXISTS users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
telegram_id BIGINT UNIQUE NOT NULL,
username VARCHAR(255),
first_name VARCHAR(255),
last_name VARCHAR(255),
language_code VARCHAR(10) DEFAULT 'en',
is_premium BOOLEAN DEFAULT FALSE,
is_blocked BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- Profiles table
CREATE TABLE IF NOT EXISTS profiles (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL,
age INTEGER NOT NULL CHECK (age >= 18 AND age <= 100),
gender VARCHAR(20) NOT NULL CHECK (gender IN ('male', 'female', 'other')),
looking_for VARCHAR(20) NOT NULL CHECK (looking_for IN ('male', 'female', 'both')),
bio TEXT,
location VARCHAR(255),
latitude DECIMAL(10, 8),
longitude DECIMAL(11, 8),
photos TEXT[], -- Array of photo URLs/file IDs
interests TEXT[], -- Array of interests
hobbies TEXT[],
education VARCHAR(255),
occupation VARCHAR(255),
height INTEGER, -- in cm
religion VARCHAR(255),
dating_goal VARCHAR(50),
smoking VARCHAR(20) CHECK (smoking IN ('never', 'sometimes', 'regularly')),
drinking VARCHAR(20) CHECK (drinking IN ('never', 'sometimes', 'regularly')),
has_kids BOOLEAN DEFAULT FALSE,
relationship_type VARCHAR(30) CHECK (relationship_type IN ('casual', 'serious', 'friendship', 'anything')),
verification_status VARCHAR(20) DEFAULT 'unverified' CHECK (verification_status IN ('unverified', 'pending', 'verified')),
is_active BOOLEAN DEFAULT TRUE,
is_visible BOOLEAN DEFAULT TRUE,
last_active TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
UNIQUE(user_id)
);
-- Создаем тригеры для автоматического обновления updated_at
CREATE OR REPLACE FUNCTION update_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER users_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION update_updated_at();
CREATE TRIGGER profiles_updated_at
BEFORE UPDATE ON profiles
FOR EACH ROW EXECUTE FUNCTION update_updated_at();