mass refactor
This commit is contained in:
2
sql/add_looking_for.sql
Normal file
2
sql/add_looking_for.sql
Normal 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'));
|
||||
7
sql/add_missing_columns.sql
Normal file
7
sql/add_missing_columns.sql
Normal 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;
|
||||
4
sql/add_premium_columns.sql
Normal file
4
sql/add_premium_columns.sql
Normal 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
21
sql/add_updated_at.sql
Normal 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
73
sql/clear_database.sql
Normal 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
67
sql/recreate_tables.sql
Normal 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();
|
||||
Reference in New Issue
Block a user