From f81bd710c09bc60cdc979249072577ef00d06c5d Mon Sep 17 00:00:00 2001 From: lekss361 Date: Mon, 11 May 2026 18:12:37 +0300 Subject: [PATCH] =?UTF-8?q?feat(api):=20POST=20/admin/scrape/poi-sync=20?= =?UTF-8?q?=E2=80=94=20manual=20OSM=20POI=20sync=20trigger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/v1/admin_scrape.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/backend/app/api/v1/admin_scrape.py b/backend/app/api/v1/admin_scrape.py index 368f314f..a5cab861 100644 --- a/backend/app/api/v1/admin_scrape.py +++ b/backend/app/api/v1/admin_scrape.py @@ -367,6 +367,23 @@ def list_logs( # ── Objective ETL (Антоновский SQLite → PG) ───────────────────────────────── +@router.post("/poi-sync") +def trigger_poi_sync( + x_admin_token: Annotated[str | None, Header(alias="X-Admin-Token")] = None, +) -> dict[str, Any]: + """Manual trigger для синхронизации OSM POI ЕКБ из Overpass API. + + Обычно запускается еженедельно через beat (понед 3:00 МСК). + Этот endpoint — для ad-hoc запуска (например после первого деплоя + или при создании нового тестового участка). + """ + _check_token(x_admin_token) + from app.workers.tasks.poi_sync import sync_osm_poi_ekb + + result = sync_osm_poi_ekb.apply_async() + return {"task_id": result.id, "queued_at": "now"} + + class TriggerObjectiveEtlRequest(BaseModel): sqlite_path: str | None = Field( default=None,