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