botserver/migrations/meet/6.1.6/up.sql
Rodrigo Rodriguez (Pragmatismo) b103c07248 Fix migration errors and reorganize migration files
- Fixed 'relation session_kb_associations does not exist' error in core consolidated migration.
- Renamed migration directories from timestamp-based to version-based (6.0.x, 6.1.x, 6.2.x).
- Reorganized migrations into dedicated feature folders (products, dashboards, learn, video).
- Updated migration execution order in core/shared/utils.rs.
- Moves legacy migrations to 6.0.x/6.1.x and workflow to 6.2.0.
2026-01-27 13:45:54 -03:00

125 lines
4.7 KiB
SQL

-- Legacy Meet Tables extracted from consolidated
-- Meeting recordings
CREATE TABLE IF NOT EXISTS meeting_recordings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL,
bot_id UUID NOT NULL REFERENCES bots(id) ON DELETE CASCADE,
recorded_by UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
file_path TEXT NOT NULL,
file_size BIGINT NOT NULL DEFAULT 0,
duration_seconds INTEGER,
format VARCHAR(20) DEFAULT 'mp4',
thumbnail_path TEXT,
transcription_path TEXT,
transcription_status VARCHAR(20) DEFAULT 'pending',
is_shared BOOLEAN DEFAULT false,
shared_with_json TEXT DEFAULT '[]',
retention_until TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT check_transcription_status CHECK (transcription_status IN ('pending', 'processing', 'completed', 'failed'))
);
CREATE INDEX IF NOT EXISTS idx_meeting_recordings_meeting ON meeting_recordings(meeting_id);
CREATE INDEX IF NOT EXISTS idx_meeting_recordings_bot ON meeting_recordings(bot_id);
-- Breakout rooms
CREATE TABLE IF NOT EXISTS meeting_breakout_rooms (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL,
name VARCHAR(100) NOT NULL,
room_number INTEGER NOT NULL,
participants_json TEXT DEFAULT '[]',
duration_minutes INTEGER,
started_at TIMESTAMPTZ,
ended_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_breakout_rooms_meeting ON meeting_breakout_rooms(meeting_id);
-- Meeting polls
CREATE TABLE IF NOT EXISTS meeting_polls (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL,
created_by UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
question TEXT NOT NULL,
poll_type VARCHAR(20) DEFAULT 'single',
options_json TEXT NOT NULL,
is_anonymous BOOLEAN DEFAULT false,
allow_multiple BOOLEAN DEFAULT false,
is_active BOOLEAN DEFAULT false,
results_json TEXT DEFAULT '{}',
created_at TIMESTAMPTZ DEFAULT NOW(),
closed_at TIMESTAMPTZ,
CONSTRAINT check_poll_type CHECK (poll_type IN ('single', 'multiple', 'open'))
);
CREATE INDEX IF NOT EXISTS idx_meeting_polls_meeting ON meeting_polls(meeting_id);
-- Meeting Q&A
CREATE TABLE IF NOT EXISTS meeting_questions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL,
asked_by UUID REFERENCES users(id) ON DELETE SET NULL,
question TEXT NOT NULL,
is_anonymous BOOLEAN DEFAULT false,
upvotes INTEGER DEFAULT 0,
is_answered BOOLEAN DEFAULT false,
answer TEXT,
answered_by UUID REFERENCES users(id) ON DELETE SET NULL,
answered_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_meeting_questions_meeting ON meeting_questions(meeting_id);
CREATE INDEX IF NOT EXISTS idx_meeting_questions_unanswered ON meeting_questions(meeting_id) WHERE is_answered = false;
-- Meeting waiting room
CREATE TABLE IF NOT EXISTS meeting_waiting_room (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL,
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
guest_name VARCHAR(255),
guest_email VARCHAR(255),
device_info_json TEXT DEFAULT '{}',
status VARCHAR(20) DEFAULT 'waiting',
admitted_by UUID REFERENCES users(id) ON DELETE SET NULL,
admitted_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT check_waiting_status CHECK (status IN ('waiting', 'admitted', 'rejected', 'left'))
);
CREATE INDEX IF NOT EXISTS idx_waiting_room_meeting ON meeting_waiting_room(meeting_id);
CREATE INDEX IF NOT EXISTS idx_waiting_room_status ON meeting_waiting_room(meeting_id, status);
-- Meeting live captions
CREATE TABLE IF NOT EXISTS meeting_captions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL,
speaker_id UUID REFERENCES users(id) ON DELETE SET NULL,
speaker_name VARCHAR(255),
caption_text TEXT NOT NULL,
language VARCHAR(10) DEFAULT 'en',
confidence REAL,
timestamp_ms BIGINT NOT NULL,
duration_ms INTEGER,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_meeting_captions_meeting ON meeting_captions(meeting_id, timestamp_ms);
-- Virtual backgrounds
CREATE TABLE IF NOT EXISTS user_virtual_backgrounds (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
name VARCHAR(100),
background_type VARCHAR(20) DEFAULT 'image',
file_path TEXT,
blur_intensity INTEGER,
is_default BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT check_bg_type CHECK (background_type IN ('image', 'blur', 'none'))
);
CREATE INDEX IF NOT EXISTS idx_virtual_backgrounds_user ON user_virtual_backgrounds(user_id);