Files
my-biz/docs/tech/user-management.md

11 KiB
Raw Permalink Blame History

Управление пользователем (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