gendesign/tradein-mvp/backend/data/sql/122_enable_domclick_city_sweep.sql
bot-backend 2ed3ae81bc
All checks were successful
CI / changes (pull_request) Successful in 6s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
feat(domclick): wire DomClick citywide sweep into pipeline+scheduler (seeded disabled)
2026-06-17 23:21:49 +03:00

56 lines
3.3 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 122_enable_domclick_city_sweep.sql
-- Seed row для DomClick периодического citywide SERP-sweep.
--
-- !!! DORMANT BY DESIGN !!! enabled = false.
-- DomClickScraper.fetch_city бьёт DomClick SERP с prod-IP через camoufox headless
-- BrowserFetcher (DataDome пропускает headless Playwright; curl_cffi → 401).
-- Capability полностью wired (run_domclick_city_sweep + trigger_domclick_city_sweep_run
-- + dispatch в scheduler.py), но schedule засеян ВЫКЛЮЧЕННЫМ — live-поведение
-- намеренно НЕ verified до ручного prod-smoke. ВКЛЮЧАТЬ ВРУЧНУЮ оператором:
-- UPDATE scrape_schedules SET enabled = true WHERE source = 'domclick_city_sweep';
-- Зеркалит cian_city_sweep (107) и yandex_city_sweep (078, тоже enabled=false, dormant).
--
-- DomClick SERP — CITYWIDE (city_id), не geo-radius: anchor-loop отсутствует.
-- fetch_city перебирает rooms × pages внутри scraper'а и дедуплицирует по source_id.
-- SERP координаты не отдаёт (lat=lon=None) → house-match только по address-fingerprint.
-- SERP-only: нет detail/houses-фаз (в отличие от cian sweep), поэтому default_params
-- несут только city_id / rooms / pages_per_anchor / request_delay_sec.
--
-- ЗАВИСИМОСТИ: 052_scrape_schedules.sql (таблица + UNIQUE(source)).
-- Idempotent: ON CONFLICT (source) DO NOTHING — безопасно запускать повторно.
--
-- domclick_city_sweep — окно 03:00-06:00 UTC (06:00-09:00 МСК), после avito/cian/yandex
-- sweeps (02:00-05:00 UTC) чтобы не конкурировать за egress в одно окно.
-- default_params (консервативно, под DataDome):
-- city_id — числовой ID города DomClick (4 = Екатеринбург).
-- rooms — список комнатностей (0=студия, 1, 2, 3, 4).
-- pages_per_anchor — максимум страниц SERP на один room-проход (break on empty).
-- request_delay_sec — пауза между страницами SERP (anti-DataDome).
BEGIN;
-- next_run_at = следующее наступление night-window (tomorrow + window_start_hour).
-- При enabled=false get_due_schedules() всё равно не подхватит строку, но заполняем
-- по образцу 107: когда оператор включит schedule, next_run_at уже валиден и
-- запуск не выстрелит мгновенно (вне окна). AT TIME ZONE 'UTC' фиксирует wall-clock
-- час в UTC независимо от session TimeZone GUC.
INSERT INTO scrape_schedules (
source,
enabled,
window_start_hour,
window_end_hour,
next_run_at,
default_params
)
VALUES
(
'domclick_city_sweep',
false, -- DORMANT — enable manually after prod-smoke
3,
6,
((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 3)) AT TIME ZONE 'UTC',
'{"city_id": 4, "rooms": [0, 1, 2, 3, 4], "pages_per_anchor": 5, "request_delay_sec": 6}'::jsonb
)
ON CONFLICT (source) DO NOTHING;
COMMIT;