-- Миграция для создания таблицы событий кандидатов -- Выполните этот скрипт для обновления существующей базы данных -- Создание типа candidate_event_type DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'candidate_event_type') THEN CREATE TYPE candidate_event_type AS ENUM ( 'call', -- Созвон 'interview_1', -- Первое собеседование 'interview_2', -- Второе собеседование 'interview_3', -- Третье собеседование 'test_task', -- Тестовое задание 'offer', -- Оффер 'offer_accepted', -- Оффер принят 'offer_rejected', -- Оффер отклонен 'probation_start', -- Начало испытательного срока 'hired', -- Трудоустроен 'rejected', -- Отклонен 'other' -- Другое ); END IF; END$$; -- Создание типа candidate_event_result DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'candidate_event_result') THEN CREATE TYPE candidate_event_result AS ENUM ('success', 'failed', 'pending', 'cancelled'); END IF; END$$; -- Создание таблицы событий кандидата CREATE TABLE IF NOT EXISTS candidate_events ( id VARCHAR(50) PRIMARY KEY, candidate_id VARCHAR(50) NOT NULL REFERENCES candidates(id) ON DELETE CASCADE, event_type candidate_event_type NOT NULL, event_date TIMESTAMPTZ NOT NULL, notes TEXT, -- Заметки о событии result candidate_event_result DEFAULT 'pending', -- Результат события interviewer TEXT, -- Кто проводил (для собеседований) location TEXT, -- Место проведения (офис, онлайн и т.д.) duration_minutes INTEGER, -- Длительность в минутах created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Создание индексов CREATE INDEX IF NOT EXISTS idx_candidate_events_candidate ON candidate_events(candidate_id); CREATE INDEX IF NOT EXISTS idx_candidate_events_type ON candidate_events(event_type); CREATE INDEX IF NOT EXISTS idx_candidate_events_date ON candidate_events(event_date DESC);