-- Migration 004: Create hybrid_booking_sessions table
-- This table stores booking requests for meetings with external attendees
CREATE TABLE IF NOT EXISTS hybrid_booking_sessions (
id SERIAL PRIMARY KEY,
-- Session identification
session_id VARCHAR(255) UNIQUE NOT NULL,
booking_url VARCHAR(500) NOT NULL,
-- Organizer information
organizer_email VARCHAR(255) NOT NULL,
organizer_name VARCHAR(255) NOT NULL,
-- External attendee information
external_email VARCHAR(255) NOT NULL,
external_name VARCHAR(255) NOT NULL,
-- Meeting details
meeting_subject VARCHAR(500) NOT NULL,
meeting_duration INTEGER NOT NULL, -- minutes
-- Internal attendees (JSON array)
internal_attendees JSON DEFAULT '[]',
-- Proposed time slots (JSON array)
proposed_slots JSON NOT NULL,
-- Booking status and result
status VARCHAR(50) DEFAULT 'pending', -- pending, confirmed, expired, cancelled
confirmed_slot JSON,
event_id VARCHAR(255), -- Microsoft Graph event ID
-- Timestamps
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE,
confirmed_at TIMESTAMP WITH TIME ZONE,
expires_at TIMESTAMP WITH TIME ZONE
);
-- Create indexes for better query performance
CREATE INDEX IF NOT EXISTS idx_hybrid_booking_sessions_session_id ON hybrid_booking_sessions(session_id);
CREATE INDEX IF NOT EXISTS idx_hybrid_booking_sessions_organizer_email ON hybrid_booking_sessions(organizer_email);
CREATE INDEX IF NOT EXISTS idx_hybrid_booking_sessions_external_email ON hybrid_booking_sessions(external_email);
CREATE INDEX IF NOT EXISTS idx_hybrid_booking_sessions_status ON hybrid_booking_sessions(status);
CREATE INDEX IF NOT EXISTS idx_hybrid_booking_sessions_created_at ON hybrid_booking_sessions(created_at);
-- Add comment
COMMENT ON TABLE hybrid_booking_sessions IS 'Stores booking requests for meetings with external attendees (non-Microsoft accounts)';