- 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
19 lines
1,022 B
PL/PgSQL
19 lines
1,022 B
PL/PgSQL
-- Trade-In MVP — добавляем поля для PDF/UI v2 (Слой 5.2 + 6.1).
|
|
-- confidence_explanation + sources_used + data_freshness_minutes
|
|
-- (target_address, lat, lon уже есть — переименуем при необходимости позже)
|
|
|
|
BEGIN;
|
|
|
|
ALTER TABLE trade_in_estimates
|
|
ADD COLUMN IF NOT EXISTS confidence_explanation text,
|
|
ADD COLUMN IF NOT EXISTS sources_used jsonb DEFAULT '[]'::jsonb,
|
|
ADD COLUMN IF NOT EXISTS data_freshness_minutes int;
|
|
|
|
COMMENT ON COLUMN trade_in_estimates.confidence_explanation IS
|
|
'Человекочитаемое объяснение confidence — для PDF/UI';
|
|
COMMENT ON COLUMN trade_in_estimates.sources_used IS
|
|
'Список источников, использованных в этой оценке (jsonb массив строк)';
|
|
COMMENT ON COLUMN trade_in_estimates.data_freshness_minutes IS
|
|
'Минут назад был последний парсинг для самого свежего аналога';
|
|
|
|
COMMIT;
|