ee642e5eaa
PostgreSQL-репозиторий для m2m_core.deals — реальное хранилище сделок вместо in-memory. Выбор Repository происходит автоматически в lkgateway.NewServer: если в runtime-конфиге задан Postgres DSN, поднимается pgxpool и используется PostgresRepository; иначе fallback на MemoryRepository. internal/m2mcore/pgrepo.go: - PostgresRepository: Create (идемпотентный по guid через ON CONFLICT DO NOTHING), GetByGUID, GetByID, Update, List (с фильтрами state/investor/created_*), AppendEvent для журнала deal_events - request_xml/response_xml/decision_xml хранятся как windows-1251 XML через nsdxml, на чтении парсятся обратно в m2m.M2M* структуры - stages — jsonb с историей FSM-переходов migrations/m2m-core/002__stages.sql: - ALTER TABLE deals ADD COLUMN stages jsonb DEFAULT '[]' internal/lkgateway/server.go: - При NewServer проверяется runtime-config: если есть DSN → PostgresRepository, иначе MemoryRepository; ошибка подключения логируется с fallback на in-memory - Тесты используют tempdir SetupPath для изоляции от реальной БД internal/lkgateway/setup.go: - tryPingPostgres переписан с database/sql (требует регистрации драйвера) на pgx.Connect — теперь форма /admin/setup/postgres реально проверяет подключение перед сохранением DSN Проверено сквозным smoke-тестом: введение DSN через UI → сохранение в ~/.bj/setup.json → перезапуск lk-gateway → лог "PostgresRepository подключён (m2m_core.deals)" → сделки реально пишутся в БД. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
52 lines
1.5 KiB
YAML
52 lines
1.5 KiB
YAML
version: "3.9"
|
||
|
||
# Локальный стек разработки и тестирования.
|
||
# В прод-среде сервисы поднимаются через systemd-юниты или podman-compose
|
||
# с production-overlay. Здесь — dev-конфиг с минимальными настройками
|
||
# и без секретов.
|
||
|
||
services:
|
||
postgres:
|
||
image: docker.io/library/postgres:16
|
||
# В проде заменить на postgrespro/std-16 или registry.postgrespro.ru/pgpro/...
|
||
container_name: bj-postgres
|
||
environment:
|
||
POSTGRES_USER: bj
|
||
POSTGRES_PASSWORD: bj_dev
|
||
POSTGRES_DB: bj
|
||
ports:
|
||
- "127.0.0.1:5432:5432"
|
||
volumes:
|
||
- bj-postgres-data:/var/lib/postgresql/data
|
||
|
||
minio:
|
||
image: docker.io/minio/minio:latest
|
||
container_name: bj-minio
|
||
command: server /data --console-address ":9001"
|
||
environment:
|
||
MINIO_ROOT_USER: bj
|
||
MINIO_ROOT_PASSWORD: bj_dev_minio
|
||
ports:
|
||
- "127.0.0.1:9000:9000"
|
||
- "127.0.0.1:9001:9001"
|
||
volumes:
|
||
- bj-minio-data:/data
|
||
|
||
crypto-service:
|
||
build:
|
||
context: ../../services/crypto-service
|
||
dockerfile: Dockerfile
|
||
container_name: bj-crypto-service
|
||
environment:
|
||
BJ_CRYPTO_SOCKET: /run/bj/crypto.sock
|
||
BJ_CRYPTO_PROVIDER: stub
|
||
volumes:
|
||
# UDS-сокет наружу как named volume, чтобы Go-сервисы
|
||
# (m2m-core, lk-gateway, nsd-adapter) могли его mount'ить.
|
||
- bj-crypto-sock:/run/bj
|
||
|
||
volumes:
|
||
bj-postgres-data:
|
||
bj-minio-data:
|
||
bj-crypto-sock:
|