31 lines
1.3 KiB
MySQL
31 lines
1.3 KiB
MySQL
|
|
-- Migration: Create rooms table for chat
|
||
|
|
-- Description: Chat rooms for real-time messaging
|
||
|
|
|
||
|
|
CREATE TABLE IF NOT EXISTS rooms (
|
||
|
|
id BIGSERIAL PRIMARY KEY,
|
||
|
|
name VARCHAR(255) NOT NULL,
|
||
|
|
description TEXT,
|
||
|
|
room_type VARCHAR(50) NOT NULL DEFAULT 'public', -- 'public', 'private', 'direct'
|
||
|
|
creator_id BIGINT NOT NULL,
|
||
|
|
is_active BOOLEAN DEFAULT true,
|
||
|
|
max_members INTEGER DEFAULT 100,
|
||
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
deleted_at TIMESTAMP WITH TIME ZONE,
|
||
|
|
|
||
|
|
CONSTRAINT fk_rooms_creator_id FOREIGN KEY (creator_id) REFERENCES users(id) ON DELETE CASCADE
|
||
|
|
);
|
||
|
|
|
||
|
|
-- Indexes
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_rooms_creator_id ON rooms(creator_id);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_rooms_room_type ON rooms(room_type);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_rooms_is_active ON rooms(is_active) WHERE deleted_at IS NULL;
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_rooms_deleted_at ON rooms(deleted_at);
|
||
|
|
CREATE INDEX IF NOT EXISTS idx_rooms_created_at ON rooms(created_at DESC);
|
||
|
|
|
||
|
|
-- Comments
|
||
|
|
COMMENT ON TABLE rooms IS 'Chat rooms for real-time messaging';
|
||
|
|
COMMENT ON COLUMN rooms.room_type IS 'Type of room: public, private, or direct';
|
||
|
|
COMMENT ON COLUMN rooms.max_members IS 'Maximum number of members allowed in the room';
|
||
|
|
|