# Управление пользователем (User Management) Система пользователей, аутентификации и владения компанией. ## Обзор Модуль управления пользователями включает регистрацию, аутентификацию и связь пользователя с компанией. 📂 **Код:** [`backend/src/MyBiz.Core/User.cs`](../../backend/src/MyBiz.Core/User.cs), [`AuthService.cs`](../../backend/src/MyBiz.Core/AuthService.cs) --- ## Архитектура ``` ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ User │ ──────► │ Company │ ──────► │ BusinessUnit│ │ (пользов.) │ OwnerId │ (компания) │ Units │ (единицы) │ │ │ │ │ │ │ │ - Username │ │ - Cash │ │ - Shop │ │ - Email │ │ - Assets │ │ - Factory │ │ - Password │ │ - Buildings │ │ - Warehouse │ │ Hash │ │ - Units │ │ - Office │ │ │ │ │ │ - Lab │ └─────────────┘ └─────────────┘ └─────────────┘ ▲ │ ┌─────────────┐ │ AuthService │ │ (аутентиф.) │ └─────────────┘ ``` --- ## User **Назначение:** Пользователь системы (игрок). 📂 **Исходный код:** [`User.cs`](../../backend/src/MyBiz.Core/User.cs) ### Основные свойства | Свойство | Тип | Описание | |----------|-----|----------| | `Id` | Guid | Уникальный ID пользователя | | `Username` | string | Имя пользователя (логин) | | `Email` | string | Email адрес | | `PasswordHash` | string | Хеш пароля | | `CreatedAt` | DateTime | Дата регистрации | | `LastLoginAt` | DateTime? | Дата последнего входа | | `IsActive` | bool | Активен ли пользователь | | `Company` | Company? | Компания пользователя | | `CompanyId` | Guid? | ID компании | | `Stats` | UserStats | Статистика игры | --- ## UserStats **Назначение:** Статистика достижений пользователя. 📂 **Исходный код:** [`User.cs`](../../backend/src/MyBiz.Core/User.cs#L54-L85) ### Свойства | Свойство | Тип | Описание | |----------|-----|----------| | `GamesPlayed` | int | Всего игр сыграно | | `TotalHoursPlayed` | int | Всего часов в игре | | `MaxNetWorth` | decimal | Максимальная чистая стоимость | | `TotalBuildingsBuilt` | int | Всего зданий построено | | `FirstGameDate` | DateTime? | Дата первой игры | | `LastGameDate` | DateTime? | Дата последней игры | --- ## AuthService **Назначение:** Сервис аутентификации (заглушка для MVP). 📂 **Исходный код:** [`AuthService.cs`](../../backend/src/MyBiz.Core/AuthService.cs) ### Методы | Метод | Описание | |-------|----------| | `Register(username, email, password, companyName)` | Регистрация нового пользователя | | `Login(username, password)` | Вход в систему | | `Logout(token)` | Выход из системы | | `ValidateToken(token)` | Проверка токена | | `GetUserById(userId)` | Получить пользователя по ID | | `GetUserByUsername(username)` | Получить пользователя по имени | ### Возвращаемые значения **AuthResult:** | Свойство | Тип | Описание | |----------|-----|----------| | `Success` | bool | Успешна ли операция | | `User` | User? | Пользователь (если успешно) | | `Token` | string? | Токен доступа | | `ErrorMessage` | string? | Сообщение об ошибке | --- ## Примеры использования ### Регистрация нового пользователя ```csharp var authService = new AuthService(); var result = authService.Register( username: "ivan_ivanov", email: "ivan@example.com", password: "SecurePassword123", companyName: "Ivan Corp" ); if (result.Success) { var user = result.User; var token = result.Token; Console.WriteLine($"Пользователь {user.Username} зарегистрирован!"); Console.WriteLine($"Компания: {user.Company.Name}"); Console.WriteLine($"Стартовый капитал: {user.Company.Cash}$"); } else { Console.WriteLine($"Ошибка: {result.ErrorMessage}"); } ``` ### Вход в систему ```csharp var loginResult = authService.Login("ivan_ivanov", "SecurePassword123"); if (loginResult.Success) { var token = loginResult.Token; // Использовать токен для авторизации запросов } else { Console.WriteLine($"Ошибка входа: {loginResult.ErrorMessage}"); } ``` ### Проверка токена ```csharp var user = authService.ValidateToken(token); if (user != null) { Console.WriteLine($"Пользователь: {user.Username}"); Console.WriteLine($"Компания: {user.Company?.Name ?? "Нет компании"}"); } else { Console.WriteLine("Неверный токен"); } ``` ### Выход из системы ```csharp authService.Logout(token); ``` --- ## Company (обновлено) **Назначение:** Компания игрока с бизнес-единицами. 📂 **Исходный код:** [`Company.cs`](../../backend/src/MyBiz.Core/Company.cs) ### Новые свойства | Свойство | Тип | Описание | |----------|-----|----------| | `OwnerId` | Guid | ID владельца (пользователя) | | `BusinessUnits` | List | Бизнес-единицы компании | | `FoundedAt` | DateTime | Дата основания | ### Новые методы | Метод | Описание | |-------|----------| | `AddBusinessUnit(unit)` | Добавить бизнес-единицу | | `RemoveBusinessUnit(unitId)` | Удалить бизнес-единицу | | `Tick()` | Обновить все единицы (каждый тик) | | `CalculateTotalProfit()` | Рассчитать общую прибыль | | `CalculateAssets()` | Рассчитать стоимость активов | ### Свойства для фильтрации | Свойство | Тип | Описание | |----------|-----|----------| | `Shops` | IEnumerable | Все магазины | | `Factories` | IEnumerable | Все фабрики | | `Warehouses` | IEnumerable | Все склады | --- ## Примеры использования Company ### Добавление бизнес-единицы ```csharp var company = new Company { Name = "My Corp", Cash = 100000m }; // Добавить магазин var shop = new Shop { Name = "Главный магазин", CityId = "city_1", X = 100, Y = 200 }; company.AddBusinessUnit(shop); // Добавить фабрику var factory = new Factory { Name = "Текстильная фабрика", CityId = "city_1", OutputProductId = "comp_fabric" }; company.AddBusinessUnit(factory); Console.WriteLine($"Магазинов: {company.Shops.Count()}"); Console.WriteLine($"Фабрик: {company.Factories.Count()}"); ``` ### Обновление состояния (тик) ```csharp // Каждый тик игры: company.Tick(); // Обновляются: // - Эффективность единиц // - Производственные цепочки // - Статистика ``` ### Расчёт прибыли ```csharp var shop1 = new Shop { LastPeriodIncome = 10000m, LastPeriodExpenses = 7000m }; var shop2 = new Shop { LastPeriodIncome = 15000m, LastPeriodExpenses = 10000m }; company.AddBusinessUnit(shop1); company.AddBusinessUnit(shop2); var totalProfit = company.CalculateTotalProfit(); // (10000 - 7000) + (15000 - 10000) = 8000m ``` --- ## Тесты 📂 **Код:** [`backend/tests/MyBiz.Tests/UserTests.cs`](../../backend/tests/MyBiz.Tests/UserTests.cs) ### UserTests | Тест | Описание | |------|----------| | `User_Creation_ShouldInitializeProperties` | Создание пользователя | | `User_Company_Assignment_ShouldWork` | Назначение компании | | `UserStats_ShouldInitializeDefaults` | Инициализация статистики | ### AuthServiceTests | Тест | Описание | |------|----------| | `AuthService_Register_ShouldCreateUser` | Регистрация пользователя | | `AuthService_Register_DuplicateUsername_ShouldFail` | Дубликат имени | | `AuthService_Login_CorrectCredentials_ShouldSucceed` | Успешный вход | | `AuthService_Login_WrongPassword_ShouldFail` | Неверный пароль | | `AuthService_Login_NonExistentUser_ShouldFail` | Несуществующий пользователь | | `AuthService_Logout_ShouldInvalidateToken` | Выход из системы | | `AuthService_ValidateToken_ValidToken_ShouldReturnUser` | Проверка токена | | `AuthService_GetUserById_ShouldReturnUser` | Поиск по ID | ### BusinessUnitTests | Тест | Описание | |------|----------| | `BusinessUnit_Creation_ShouldInitializeProperties` | Создание единицы | | `BusinessUnit_HireEmployee_ShouldIncreaseCount` | Найм сотрудника | | `BusinessUnit_FireEmployee_ShouldDecreaseCount` | Увольнение | | `BusinessUnit_Upgrade_ShouldIncreaseLevel` | Повышение уровня | | `BusinessUnit_UpdateEfficiency_*` | Расчёт эффективности | ### ShopTests, FactoryTests, WarehouseTests, ResearchLabTests | Тест | Описание | |------|----------| | `*_Creation_ShouldInitializeDefaults` | Инициализация | | `*_Calculation_ShouldBeCorrect` | Расчёты | | `*_AddToInventory/*_RemoveFromInventory` | Операции с запасами | ### CompanyBusinessUnitTests | Тест | Описание | |------|----------| | `Company_AddBusinessUnit_ShouldAddToList` | Добавление единицы | | `Company_Shops_Filter_ShouldReturnOnlyShops` | Фильтрация магазинов | | `Company_CalculateTotalProfit_ShouldSumAllUnits` | Расчёт прибыли | | `Company_Tick_ShouldUpdateAllUnits` | Обновление состояния | --- ## Связанные документы - [Ядро](core.md) — базовые классы - [Бизнес-единицы](business-units.md) — детальное описание единиц - [Здания](buildings.md) — типы зданий --- **Последнее обновление:** 21.02.2026