- Video Interview system (backend + frontend) - Date Posted filter (24h, 7d, 30d) - Company filter in jobs listing - Recent searches persistence (LocalStorage) - Job Alerts with email confirmation - Favorite jobs with API - Company followers system - Careerjet URL compatibility (s/l aliases)
48 lines
2.2 KiB
SQL
48 lines
2.2 KiB
SQL
-- Migration: Create video_interviews table
|
|
-- Description: Table for scheduling and managing video interviews between companies and candidates
|
|
|
|
CREATE TABLE IF NOT EXISTS video_interviews (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
application_id UUID NOT NULL REFERENCES applications(id) ON DELETE CASCADE,
|
|
|
|
-- Interview scheduling
|
|
scheduled_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
duration_minutes INTEGER NOT NULL DEFAULT 30,
|
|
timezone VARCHAR(50) NOT NULL DEFAULT 'UTC',
|
|
|
|
-- Interview details
|
|
meeting_link VARCHAR(500),
|
|
meeting_provider VARCHAR(50) DEFAULT 'custom', -- custom, zoom, meet, teams
|
|
meeting_id VARCHAR(255),
|
|
meeting_password VARCHAR(100),
|
|
|
|
-- Status
|
|
status VARCHAR(30) NOT NULL DEFAULT 'scheduled', -- scheduled, in_progress, completed, cancelled, no_show
|
|
started_at TIMESTAMP WITH TIME ZONE,
|
|
ended_at TIMESTAMP WITH TIME ZONE,
|
|
|
|
-- Notes and feedback
|
|
notes TEXT,
|
|
interviewer_feedback TEXT,
|
|
candidate_feedback TEXT,
|
|
rating INTEGER, -- 1-5 rating
|
|
|
|
-- Metadata
|
|
created_by UUID REFERENCES users(id),
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
-- Indexes
|
|
CREATE INDEX IF NOT EXISTS idx_video_interviews_application_id ON video_interviews(application_id);
|
|
CREATE INDEX IF NOT EXISTS idx_video_interviews_scheduled_at ON video_interviews(scheduled_at);
|
|
CREATE INDEX IF NOT EXISTS idx_video_interviews_status ON video_interviews(status);
|
|
|
|
-- Comments
|
|
COMMENT ON TABLE video_interviews IS 'Video interview scheduling for job applications';
|
|
COMMENT ON COLUMN video_interviews.application_id IS 'The job application this interview is for';
|
|
COMMENT ON COLUMN video_interviews.scheduled_at IS 'When the interview is scheduled to start';
|
|
COMMENT ON COLUMN video_interviews.duration_minutes IS 'Interview duration in minutes';
|
|
COMMENT ON COLUMN video_interviews.meeting_link IS 'URL to join the video meeting';
|
|
COMMENT ON COLUMN video_interviews.meeting_provider IS 'Video meeting provider: custom, zoom, google_meet, teams';
|
|
COMMENT ON COLUMN video_interviews.status IS 'Interview status: scheduled, in_progress, completed, cancelled, no_show';
|