feat(#104): admin endpoint POST /admin/scrape/ekburg-permits для manual trigger #239
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#239
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/104-ekburg-permits-admin-endpoint"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Test plan
Closes #104
Deep Code Review — verdict: APPROVE
Паттерн идентичен
trigger_pzz_sync/trigger_poi_sync(deferred import →apply_async()→ returntask_id). Auth черезAdminTokenAuth(Depends(verify_admin_token), 401/503) корректно. Pydanticyear: int | None = Field(default=None, ge=2022, le=2030)—POST {}работает, тест подтверждает.Key findings:
tasks.ekburg_permits_sync.refresh_year/refresh_allзарегистрированы вcelery_app.pyincludes + beat scheduleekburg-permits-monthlyуже используетrefresh_all(вместе работают: beat и manual могут пересечься, ноON CONFLICT (permit_type, permit_number) DO UPDATEделает idempotent, lock не нужен).with db.begin_nested()per-row SAVEPOINT +CAST(:raw_row AS jsonb)— соответствует backend.md rules.Nits (не блокирующее):
queued_at: "now"— literal string вместо ISO timestamp (тот же паттерн в pzz/poi-sync, established convention).le=2030шире чем данныеEKBURG_PERMITS_URLS(только 2022-2026) — год 2027-2030 пройдёт валидацию, но task вернёт{"errors": 1}черезEKBURG_PERMITS_URLS.get(year)→ None. Forward-looking, OK.code/modules/ekburg_permits_parser.mdуже содержит описание endpoint'а и тестов — actualize done.Мержу.