feat: add authorization

This commit is contained in:
2026-08-13 15:03:59 +03:00
parent 1e13adabd3
commit 3448fea140
28 changed files with 4504 additions and 3707 deletions
+13
View File
@@ -0,0 +1,13 @@
# API Layer
OpenAPI backend является источником истины. После изменения backend-контракта запускается `npm run openapi:generate`; `src/shared/api/generated/schema.d.ts` не редактируется вручную.
Все HTTP-вызовы используют `apiClient` из `src/shared/api`. Прямой `fetch` в features, pages и entities не используется.
Request и response types выводятся из generated `paths`, например:
```ts
type User = paths["/api/v1/auth/me"]["get"]["responses"][200]["content"]["application/json"];
```
Ручной domain/UI type допустим только если он отличается от transport DTO по смыслу, а не повторяет его поля.
+18
View File
@@ -0,0 +1,18 @@
# Conventions
## Must
- Использовать Biome: `npm run lint`; табы и двойные кавычки определяет `biome.json`.
- Для type-only импортов использовать `import type`; не использовать `enum` и `namespace`.
- UI-строки хранить в `src/shared/i18n/locales/ru.ts` и получать через `useTranslation()`.
- Zod-схемы не содержат пользовательских строк: использовать `validationMessage(key)` из `src/shared/i18n/zod.ts`.
- Публичный импорт слайса идёт через его `index.ts`.
- Тесты лежат рядом с исходником как `*.test.tsx`.
## File roles
- `Component.tsx` - контейнер или публичный компонент.
- `Component.vm.ts` - hook с данными и действиями.
- `Component.view.tsx` - чистое представление.
- `Component.types.ts` - props и локальные типы.
- `Component.module.css` - локальные стили.
+9
View File
@@ -0,0 +1,9 @@
# Frontend Documentation
Эти документы задают правила AI-разработки и дополняют `AGENTS.md`. Фактические версии зависимостей и scripts всегда определяются конфигурацией проекта.
- `CONVENTIONS.md` - обязательные правила кода и i18n.
- `API-LAYER.md` - OpenAPI, generated types и typed client.
- `UI-PATTERN.md` - формы и UI-состояния.
- `STRUCTURE.md` - FSD-слои, импорты и public API слайсов.
- `TESTING.md` - Vitest и Testing Library.
+11
View File
@@ -0,0 +1,11 @@
# Structure
Проект использует FSD-направление импортов: `app -> pages -> features -> entities -> shared`.
- `app` - providers, routes и глобальные стили.
- `pages` - страницы маршрутов.
- `features` - пользовательские сценарии, включая authentication.
- `entities` - доменные модели и их UI/API.
- `shared` - переиспользуемый код без доменной логики: API, i18n и UI.
Каждый слайс предоставляет наружу только public API через `index.ts`; внутренние файлы соседний слой не импортирует напрямую.
+5
View File
@@ -0,0 +1,5 @@
# Testing
Тесты запускаются `npm run test:run` через Vitest и Testing Library.
Проверяйте наблюдаемое поведение, а не детали реализации. UI-тест строится как Arrange, Act, Assert; для интерактивных действий предпочитайте `userEvent`. Форма должна проверять валидацию и отсутствие запроса при невалидных данных; маршруты - редиректы и доступность экрана.
+7
View File
@@ -0,0 +1,7 @@
# UI Pattern
Формы используют `react-hook-form`, `zodResolver` и `FormProvider`. Form state создаётся в контейнере или VM, чистое представление получает `onSubmit` и `disabled`, а поля подключает через `useFormContext`.
Во время submit все действия формы блокируются. Ошибки Zod отображаются у поля; ошибки сети сохраняют введённые значения и показываются отдельным `Alert`.
Запросные экраны выбирают состояние в порядке loading, error, empty, loaded. Состояния имеют отдельные компоненты, если повторяются или содержат самостоятельную разметку.