Letschat / src /db /localSQLcreate.sql
HonzaH's picture
Upload 191 files
cdc96c8 verified
Raw
History Blame Contribute Delete
3.72 kB
-- Local DB schema for development
-- This script is intended for running against a local Postgres instance (psql, Docker, or Supabase local).
-- Differences from supabaseSQLcreate.sql:
-- * Does NOT reference auth.users schema (no Supabase auth dependency)
-- * Does NOT enable RLS or policies (local dev convenience)
-- * Keeps indexes and FK constraints for referential integrity
-- Drop existing tables if they exist (safe teardown for re-creating DB)
DROP TABLE IF EXISTS room_messages CASCADE;
DROP TABLE IF EXISTS logs CASCADE;
DROP TABLE IF EXISTS codes CASCADE;
DROP TABLE IF EXISTS users CASCADE;
DROP TABLE IF EXISTS rooms CASCADE;
-- Enable necessary extensions
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Rooms table
CREATE TABLE rooms (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name VARCHAR,
description VARCHAR(255),
status INTEGER DEFAULT 1,
date_created TIMESTAMP DEFAULT NOW(),
date_last_message TIMESTAMP,
updated_at TIMESTAMP DEFAULT NOW(),
creator_id UUID
);
-- Users table (local development: generate id locally)
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR UNIQUE NOT NULL,
token VARCHAR UNIQUE NOT NULL DEFAULT gen_random_uuid()::text,
status INTEGER DEFAULT 1,
fname VARCHAR NOT NULL,
sname VARCHAR NOT NULL,
sex INTEGER,
nickname VARCHAR,
birth_date DATE,
photo_url VARCHAR,
lang VARCHAR DEFAULT 'cs',
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
-- Codes table
CREATE TABLE codes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
code VARCHAR(5) UNIQUE NOT NULL,
linked_to UUID,
used INTEGER,
user_id UUID,
room_id UUID,
pin_hash VARCHAR,
session_hash VARCHAR,
date_first TIMESTAMP,
date_last TIMESTAMP,
used_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT NOW()
);
-- Room messages table
CREATE TABLE room_messages (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
room_id UUID,
code_id UUID,
user_id UUID,
content TEXT NOT NULL,
image_url VARCHAR,
created_at TIMESTAMP DEFAULT NOW()
);
-- Logs table (local)
CREATE TABLE logs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
created_at TIMESTAMP DEFAULT NOW(),
lang VARCHAR,
ip VARCHAR,
user_agent VARCHAR,
module VARCHAR,
operation VARCHAR,
data JSONB,
error TEXT,
level VARCHAR
);
-- Create indexes
CREATE INDEX idx_codes_code ON codes(code);
CREATE INDEX idx_codes_used ON codes(used);
CREATE INDEX idx_codes_room_id ON codes(room_id);
CREATE INDEX idx_room_messages_room_id ON room_messages(room_id);
CREATE INDEX idx_room_messages_created_at ON room_messages(created_at);
CREATE INDEX idx_logs_created_at ON logs(created_at);
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_status ON users(status);
-- Add foreign key constraints
ALTER TABLE codes
ADD CONSTRAINT fk_codes_linked_to FOREIGN KEY (linked_to) REFERENCES codes(id);
ALTER TABLE codes
ADD CONSTRAINT fk_codes_user FOREIGN KEY (user_id) REFERENCES users(id);
ALTER TABLE codes
ADD CONSTRAINT fk_codes_room FOREIGN KEY (room_id) REFERENCES rooms(id);
ALTER TABLE room_messages
ADD CONSTRAINT fk_room_messages_room FOREIGN KEY (room_id) REFERENCES rooms(id) ON DELETE CASCADE;
ALTER TABLE room_messages
ADD CONSTRAINT fk_room_messages_code FOREIGN KEY (code_id) REFERENCES codes(id);
ALTER TABLE room_messages
ADD CONSTRAINT fk_room_messages_user FOREIGN KEY (user_id) REFERENCES users(id);
-- Make creator relation explicit
ALTER TABLE rooms
ADD CONSTRAINT fk_rooms_creator FOREIGN KEY (creator_id) REFERENCES users(id);