gohorsejobs/backend/migrations/034_create_video_interviews.sql
GoHorse Deploy ae475e41a9 feat: implement careerjet gap analysis improvements
- 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)
2026-02-14 19:37:25 +00:00

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';