lekss361
7814e1223a
feat(tradein): Phase 3.2 — /api/v1/search endpoint + Redis cache
...
Multi-Source Integration Phase 3.2. /api/v1/search with cross-source filters
+ POST body params + Redis 5min hot cache.
New files:
app/schemas/search.py — SearchParams (~20 filters, Pydantic v2)
app/schemas/search_response.py — SearchResponse + SearchResultItem
app/services/search_query.py — build_search_query (psycopg v3, CAST(:x AS type))
app/services/cache.py — SearchCache async wrapper (singleton lru_cache)
app/api/v1/search.py — POST /search endpoint
tests/test_search_api.py — unit + integration tests
Edited:
app/main.py — include search.router prefix=/api/v1
app/core/config.py — settings.redis_url default
pyproject.toml — add redis>=5.0.0
Queries listings_search_mv (matview from PR #469 ). Cache failures swallowed
(degrade to slow-but-correct). Sort whitelisted dict (no SQL injection).
Refs Master Plan sec 9.1 + 7.2.
2026-05-23 17:38:00 +03:00
TradeIn Deploy
59ad41c183
feat(tradein): мониторинг ошибок через GlitchTip ( #396 )
...
Подключаем tradein-backend к GlitchTip (Sentry-совместимый, уже на
сервере). Необработанные исключения FastAPI улетают в дашборд —
баг estimate-500 (#388/#389) был бы виден сразу с трейсбеком.
- sentry-sdk в зависимостях.
- main.py — sentry_sdk.init(), env-gated: пусто GLITCHTIP_DSN → off.
- config.glitchtip_dsn + GLITCHTIP_DSN в docker-compose.prod.yml.
- traces_sample_rate=0 (только ошибки), send_default_pii=False.
Активация: создать проект в GlitchTip → DSN в .env.runtime.
2026-05-22 11:18:26 +05:00
TradeIn Deploy
63c96628e3
feat(tradein): прогноз срока продажи + rate-limit (#9,#16)
2026-05-21 20:12:49 +03: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