Міграції
src/migrations/ — перенесення legacy Golden у колекції платформи і первинне заповнення даних метрик у ClickHouse.
UI: вкладка «Migrations» технічного департаменту (stack-client, /technical_department/migrations) · Swagger: тег Migrations · План: Golden migration
Що робить модуль
- Переносить legacy-колекції Golden у колекції платформи кроками; кожен крок ідемпотентний.
- Віддає стан кроків: скільки записів у legacy-джерелах і в колекціях платформи, накочені міграції схеми ClickHouse.
Legacy-колекції не змінюються і не видаляються.
Кроки
| № | Крок | Що переносить | Ключ і повтор |
|---|---|---|---|
| 1 | admins | golden_admins → project_admins | _id зберігається |
| 2 | tus | golden_ladies → project_tus: профіль, статуси, призначення за змінами, зашифрований пароль, findNew, stop-час NAF | _id зберігається; адмін панель — за партнерським ID |
| 3 | tu-links | перебудова project_tu_links усіх TU з tu_logs і журналу топів (04-tu-links) | пишеться лише різниця |
| 4 | ru-profiles | golden_man_profiles → project_ru_profiles; ім’я, satellite і online доповнюються з golden_global_mans, ім’я — ще й з golden_favorites; RU лише з golden_global_mans теж переносяться | project + ruId; пишуться лише відсутні RU, свіжіші профілі не перезаписуються |
| 5 | favorites | golden_favorites + golden_block_lists → project_favorites; глобальні favorites перебудовуються з них | _id favorites зберігається; глобальний favorite бере _id з golden_global_mans |
| 6 | statistics | golden_statistics → project_statistics; golden_other_bonuses — як зовнішня історія без адмін панелі, TU позначаються синхронізованими | _id зберігається, повтор оновлює рядки; денна вигрузка продовжує з дня після останнього перенесеного |
| 7 | statistics-relations | golden_statistics_relations → project_statistics_relations як є | _id зберігається; повтор добирає нові дні legacy |
| 8 | partner-online | golden_weekly_online_users → тижні повністю; golden_online_users → знімки лише після останнього тижня | тиждень — project + from, знімок — _id; повтор перезаписує |
| 9 | online-sessions | online оператора (golden_online_times.sessions до 2025-10-26, golden_operators_activities далі) і TU (golden_online_times.ladies[].sessions до 2025-10-31, golden_lady_online з 2025-11-01) → відрізки | власник + початок, $max на кінці; повтор добирає нові відрізки |
| 10 | metrics-statistics | копія project_statistics у ClickHouse (10-metrics) | звірка днів; на порожній копії — уся історія |
| 11 | metrics-tu-online | online TU за добу в ClickHouse з відрізків | від передостаннього скопійованого дня до вчора |
| 12 | ru-online | legacy ClickHouse main.golden_ru_daily_activity → project_ru_online: хвилини RU за день стають знімками по 5 хв від початку доби Kyiv | лише дні до сьогодні; повтор видаляє дні Golden до сьогодні й переносить знову |
Порядок обов’язковий: кожен крок резолвить посилання на попередні. Без адмін панелі TU падає; favorites і статистика без TU пропускають документ з лічильником. TU для favorites і статистики шукаються по проєкту; при кількох TU з одним партнерським ID перемагає невидалена.
Конвертація полів — у сутностях плану: ProjectTU, ProjectFavorite, ProjectGlobalFavorite.
Директор
Адмін панелі й TU мають поле директора, якого в legacy Golden немає. Якщо запускає директор — береться він; якщо технічний департамент — єдиний незаблокований директор Stack. Кілька директорів або жодного — 409.
Стан
POST /v2/migrations/status — кроки по порядку: ключ, роут запуску, кількість записів у legacy-джерелах і в колекціях платформи (Mongo і ClickHouse — за project) з міткою сховища, накочені міграції схеми ClickHouse. Ріст лічильників платформи під час кроку — це прогрес.
API для frontend
| Роут | Що робить | Ролі |
|---|---|---|
POST /v2/migrations/status | стан кроків | director, technical department |
POST /v2/migrations/<крок>/apply | запуск кроку з таблиці | director, technical department |
Нюанси
- Перед міграцією на свіжій базі потрібні індекси (
npm run db:indexes:sync): без унікальних індексів повторний запуск пише дублікати, без індексів читання дашбордів і статистики скануватимуть колекції. - Довгі кроки (статистика, online-відрізки, копія статистики — хвилини) переживають обрив проксі: сервер продовжує, вкладка показує ріст лічильників.
- Копії в ClickHouse під Redis-локом: повторний запуск під час роботи — 409.
- Дати партнера конвертуються як локальний час Kyiv.
Борг
- Крок виконується всередині HTTP-запиту: перезапуск API обриває його без повідомлення. Повтор ідемпотентний і добирає решту, але стан виконання ніде не зберігається.