36 lines
2.1 KiB
Markdown
36 lines
2.1 KiB
Markdown
# MoexClientService Split
|
||
|
||
## Цель
|
||
|
||
Разделить God Service `MoexClientService` на инфраструктурный слой и набор доменных клиентов, устранив нарушение SRP и улучшив тестируемость.
|
||
|
||
## Требования
|
||
|
||
1. `MoexHttpClient` — выделить инфраструктуру (axios, PQueue, circuit breaker, `request()`, `extractTable()`)
|
||
2. Доменные клиенты — по одному на группу MOEX-запросов:
|
||
- `MoexSecuritiesClient` — поиск и описание ценных бумаг
|
||
- `MoexMarketDataClient` — рыночные данные акций и облигаций
|
||
- `MoexCandlesClient` — свечи
|
||
- `MoexHistoryClient` — история торгов
|
||
- `MoexDividendsClient` — дивиденды
|
||
3. Убрать `@Global()` — каждый потребитель явно импортирует `MoexClientModule`
|
||
4. `MoexHttpClient` не экспортируется из модуля (внутренняя деталь)
|
||
5. Все MOEX-типы остаются в `moex-client.types.ts`
|
||
6. API-контракт всех потребителей не меняется — только DI
|
||
|
||
## Ограничения
|
||
|
||
- Один коммит на всю миграцию (нельзя половинчатое состояние)
|
||
- Не менять сигнатуры публичных методов — только перенос кода
|
||
- Не менять типы в `moex-client.types.ts`
|
||
- Каждое изменение через TDD-цикл
|
||
|
||
## Критерии приемки (Acceptance Criteria)
|
||
|
||
- [ ] `MoexClientService` удалён, все 11 методов распределены по 5 доменным клиентам
|
||
- [ ] `MoexHttpClient` содержит rate limiter + circuit breaker
|
||
- [ ] `@Global()` убран с `MoexClientModule`
|
||
- [ ] Все 7 потребителей обновлены: явный импорт модуля + новые DI
|
||
- [ ] Все тесты проходят (существующие обновлены)
|
||
- [ ] `npm run build` успешен
|