botserver/migrations/6.1.6-01-meet/up.sql

123 lines
4.9 KiB
MySQL
Raw Normal View History

2026-01-22 13:57:40 -03:00
-- Legacy Meet Tables extracted from consolidated
-- Core meetings table (if not exists from scheduled_meetings)
CREATE TABLE IF NOT EXISTS meetings (
2026-01-22 13:57:40 -03:00
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
scheduled_meeting_id UUID REFERENCES scheduled_meetings(id) ON DELETE SET NULL,
room_id UUID,
title VARCHAR(255) NOT NULL,
status VARCHAR(20) DEFAULT 'active',
started_at TIMESTAMPTZ DEFAULT NOW(),
ended_at TIMESTAMPTZ,
2026-01-22 13:57:40 -03:00
created_at TIMESTAMPTZ DEFAULT NOW(),
CONSTRAINT check_meeting_status CHECK (status IN ('active', 'ended', 'cancelled'))
2026-01-22 13:57:40 -03:00
);
CREATE INDEX IF NOT EXISTS idx_meetings_scheduled ON meetings(scheduled_meeting_id);
CREATE INDEX IF NOT EXISTS idx_meetings_status ON meetings(status);
-- Meeting recordings (legacy table already exists, skip creation)
-- Note: meeting_recordings table already exists from 6.0.23 migration with different schema
-- This migration creates additional meeting-related tables that reference the new meetings table
2026-01-22 13:57:40 -03:00
-- Breakout rooms
CREATE TABLE IF NOT EXISTS meeting_breakout_rooms (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
meeting_id UUID NOT NULL REFERENCES meetings(id) ON DELETE CASCADE,
2026-01-22 13:57:40 -03:00
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 REFERENCES meetings(id) ON DELETE CASCADE,
2026-01-22 13:57:40 -03:00
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 REFERENCES meetings(id) ON DELETE CASCADE,
2026-01-22 13:57:40 -03:00
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 REFERENCES meetings(id) ON DELETE CASCADE,
2026-01-22 13:57:40 -03:00
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 REFERENCES meetings(id) ON DELETE CASCADE,
2026-01-22 13:57:40 -03:00
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);