refactor: align frontend with FSD architecture
Some checks failed
CI/CD Pipeline / Quality Gate (push) Failing after 2m37s
CI/CD Pipeline / Build and Deploy Dev via Compose (push) Has been skipped

This commit is contained in:
Gleb Korotkiy
2026-06-22 12:33:23 +03:00
parent 3adad7dbbf
commit 67ec34d619
95 changed files with 7802 additions and 5053 deletions

82
docs/generated-api.md Normal file
View File

@@ -0,0 +1,82 @@
# Generated API
Дата актуализации: 2026-06-22
## Назначение
Проект использует Orval для генерации TypeScript API-клиентов и Zod-моделей из `openapi.json`.
Generated-код не редактируется вручную.
## Команда генерации
```bash
bun run apigen
```
Orval config находится в `orval.config.ts`.
## Входной файл
```text
openapi.json
```
В config есть нормализация русскоязычных тегов OpenAPI в стабильные англоязычные имена файлов:
- `Аутентификация` -> `authentication`
- `Карта компетенций: аналитика` -> `competence-map-analytics`
- `Мониторинг` -> `monitoring`
- `Пользователь` -> `user`
- `Управление пользователями` -> `user-management`
Config также умеет читать первый валидный JSON-документ, если исходный OpenAPI-файл содержит
лишние данные после первого JSON.
## Выходные директории
```text
src/shared/api/generated-api/
src/shared/model/generated-zod/
```
`generated-api` использует custom mutator:
```text
src/shared/api/axiosInstance.ts
```
Это сохраняет единое поведение API-клиента: base URL, credentials, refresh flow, error handling
и abort signal.
## Public facade
Прикладной код не должен импортировать generated-файлы напрямую. Правильный путь:
```ts
import { getCompetenceMapAnalytics, type Login } from '@/shared/api'
```
Неправильный путь:
```ts
import { api_v1_competence_map_analytics_list } from '@/shared/api/generated-api/competence-map-analytics'
```
Facade `src/shared/api/index.ts` сейчас экспортирует только используемые приложением endpoint
functions, token primitives, error helpers и DTO-типы.
## Правила изменений
- Не редактировать файлы в `generated-api` и `generated-zod` вручную.
- При изменении backend контракта обновить `openapi.json` и выполнить `bun run apigen`.
- После генерации выполнить `bun run check:full`.
- Если новому экрану нужен endpoint, сначала добавить осознанный export в `src/shared/api/index.ts`
или отдельный wrapper, а не импортировать generated-файл напрямую.
- Если DTO требует page-specific адаптации, mapper должен жить рядом с owner-страницей или рядом
с API wrapper, а не в generated-зоне.
## Tooling exclusions
Generated-директории исключены из Steiger и Prettier через `steiger.config.ts` и `.prettierignore`.
Это не разрешение писать ручной код внутри generated-зон. Исключение нужно только для стабильной
работы tooling после Orval generation.