-- Сначала создаем таблицы заново 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();