[Refactor] Убрать ручной whitelist screener и строковый DI-токен TBANK_ACCESS #151

Closed
opened 2026-11-02 06:33:41 +03:00 by codex-bot · 2 comments
Owner

Проблема

Аудит main/audits/2026-10-19-code-quality-architecture/02-findings.md, CQ-023/CQ-024 (план, пункт 6):

  • stock.controller.ts searchScreener после ValidationPipe({ forbidNonWhitelisted: true }) повторно проверяет ключи сырого request.body захардкоженным Set, дублируя список полей StockScreenerCriteriaDto.
  • StockScreenerService получает TbankAccessService через строковый алиас 'TBANK_ACCESS' (instruments.module.ts) вместо прямого класса-провайдера.

Результат и scope

Удалить дублирующую проверку и алиас; wire contract (400 на неизвестное поле, ответ 200) не меняется.

Acceptance Criteria

  • Ручной allowed-Set удалён; неизвестные поля тела screener search по-прежнему дают 400 (существующий e2e stocks.e2e-spec.ts).
  • 'TBANK_ACCESS' удалён; StockScreenerService инжектит TbankAccessService напрямую, unit-тест сервиса не ослаблен.
  • npm run verify проходит.
## Проблема Аудит `main/audits/2026-10-19-code-quality-architecture/02-findings.md`, CQ-023/CQ-024 (план, пункт 6): - `stock.controller.ts` `searchScreener` после `ValidationPipe({ forbidNonWhitelisted: true })` повторно проверяет ключи сырого `request.body` захардкоженным `Set`, дублируя список полей `StockScreenerCriteriaDto`. - `StockScreenerService` получает `TbankAccessService` через строковый алиас `'TBANK_ACCESS'` (`instruments.module.ts`) вместо прямого класса-провайдера. ## Результат и scope Удалить дублирующую проверку и алиас; wire contract (400 на неизвестное поле, ответ 200) не меняется. ## Acceptance Criteria - [ ] Ручной `allowed`-Set удалён; неизвестные поля тела screener search по-прежнему дают 400 (существующий e2e `stocks.e2e-spec.ts`). - [ ] `'TBANK_ACCESS'` удалён; `StockScreenerService` инжектит `TbankAccessService` напрямую, unit-тест сервиса не ослаблен. - [ ] `npm run verify` проходит.
codex-bot added the Kind/Refactor label 2026-11-02 06:33:41 +03:00
Author
Owner

Уточнение по AC1: вывод аудита CQ-023 не подтвердился. После удаления ручного allowed-Set e2e stocks.e2e-spec.ts ("validates screener input…") вернул 200 вместо 400: глобальный ValidationPipe({ whitelist: true }) из configureApp срезает неизвестные ключи раньше, чем param-pipe с forbidNonWhitelisted успевает их увидеть. Поэтому проверка сырого body сохранена и снабжена поясняющим комментарием. Корректное устранение дубля — перенести forbidNonWhitelisted в глобальный pipe. Это меняет wire-поведение всех endpoint'ов (400 вместо тихого среза), поэтому вынесено за scope этой задачи.

AC2 ('TBANK_ACCESS' → прямой TbankAccessService) выполнен. npm run verify exit 0 (41 suites / 308 tests), e2e stocks.e2e-spec.ts 48/48.

Уточнение по AC1: вывод аудита CQ-023 не подтвердился. После удаления ручного `allowed`-Set e2e `stocks.e2e-spec.ts` ("validates screener input…") вернул 200 вместо 400: глобальный `ValidationPipe({ whitelist: true })` из `configureApp` срезает неизвестные ключи раньше, чем param-pipe с `forbidNonWhitelisted` успевает их увидеть. Поэтому проверка сырого body сохранена и снабжена поясняющим комментарием. Корректное устранение дубля — перенести `forbidNonWhitelisted` в глобальный pipe. Это меняет wire-поведение всех endpoint'ов (400 вместо тихого среза), поэтому вынесено за scope этой задачи. AC2 (`'TBANK_ACCESS'` → прямой `TbankAccessService`) выполнен. `npm run verify` exit 0 (41 suites / 308 tests), e2e `stocks.e2e-spec.ts` 48/48.
Author
Owner

Решение владельца (2026-11-02): глобальный forbidNonWhitelisted не включаем. Остальные endpoint'ы продолжают молча отбрасывать лишние поля, 400 на них не вводится. Ручная проверка сырого body в searchScreener остаётся намеренно и не является дублированием: CQ-023 закрыт как «не подтверждён».

Решение владельца (2026-11-02): глобальный `forbidNonWhitelisted` не включаем. Остальные endpoint'ы продолжают молча отбрасывать лишние поля, 400 на них не вводится. Ручная проверка сырого body в `searchScreener` остаётся намеренно и не является дублированием: CQ-023 закрыт как «не подтверждён».
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#151