# Документация модуля аутентификации (Auth Module)

Модуль Auth отвечает за идентификацию, аутентификацию и управление базовыми профилями пользователей в системе Knot Messager.

## Основные функции

*   Регистрация новых пользователей (с контролем доступности).
*   Аутентификация (Login) с выдачей JWT токенов.
*   Управление сессиями и контекстом текущего пользователя.
*   Хранение базовой информации профиля (Username, PasswordHash, DisplayName).

## Доменная модель

### Пользователь (User)
Сущность [User](file:///e:/GIT/forkmessager/backend/src/Modules/Auth/Domain/User.cs#20-30) является корнем агрегата и содержит следующие данные:
*   **Username**: Уникальное имя пользователя (логин).
*   **PasswordHash**: Хэшированный пароль (argon2/bcrypt).
*   **DisplayName**: Отображаемое имя.
*   **Email**: Электронная почта (опционально).
*   **Avatar**: URL аватара из хранилища.
*   **Bio**: Краткое описание профиля.
*   **Birthday**: Дата рождения (опционально).
*   **CreatedAt**: Дата регистрации.

## Процессы и команды

### 1. Регистрация ([RegisterUserCommand](file:///e:/GIT/forkmessager/backend/src/Modules/Auth/Application/Users/Register/RegisterUserCommandHandler.cs#14-20))
Регистрация новых пользователей является управляемым процессом.

**Зависимость от модуля администрирования:**
Перед началом процесса регистрации модуль Auth проверяет глобальную настройку `EnableRegistration` из модуля [Settings](file:///e:/GIT/forkmessager/backend/src/Modules/Settings/Application/Config/DTOs/PublicConfigDto.cs#17-87) (управляется через `Admin Module`).
*   Если регистрация **выключена** администратором, команда возвращает ошибку `Identity.RegistrationDisabled`.
*   Если регистрация **включена**, процесс продолжается:
    1.  Проверка уникальности [Username](file:///e:/GIT/forkmessager/backend/src/Modules/Auth/Infrastructure/Persistence/UserRepository.cs#28-32).
    2.  Хэширование пароля с использованием алгоритма BCrypt.
    3.  Создание записи в PostgreSQL.
    4.  Выдача JWT-токена для немедленного входа.

### 2. Вход в систему (`LoginUserCommand`)
Процесс проверки учетных данных:
1.  Поиск пользователя по [Username](file:///e:/GIT/forkmessager/backend/src/Modules/Auth/Infrastructure/Persistence/UserRepository.cs#28-32).
2.  Верификация хэша пароля.
3.  Генерация JWT-токена, содержащего `sub` (UserId) и `unique_name` (Username).

### 3. Получение данных о себе (`GetMeQuery`)
Возвращает данные текущего авторизованного пользователя на основе Token Claims. Используется для инициализации состояния клиента (профиля) после загрузки приложения.

## API Эндпоинты

Модуль использует **Minimal APIs** через Carter. Базовый путь: `/api/auth`

*   `POST /api/auth/register` — Регистрация нового аккаунта. Возвращает ошибку 400, если регистрация закрыта администратором.
*   `POST /api/auth/login` — Вход и получение токена.
*   `GET /api/auth/me` — Получение данных своего профиля (требует Authorization Header).

## Безопасность

1.  **JWT**: Используются токены с коротким временем жизни. Секретный ключ, Issuer и Audience настраиваются в переменных окружения.
2.  **Хэширование**: Пароли никогда не хранятся в открытом виде.
3.  **Контроль регистрации**: Позволяет администратору полностью закрыть сервер от новых регистраций в любой момент времени.
4.  **Изоляция**: Другие модули получают ID пользователя через `IUserContext`, который извлекает данные из JWT Claims без прямого обращения к БД Auth.

## Взаимодействие с другими модулями

*   **Settings/Admin**: Предоставляет настройки доступности регистрации.
*   **Conversations**: Связывает чаты с UserId.
*   **Messaging**: Связывает сообщения с SenderId.
*   **Admin**: Позволяет администратору сбрасывать пароли пользователей.
