AeThex-Connect/supabase/migrations/20260110140000_voice_video_calls.sql
MrPiglr de54903c15
new file: astro-site/src/components/auth/SupabaseLogin.jsx
new file:   astro-site/src/components/auth/SupabaseLogin.jsx
2026-02-03 09:09:36 +00:00

59 lines
2.7 KiB
PL/PgSQL

-- Phase 4: Voice/Video Calls Migration
-- WebRTC integration with TURN server support
-- Migration: 20260110140000
-- Extend calls table for voice/video call support
ALTER TABLE calls
ADD COLUMN IF NOT EXISTS type VARCHAR(20) DEFAULT 'voice', -- voice, video
ADD COLUMN IF NOT EXISTS sfu_room_id VARCHAR(100), -- For group calls (Mediasoup)
ADD COLUMN IF NOT EXISTS recording_url VARCHAR(500),
ADD COLUMN IF NOT EXISTS quality_stats JSONB;
-- Extend call_participants table for WebRTC stats
ALTER TABLE call_participants
ADD COLUMN IF NOT EXISTS ice_candidates JSONB,
ADD COLUMN IF NOT EXISTS media_state JSONB DEFAULT '{"audio": true, "video": false, "screenShare": false}',
ADD COLUMN IF NOT EXISTS media_stats JSONB,
ADD COLUMN IF NOT EXISTS connection_quality VARCHAR(20) DEFAULT 'good'; -- excellent, good, poor, failed
-- Create turn_credentials table for temporary TURN server credentials
CREATE TABLE IF NOT EXISTS turn_credentials (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id VARCHAR NOT NULL REFERENCES users(id) ON DELETE CASCADE,
username VARCHAR(100) NOT NULL,
credential VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
expires_at TIMESTAMP DEFAULT NOW() + INTERVAL '24 hours',
UNIQUE(user_id)
);
-- Indexes for performance
CREATE INDEX IF NOT EXISTS idx_calls_type ON calls(type);
CREATE INDEX IF NOT EXISTS idx_calls_sfu_room ON calls(sfu_room_id) WHERE sfu_room_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS idx_turn_user_expires ON turn_credentials(user_id, expires_at);
CREATE INDEX IF NOT EXISTS idx_call_participants_quality ON call_participants(connection_quality);
-- Function to cleanup expired TURN credentials
CREATE OR REPLACE FUNCTION cleanup_expired_turn_credentials()
RETURNS INTEGER AS $$
DECLARE
deleted_count INTEGER;
BEGIN
DELETE FROM turn_credentials
WHERE expires_at < NOW();
GET DIAGNOSTICS deleted_count = ROW_COUNT;
RETURN deleted_count;
END;
$$ LANGUAGE plpgsql;
-- Comments
COMMENT ON COLUMN calls.type IS 'Type of call: voice or video';
COMMENT ON COLUMN calls.sfu_room_id IS 'Mediasoup SFU room ID for group calls';
COMMENT ON COLUMN calls.recording_url IS 'URL to call recording if enabled';
COMMENT ON COLUMN calls.quality_stats IS 'Aggregated quality statistics for the call';
COMMENT ON COLUMN call_participants.ice_candidates IS 'ICE candidates exchanged during call setup';
COMMENT ON COLUMN call_participants.media_state IS 'Current media state (audio, video, screenShare)';
COMMENT ON COLUMN call_participants.media_stats IS 'WebRTC statistics for this participant';
COMMENT ON COLUMN call_participants.connection_quality IS 'Real-time connection quality indicator';
COMMENT ON TABLE turn_credentials IS 'Temporary TURN server credentials for NAT traversal';