From ee397b603b0f04a3a1ef20a858eefa09f3b09a10 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 12 Sep 2026 17:12:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B4=D0=B5=D0=BB=D0=BE=D0=BA=20=D0=A0=D0=BE=D1=81?= =?UTF-8?q?=D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80=D0=B0=20=D0=BF=D0=BE=20?= =?UTF-8?q?=D0=9C=D0=BE=D1=81=D0=BA=D0=BE=D0=B2=D1=81=D0=BA=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=B1=D0=BB=D0=B0=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Регион 50 заведён в реестре (#3501) и уже на проде, а код импорта параметризован кодом региона с валидацией по реестру, поэтому область включается одной seed-строкой расписания — новой логики не требуется. Имя `rosreestr_dkp_import_50` резолвится существующим wildcard-хендлером `rosreestr_dkp_import_*`, курсор возобновления у него свой (собственный scrape_runs.source), с регионами 66 и 77 не пересекается. У региона 50 canonical_city IS NULL, то есть импорт идёт по ветке региона 66: city берётся из источника (муниципалитет — Балашиха, Химки, Подольск), raw_payload не заполняется, строки с пустым city отбрасываются. Для области это и есть верное поведение — единого города у неё нет. Замер по FDW на проде: под полным WHERE импорта регион 50 даёт 113 351 сделку ДКП с 2024-01-01. Строка выключена, как и seed 77 в миграции 289: включение и первый прогон — отдельный шаг после деплоя. --- ...scrape_schedules_seed_rosreestr_dkp_50.sql | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 tradein-mvp/backend/data/sql/302_scrape_schedules_seed_rosreestr_dkp_50.sql diff --git a/tradein-mvp/backend/data/sql/302_scrape_schedules_seed_rosreestr_dkp_50.sql b/tradein-mvp/backend/data/sql/302_scrape_schedules_seed_rosreestr_dkp_50.sql new file mode 100644 index 00000000..6ce6779e --- /dev/null +++ b/tradein-mvp/backend/data/sql/302_scrape_schedules_seed_rosreestr_dkp_50.sql @@ -0,0 +1,52 @@ +-- 302_scrape_schedules_seed_rosreestr_dkp_50.sql +-- Seed-строка scrape_schedules для региона 50 (Московская область) — #3051, трек МО. +-- +-- Dependencies: 289_rosreestr_fdw_msk_columns_seed77.sql (та же таблица, тот же +-- формат source/default_params). +-- Apply after: 301_web_support_message_idempotency_key.sql +-- +-- WHY: +-- Код-часть импорта уже параметризована регионом (`scheduler.py::_job_rosreestr_dkp` +-- читает `region_code` из default_params и валидирует его по `app.services.regions`), +-- а wildcard-хендлер `rosreestr_dkp_import_*` резолвит любое имя с суффиксом кода. +-- Регион 50 заведён в реестре и уже на проде, поэтому включение области стоит ровно +-- одной строки расписания — новой логики не требуется. +-- +-- У региона 50 `canonical_city IS NULL`, то есть он идёт по ветке региона 66: +-- `deals.city` берётся из источника (муниципалитет — Балашиха, Химки, Подольск), +-- `raw_payload` не заполняется, строки с пустым city отбрасываются. Для области это +-- и есть верное поведение: единого города у региона нет, подставлять нечего. +-- +-- Замер по FDW (2026-09-12, прод): под полным WHERE импорта регион 50 даёт +-- 113 351 сделку ДКП с 2024-01-01 — корпус того же порядка, что московский. +-- +-- Строка ВЫКЛЮЧЕНА (enabled=false) — ровно как seed 77 в миграции 289: миграция +-- заводит расписание, включение и первый прогон остаются отдельным решением +-- main-сессии. Окно 4-6 UTC совпадает с окнами регионов 66 и 77; прогоны +-- сериализуются планировщиком, а первая полная заливка 77 заняла 3 минуты на +-- 212 937 строк, так что третий регион в то же окно помещается с запасом. +-- +-- ИДЕМПОТЕНТНОСТЬ: ON CONFLICT (source) DO NOTHING — повторный прогон no-op и, +-- что важнее, НЕ сбрасывает enabled обратно в false после ручного включения. + +BEGIN; + +SET LOCAL lock_timeout = '5s'; + +INSERT INTO scrape_schedules ( + source, + enabled, + window_start_hour, + window_end_hour, + default_params +) +VALUES ( + 'rosreestr_dkp_import_50', + false, + 4, + 6, + '{"region_code": 50, "since": "2024-01-01", "batch_size": 2000}'::jsonb +) +ON CONFLICT (source) DO NOTHING; + +COMMIT;