strenger-chat / schema_pg.sql
prince1604
feat: implement real-time direct messaging, recent chats inbox, and last_seen tracking
d57862a
Raw
History Blame Contribute Delete
2.04 kB
-- StrengerChat Pro - Postgres Database Schema (Final Stable Version)
-- Optimized for PostgreSQL 14+
-- 1. Users Table
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
gender VARCHAR(10) NOT NULL,
avatar_type VARCHAR(10) DEFAULT 'default',
age INT,
bio TEXT,
is_premium BOOLEAN DEFAULT FALSE,
is_banned BOOLEAN DEFAULT FALSE,
banned_at TIMESTAMP,
ban_reason TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 2. Sessions & Geo-Location Table
CREATE TABLE IF NOT EXISTS active_sessions (
user_id INT PRIMARY KEY,
socket_id VARCHAR(100),
latitude FLOAT,
longitude FLOAT,
status VARCHAR(20) DEFAULT 'idle',
looking_for VARCHAR(10) DEFAULT 'both',
last_active TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_user_session FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
-- 3. Reports Table
CREATE TABLE IF NOT EXISTS reports (
id SERIAL PRIMARY KEY,
reporter_id INT,
reported_id INT,
reason TEXT,
status VARCHAR(20) DEFAULT 'pending', -- pending, dismissed, resolved
action_taken TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_reporter FOREIGN KEY (reporter_id) REFERENCES users(id) ON DELETE SET NULL,
CONSTRAINT fk_reported FOREIGN KEY (reported_id) REFERENCES users(id) ON DELETE CASCADE
);
-- 4. Direct Messages / Friends History Table
CREATE TABLE IF NOT EXISTS direct_messages (
id SERIAL PRIMARY KEY,
sender_id INT,
receiver_id INT,
message TEXT NOT NULL,
is_read BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_dm_sender FOREIGN KEY (sender_id) REFERENCES users(id) ON DELETE CASCADE,
CONSTRAINT fk_dm_receiver FOREIGN KEY (receiver_id) REFERENCES users(id) ON DELETE CASCADE
);
ALTER TABLE users ADD COLUMN IF NOT EXISTS last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP;