-- 173_scrape_proxies_add_domclick_affinity.sql
-- Расширение CHECK-констрейнта scrape_proxies.provider_affinity значением 'domclick' (#2000).
--
-- WHY:
--   DomClick-скрейпинг карточек (scraper_kit/providers/domclick/serp.py:327,
--   build_browser_fetcher(config, "domclick") -> proxy_provider.acquire("domclick"))
--   сейчас попадает в общий пул affinity='any' вместе с мобильными прокси, которые
--   QRATOR банит 403. Есть выделенный residential ASocks-прокси (прод
--   scrape_proxies.id=1) с чистой репутацией IP — живой аудит подтвердил, что QRATOR
--   пропускает чистые residential IP. Хотим закрепить его строго за DomClick через
--   provider_affinity='domclick', а не 'any'.
--
-- WHAT:
--   DROP + ADD CHECK constraint scrape_proxies_provider_affinity_check с добавленным
--   значением 'domclick' (нельзя ALTER CHECK в Postgres без пересоздания).
--   Реальное имя констрейнта подтверждено в проде через pg_constraint:
--     conname = scrape_proxies_provider_affinity_check
--     CHECK ((provider_affinity = ANY (ARRAY['avito','cian','yandex','generic','any'])))
--
-- SCOPE:
--   Только схема (CHECK). Данные НЕ трогаем — UPDATE scrape_proxies SET
--   provider_affinity='domclick' WHERE id=1 применяется отдельно, ПОСЛЕ этой миграции
--   (constraint должен допускать значение раньше, чем строка его получит).
--   Backend-уровень (Pydantic whitelist _PROXY_AFFINITIES в admin.py) обновлён в этом
--   же PR — держим в синхроне со схемой.
--
-- IDEMPOTENCY / SAFETY:
--   - BEGIN/COMMIT — атомарно.
--   - DROP CONSTRAINT IF EXISTS — безопасно, если констрейнт уже пересоздан/переименован.
--   - ADD CONSTRAINT без IF NOT EXISTS (Postgres такого синтаксиса не имеет для
--     constraints) — обёрнуто в DO $$ ... EXCEPTION WHEN duplicate_object THEN NULL,
--     чтобы повторный прогон (после DROP IF EXISTS не сработавшего, т.к. кто-то уже
--     добавил новый constraint с тем же именем) не падал auto-apply на деплое.
--
-- Dependencies: 157_scrape_proxies.sql

BEGIN;

ALTER TABLE scrape_proxies
    DROP CONSTRAINT IF EXISTS scrape_proxies_provider_affinity_check;

DO $$
BEGIN
    ALTER TABLE scrape_proxies
        ADD CONSTRAINT scrape_proxies_provider_affinity_check
        CHECK (provider_affinity IN
               ('avito', 'cian', 'yandex', 'domclick', 'generic', 'any'));
EXCEPTION
    WHEN duplicate_object THEN
        NULL; -- констрейнт с таким именем уже существует (повторный прогон) — no-op
END $$;

COMMIT;
