Sergey Krylov ccb1082535 refactor(backend): unify envelope DTOs and fix shares/bonds inconsistency
- Replace 4 duplicate meta DTOs (AuthResponseMetaDto, PortfolioResponseMetaDto,
  BrokerResponseMetaDto, ScreenerResponseMetaDto) with shared ApiResponseMeta
- Wrap shares getShare() in ApiEnvelopePayload (was raw object, unlike bonds)
- Remove unnecessary CacheModule import from securities module
- Update portfolio controller nullDataEnvelopeSchema to use shared ApiResponseMeta
- All 116 tests pass
2026-06-25 20:20:59 +03:00

2.1 KiB
Raw Blame History

Backend Architecture Improvements

Цель

Устранить выявленные в ходе аудита архитектурные проблемы бэкенда: консистентность ответов API, качество кода модулей, обработку ошибок, тестируемость.

Требования

  1. Унифицировать формат ответов API — единый envelope DTO, используемый всеми модулями.
  2. Устранить inconsistency между shares и bonds модулями.
  3. Ввести иерархию доменных исключений с корректной обработкой.
  4. Улучшить health check (проверка зависимостей).
  5. Убрать дублирование и лишние зависимости.
  6. Сохранить обратную совместимость API (поля ответов не меняются, только структура).

Ограничения

  • Не менять внешний API-контракт (формат { data, meta } остаётся).
  • Не рефакторить то, что не указано в требованиях.
  • Каждое изменение идёт через TDD-цикл.

Критерии приемки (Acceptance Criteria)

  • Все модули используют единый shared envelope DTO из common/dto/
  • shares/shares.service.ts:getShare() возвращает ApiEnvelopePayload как и bonds/
  • Screener кеширует полный набор данных
  • Создана иерархия доменных исключений
  • HttpExceptionFilter корректно обрабатывает доменные исключения
  • Health check проверяет Prisma, MOEX, T-Bank
  • RequestLoggingMiddleware подключён через DI
  • securities/ не импортирует CacheModule напрямую
  • Все тесты проходят
  • npm run build успешен