- 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
2.1 KiB
2.1 KiB
Backend Architecture Improvements
Цель
Устранить выявленные в ходе аудита архитектурные проблемы бэкенда: консистентность ответов API, качество кода модулей, обработку ошибок, тестируемость.
Требования
- Унифицировать формат ответов API — единый envelope DTO, используемый всеми модулями.
- Устранить inconsistency между shares и bonds модулями.
- Ввести иерархию доменных исключений с корректной обработкой.
- Улучшить health check (проверка зависимостей).
- Убрать дублирование и лишние зависимости.
- Сохранить обратную совместимость 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подключён через DIsecurities/не импортируетCacheModuleнапрямую- Все тесты проходят
npm run buildуспешен