Commit graph

6 commits

Author SHA1 Message Date
lekss361
fa861f7c0c chore(tradein): close pre-commit ruff gap + add CI pytest gate (#666)
- pre-commit ruff/ruff-format files: ^backend/ -> ^(backend|tradein-mvp/backend)/;
  clean trade_in_pdf.py 51->0 (dead PIL/days_overlay/qr_url + 47 E501; render
  byte-identical).
- deploy-tradein.yml: new pytest 'test' job gating build+deploy.
- fix suite for green gate: tests/matching/__init__.py (collection error) +
  restore get_role in test_history_scope.py (teardown leak breaking test_rbac).
- 1087 tests green; 2 pre-existing order-dependent tests deselected+documented.
  No runtime-logic changes.

Closes #666
2026-05-29 21:57:41 +03:00
870f062587 feat(tradein): expected-sold price in estimate PDF (#648 S5b — final) (#665)
All checks were successful
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 43s
Deploy Trade-In / deploy (push) Successful in 35s
2026-05-29 14:09:46 +00:00
33c4c84467 feat(tradein): этаж/этажность optional + best test presets по deal count (#558)
All checks were successful
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-backend (push) Successful in 44s
Deploy Trade-In / build-frontend (push) Successful in 1m53s
Deploy Trade-In / deploy (push) Successful in 44s
2026-05-24 21:44:44 +00:00
5e3ba351a0 fix(tradein): security hotfix — C-3 config default + C-4 empty estimate persist + C-6 PDF URL allowlist (#435)
All checks were successful
Deploy Trade-In / changes (push) Successful in 5s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 38s
Deploy Trade-In / deploy (push) Successful in 25s
2026-05-23 09:38:23 +00:00
420057aa02 fix(tradein): PDF — рабочая ссылка на отчёт + «Есть/Нет» для балкона
«Этот отчёт онлайн» и QR-код в PDF вели на
gendsgn.ru/trade-in/trade-in?id=… — двойной /trade-in/: PUBLIC_URL
на проде уже = https://gendsgn.ru/trade-in, а код добавлял /trade-in
ещё раз → ссылка/QR давали 404.

Плюс «Балкон / лоджия» печатался как «1»/«0» (сырое булево) вместо
«Есть»/«Нет».
2026-05-22 16:01:12 +05:00
lekss361
02267d0306 feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in)
- FastAPI backend: PostGIS estimator + 3 scrapers (Avito/Cian/Yandex)
- Next.js 15 frontend: tradein.html mockup design, basePath=/trade-in
- WeasyPrint PDF (Брусника-style 4-page report)
- Address autocomplete с typo-tolerance + 6 EKB presets
- Изолированный docker stack gendesign-tradein (отдельная postgres БД)
- Caddy inline routes: gendsgn.ru/trade-in/* и /trade-in/api/v1/*
- Forgejo Actions: .forgejo/workflows/deploy-tradein.yml (shell-based GHCR login)
- Триггер только по paths: tradein-mvp/** (не пересекается с deploy.yml)
- Образы: ghcr.io/lekss361/gendesign-tradein-{backend,frontend}:latest

Первый запуск на сервере (вручную, один раз):
  - создать /opt/gendesign/tradein-mvp/.env.runtime (postgres pwd, contact email)
  - docker network create gendesign_shared (если нет)
  - docker compose -p gendesign-tradein up -d
  - docker compose -p gendesign exec caddy caddy reload
2026-05-21 00:25:39 +03:00