Files
mkd/backend/migrate_candidate_events.sql

52 lines
2.7 KiB
MySQL
Raw Permalink Normal View History

2026-02-04 00:17:04 +05:00
-- Миграция для создания таблицы событий кандидатов
-- Выполните этот скрипт для обновления существующей базы данных
-- Создание типа 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);