11 KiB
11 KiB
Управление пользователем (User Management)
Система пользователей, аутентификации и владения компанией.
Обзор
Модуль управления пользователями включает регистрацию, аутентификацию и связь пользователя с компанией.
📂 Код: backend/src/MyBiz.Core/User.cs, AuthService.cs
Архитектура
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ User │ ──────► │ Company │ ──────► │ BusinessUnit│
│ (пользов.) │ OwnerId │ (компания) │ Units │ (единицы) │
│ │ │ │ │ │
│ - Username │ │ - Cash │ │ - Shop │
│ - Email │ │ - Assets │ │ - Factory │
│ - Password │ │ - Buildings │ │ - Warehouse │
│ Hash │ │ - Units │ │ - Office │
│ │ │ │ │ - Lab │
└─────────────┘ └─────────────┘ └─────────────┘
▲
│
┌─────────────┐
│ AuthService │
│ (аутентиф.) │
└─────────────┘
User
Назначение: Пользователь системы (игрок).
📂 Исходный код: 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
Свойства
| Свойство | Тип | Описание |
|---|---|---|
GamesPlayed |
int | Всего игр сыграно |
TotalHoursPlayed |
int | Всего часов в игре |
MaxNetWorth |
decimal | Максимальная чистая стоимость |
TotalBuildingsBuilt |
int | Всего зданий построено |
FirstGameDate |
DateTime? | Дата первой игры |
LastGameDate |
DateTime? | Дата последней игры |
AuthService
Назначение: Сервис аутентификации (заглушка для MVP).
📂 Исходный код: 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? | Сообщение об ошибке |
Примеры использования
Регистрация нового пользователя
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}");
}
Вход в систему
var loginResult = authService.Login("ivan_ivanov", "SecurePassword123");
if (loginResult.Success)
{
var token = loginResult.Token;
// Использовать токен для авторизации запросов
}
else
{
Console.WriteLine($"Ошибка входа: {loginResult.ErrorMessage}");
}
Проверка токена
var user = authService.ValidateToken(token);
if (user != null)
{
Console.WriteLine($"Пользователь: {user.Username}");
Console.WriteLine($"Компания: {user.Company?.Name ?? "Нет компании"}");
}
else
{
Console.WriteLine("Неверный токен");
}
Выход из системы
authService.Logout(token);
Company (обновлено)
Назначение: Компания игрока с бизнес-единицами.
📂 Исходный код: Company.cs
Новые свойства
| Свойство | Тип | Описание |
|---|---|---|
OwnerId |
Guid | ID владельца (пользователя) |
BusinessUnits |
List | Бизнес-единицы компании |
FoundedAt |
DateTime | Дата основания |
Новые методы
| Метод | Описание |
|---|---|
AddBusinessUnit(unit) |
Добавить бизнес-единицу |
RemoveBusinessUnit(unitId) |
Удалить бизнес-единицу |
Tick() |
Обновить все единицы (каждый тик) |
CalculateTotalProfit() |
Рассчитать общую прибыль |
CalculateAssets() |
Рассчитать стоимость активов |
Свойства для фильтрации
| Свойство | Тип | Описание |
|---|---|---|
Shops |
IEnumerable | Все магазины |
Factories |
IEnumerable | Все фабрики |
Warehouses |
IEnumerable | Все склады |
Примеры использования Company
Добавление бизнес-единицы
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()}");
Обновление состояния (тик)
// Каждый тик игры:
company.Tick();
// Обновляются:
// - Эффективность единиц
// - Производственные цепочки
// - Статистика
Расчёт прибыли
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
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 |
Обновление состояния |
Связанные документы
- Ядро — базовые классы
- Бизнес-единицы — детальное описание единиц
- Здания — типы зданий
Последнее обновление: 21.02.2026