feat(tradein/payments): схема БД, конфиг и kill-switch платёжного контура #2732
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#2732
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-payments-schema"
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
PR-B из серии A..F платёжного контура МЕРЫ (Т-Банк эквайринг) — см.
mera-tbank-acquiring-recon.mdв корне репо, §9 «Разбивка на PR». Только схема БД + конфиг + kill-switch, бизнес-логики нет.Входит
tradein-mvp/backend/data/sql/228_payments.sql— три таблицы:payments— одна строка на попытку оплаты (Init → notify → Confirm/Cancel), CHECK по статусам T-Bank Acquiring API.payment_notifications— append-only лог входящих вебхуков, идемпотентность черезUNIQUE(tbank_payment_id, status, amount_kopecks, token).payment_entitlements— что выдано за платёж (доступ/кредит),UNIQUE(payment_id, kind, ref_id).trade_in_estimates(id)/trade_in_leads(id)(оба ужеuuid PK, проверено по факту миграций 001/172) —ON DELETE SET NULL, по образцуtrade_in_leads.estimate_id._manifest_applied.txt— добавлено имя новой миграции (контракт #2216,tests/test_migrations_manifest.py).app/core/config.py—TBANK_TERMINAL_KEY,TBANK_PASSWORD(SecretStr),TBANK_API_BASE_URL,TBANK_NOTIFICATION_URL,TBANK_SUCCESS_URL,TBANK_FAIL_URL,TBANK_PAY_TYPE(Literal["O","T"], дефолт"T"— двухстадийная схема с холдом),TBANK_RECEIPT_ENABLED,TBANK_TAXATION,TBANK_FFD_VERSION,PAYMENTS_ENABLED(kill-switch, дефолтFalse).app/main.py(lifespan) — fail-fast:PAYMENTS_ENABLED=trueпри пустыхTBANK_TERMINAL_KEY/TBANK_PASSWORDроняет старт контейнера с внятным сообщением (по образцу существующей проверкиidentity_store=auth).НЕ входит (следующие PR серии)
Token, сборкиReceipt— нет.rbac.py/roles.yaml/ Caddyfile / docker-compose — нет.Контур выключен по умолчанию
PAYMENTS_ENABLED=false(дефолт) — все три таблицы создаются, но никакой код их не пишет и не читает до появления PR-D/E. Fail-fast сработает только если кто-то явно включитPAYMENTS_ENABLED=trueбез секретов терминала.Test plan
ruff check+ruff format --check(line-length 100) на изменённые.pypython -c "import ast; ast.parse(...)"на изменённые.pypytest(uv run --directory backend pytest) — 3755 passed, 9 skipped, 0 failedtests/test_migrations_manifest.py— зелёный (новый файл + manifest-запись согласованы)228_payments.sqlна прод-БД (auto-apply на деплое) — вне контроля этого PR, но миграция идемпотентна (CREATE TABLE IF NOT EXISTS,DROP CONSTRAINT IF EXISTSпередADD CONSTRAINT)