gendesign/tradein-mvp/backend/app
lekss361 496f18e16d feat(tradein): аккаунт praktika + лимит 15 оценок/мес, чистка брендинга PRINZIP в UI
Account quota (server-side, по X-Authenticated-User):
- новая таблица account_estimate_usage (миграция 076, идемпотентная)
- app/services/account_quota.py: 15 успешных оценок в календарный месяц на аккаунт
- enforcement в POST /estimate (429 при исчерпании) + GET /quota
- admin и kopylov — без лимита; нет заголовка (dev) → fail-open
- frontend: useQuota hook, счётчик «осталось N из 15», блок формы + баннер
  «Свяжитесь с Артёмом Копыловым» при исчерпании

Account praktika:
- caddy/users.caddy.snippet + auth/roles.yaml (роль pilot)

Брендинг PRINZIP убран только из UI (футер + css-коммент); таблица brands,
PDF white-label и скрейпер Яндекса (реальный застройщик PRINZIP) не тронуты.
2026-05-29 01:00:24 +03:00
..
api feat(tradein): аккаунт praktika + лимит 15 оценок/мес, чистка брендинга PRINZIP в UI 2026-05-29 01:00:24 +03:00
core feat(tradein): DaData on-demand enrichment в estimate flow (PR Q1) 2026-05-27 18:50:12 +05:00
schemas feat(tradein): аккаунт praktika + лимит 15 оценок/мес, чистка брендинга PRINZIP в UI 2026-05-29 01:00:24 +03:00
services feat(tradein): аккаунт praktika + лимит 15 оценок/мес, чистка брендинга PRINZIP в UI 2026-05-29 01:00:24 +03:00
tasks feat(tradein): houses.cian_zhk_url column + backfill (#568) (#627) 2026-05-28 13:57:43 +00:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00
main.py feat(rbac): role-based access control via X-Authenticated-User middleware (#585) 2026-05-26 06:18:40 +00:00