Этот документ описывает новую структуру папок для API, где типы и data-contracts создаются отдельно от контроллеров и SignalR хабов.
src/shared/api/
├── types/ # Общие типы API
│ ├── types.ts # Основные типы (генерируется из swagger_api.json)
│ └── common-enums.ts # Общие enum'ы для переиспользования
├── data-contracts/ # Data contracts
│ └── data-contracts.ts # Data contracts (генерируется из swagger_api.json)
├── http-clients/ # HTTP клиенты для контроллеров
│ ├── Api.ts # Основной API клиент
│ └── [controller]/ # Отдельные клиенты для каждого контроллера
├── signalr-types/ # Типы для SignalR
│ └── signalr-types.ts # SignalR типы (генерируется из swagger_hubs.json)
├── signalr-clients/ # SignalR клиенты
│ └── [hub-name]/ # Отдельные клиенты для каждого хаба
│ ├── SignalRContext.ts
│ └── SignalRHubWrapper.tsx
├── api-config.ts # Утилиты конфигурации API
├── index.ts # Главный индексный файл
└── data-contracts.ts # Shim для обратной совместимости
- Генерируются только типы без клиентов
- Один файл
types.tsсо всеми типами - Включает enum'ы и базовые типы
- Отдельная генерация data-contracts
- Один файл
data-contracts.ts - Применяется дедупликация enum'ов
- Генерируются только клиенты без типов
- Модульная структура по контроллерам
- Автоматически добавляются импорты типов
- Отдельная генерация типов для SignalR
- Один файл
signalr-types.ts - Применяется дедупликация enum'ов
- React wrapper'ы для каждого хаба
- Использует типы из
signalr-types/
import type * as Types from "@/shared/api/types/types";
import type * as DataContracts from "@/shared/api/data-contracts/data-contracts";
import type * as SignalRTypes from "@/shared/api/signalr-types/signalr-types";import { Commands, Framedata } from "@/shared/api/http-clients";import { ScoreboardSignalRContext } from "@/shared/api/signalr-clients/Scoreboard/SignalRContext";
import ScoreboardSignalRHubWrapper from "@/shared/api/signalr-clients/Scoreboard/SignalRHubWrapper";Для сохранения обратной совместимости создаются shim-файлы:
data-contracts.ts→ реэкспортирует изdata-contracts/data-contracts.tsSignalR/types/signalr-types.ts→ реэкспортирует изsignalr-types/signalr-types.ts
yarn build-api- Разделение ответственности - типы и клиенты генерируются отдельно
- Лучшая организация - четкая структура папок
- Переиспользование типов - типы можно импортировать независимо от клиентов
- Модульность - каждый компонент в своей папке
- Обратная совместимость - существующий код продолжит работать
- Легкость поддержки - проще найти и изменить нужные файлы