Spaces:
Sleeping
Sleeping
prince1604
feat: implement real-time direct messaging, recent chats inbox, and last_seen tracking
d57862a | -- 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; | |