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

34 lines
2.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` успешен