Add technical documentation for user management and business units
This commit is contained in:
@@ -7,20 +7,22 @@
|
|||||||
| Раздел | Описание | Файл |
|
| Раздел | Описание | Файл |
|
||||||
|--------|----------|------|
|
|--------|----------|------|
|
||||||
| **Ядро** | Базовые классы и структуры данных | [core.md](core.md) |
|
| **Ядро** | Базовые классы и структуры данных | [core.md](core.md) |
|
||||||
|
| **Управление пользователем** | User, AuthService, аутентификация | [user-management.md](user-management.md) |
|
||||||
|
| **Бизнес-единицы** | Shop, Factory, Warehouse, Office, ResearchLab | [business-units.md](business-units.md) |
|
||||||
| **Продукты** | Система продуктов и товаров | [products.md](products.md) |
|
| **Продукты** | Система продуктов и товаров | [products.md](products.md) |
|
||||||
| **Здания** | Типы зданий и предприятия | [buildings.md](buildings.md) |
|
| **Здания** | Типы зданий и предприятия | [buildings.md](buildings.md) |
|
||||||
| **Производство** | Цепочки и процессы производства | [production.md](production.md) |
|
| **Производство** | Цепочки и процессы производства | [production.md](production.md) |
|
||||||
| **Экономика** | Экономическая модель | [economy.md](economy.md) |
|
| **Экономика** | Экономическая модель | [economy.md](economy.md) ⬜ |
|
||||||
| **Торговля** | Рынки, спрос, предложение | [trade.md](trade.md) |
|
| **Торговля** | Рынки, спрос, предложение | [trade.md](trade.md) ⬜ |
|
||||||
| **Исследования** | Дерево технологий | [research.md](research.md) |
|
| **Исследования** | Дерево технологий | [research.md](research.md) ⬜ |
|
||||||
| **Архитектура** | Общая архитектура системы | [architecture.md](architecture.md) |
|
| **Архитектура** | Общая архитектура системы | [architecture.md](architecture.md) ⬜ |
|
||||||
|
|
||||||
## 📁 Структура исходного кода
|
## 📁 Структура исходного кода
|
||||||
|
|
||||||
```
|
```
|
||||||
backend/
|
backend/
|
||||||
├── src/
|
├── src/
|
||||||
│ ├── MyBiz.Core/ # Базовые модели
|
│ ├── MyBiz.Core/ # Базовые модели ✅
|
||||||
│ │ ├── ProductType.cs # Типы продуктов
|
│ │ ├── ProductType.cs # Типы продуктов
|
||||||
│ │ ├── Product.cs # Экземпляры продуктов
|
│ │ ├── Product.cs # Экземпляры продуктов
|
||||||
│ │ ├── ProductRegistry.cs # Реестр продуктов
|
│ │ ├── ProductRegistry.cs # Реестр продуктов
|
||||||
@@ -28,19 +30,22 @@ backend/
|
|||||||
│ │ ├── City.cs # Города
|
│ │ ├── City.cs # Города
|
||||||
│ │ ├── Company.cs # Компания
|
│ │ ├── Company.cs # Компания
|
||||||
│ │ ├── ProductionChain.cs # Производственные цепочки
|
│ │ ├── ProductionChain.cs # Производственные цепочки
|
||||||
│ │ └── DefaultProducts.cs # Дефолтные продукты
|
│ │ ├── DefaultProducts.cs # Дефолтные продукты
|
||||||
│ ├── MyBiz.Economy/ # Экономическая модель
|
│ │ ├── User.cs # Пользователь ✅
|
||||||
│ ├── MyBiz.Production/ # Производство
|
│ │ ├── AuthService.cs # Аутентификация ✅
|
||||||
│ └── MyBiz.Trade/ # Торговля
|
│ │ └── BusinessUnit.cs # Бизнес-единицы ✅
|
||||||
|
│ ├── MyBiz.Economy/ # Экономическая модель ⬜
|
||||||
|
│ ├── MyBiz.Production/ # Производство ⬜
|
||||||
|
│ └── MyBiz.Trade/ # Торговля ⬜
|
||||||
└── tests/
|
└── tests/
|
||||||
└── MyBiz.Tests/ # Тесты
|
└── MyBiz.Tests/ # Тесты (61 passing) ✅
|
||||||
```
|
```
|
||||||
|
|
||||||
## 🔗 Ссылки
|
## 🔗 Ссылки
|
||||||
|
|
||||||
- [Техническое задание](TZ.md)
|
- [Техническое задание](../TZ.md)
|
||||||
- [Репозиторий проекта](https://git.six83.ru/ssa/my-biz.git)
|
- [Репозиторий проекта](https://git.six83.ru/ssa/my-biz.git)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Последнее обновление:** 20.02.2026
|
**Последнее обновление:** 21.02.2026
|
||||||
|
|||||||
387
docs/tech/business-units.md
Normal file
387
docs/tech/business-units.md
Normal file
@@ -0,0 +1,387 @@
|
|||||||
|
# Бизнес-единицы (Business Units)
|
||||||
|
|
||||||
|
Детальное описание типов бизнес-единиц компании.
|
||||||
|
|
||||||
|
## Обзор
|
||||||
|
|
||||||
|
Бизнес-единица — операционная единица компании (магазин, фабрика, склад и т.д.).
|
||||||
|
|
||||||
|
📂 **Код:** [`backend/src/MyBiz.Core/BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Архитектура
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐
|
||||||
|
│ BusinessUnit │
|
||||||
|
│ (базовый) │
|
||||||
|
└────────┬────────┘
|
||||||
|
│
|
||||||
|
┌───────────────────┼───────────────────┐
|
||||||
|
│ │ │
|
||||||
|
▼ ▼ ▼
|
||||||
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ Shop │ │ Factory │ │ Warehouse │
|
||||||
|
│ (магазин) │ │ (фабрика) │ │ (склад) │
|
||||||
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
│ │ │
|
||||||
|
▼ ▼
|
||||||
|
┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ Office │ │ ResearchLab │
|
||||||
|
│ (офис) │ │ (лаборатория) │
|
||||||
|
└─────────────────┘ └─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## BusinessUnit (базовый класс)
|
||||||
|
|
||||||
|
**Назначение:** Базовый класс для всех бизнес-единиц.
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L33-L180)
|
||||||
|
|
||||||
|
### Основные свойства
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `Id` | Guid | Уникальный ID единицы |
|
||||||
|
| `Name` | string | Название |
|
||||||
|
| `Type` | BusinessUnitType | Тип единицы |
|
||||||
|
| `CompanyId` | Guid | ID компании-владельца |
|
||||||
|
| `CityId` | string | ID города |
|
||||||
|
| `X`, `Y` | int | Координаты на карте |
|
||||||
|
| `Level` | int | Уровень развития (1-10) |
|
||||||
|
| `Employees` | int | Количество сотрудников |
|
||||||
|
| `MaxEmployees` | int | Макс. количество сотрудников |
|
||||||
|
| `Efficiency` | int | Эффективность (0-100) |
|
||||||
|
| `BuildCost` | decimal | Стоимость постройки |
|
||||||
|
| `UpkeepCost` | decimal | Содержание в тик |
|
||||||
|
| `LastPeriodIncome` | decimal | Доход за период |
|
||||||
|
| `LastPeriodExpenses` | decimal | Расходы за период |
|
||||||
|
| `IsActive` | bool | Работает ли единица |
|
||||||
|
| `Building` | Building? | Ссылка на здание |
|
||||||
|
| `Inventory` | Dictionary<string, int> | Запасы |
|
||||||
|
| `ActiveProduction` | ActiveProductionChain? | Производственная цепочка |
|
||||||
|
|
||||||
|
### Вычисляемые свойства
|
||||||
|
|
||||||
|
| Свойство | Формула |
|
||||||
|
|----------|---------|
|
||||||
|
| `PeriodProfit` | `LastPeriodIncome - LastPeriodExpenses` |
|
||||||
|
| `Profitability` | `(PeriodProfit / LastPeriodExpenses) * 100` |
|
||||||
|
|
||||||
|
### Методы
|
||||||
|
|
||||||
|
| Метод | Описание |
|
||||||
|
|-------|----------|
|
||||||
|
| `UpdateEfficiency()` | Пересчитать эффективность |
|
||||||
|
| `Tick()` | Обновить состояние (каждый тик) |
|
||||||
|
| `HireEmployee()` | Нанять сотрудника |
|
||||||
|
| `FireEmployee()` | Уволить сотрудника |
|
||||||
|
| `Upgrade()` | Повысить уровень |
|
||||||
|
|
||||||
|
### Формула эффективности
|
||||||
|
|
||||||
|
```
|
||||||
|
staffRate = Employees / MaxEmployees
|
||||||
|
Efficiency = 100 * staffRate + (Level - 1) * 5
|
||||||
|
Efficiency = Clamp(Efficiency, 0, 100)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Пример:**
|
||||||
|
- MaxEmployees = 10, Employees = 8 → 80%
|
||||||
|
- Level = 3 → +10%
|
||||||
|
- **Итого:** 90%
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Shop (магазин)
|
||||||
|
|
||||||
|
**Назначение:** Розничная торговля товарами.
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L185-L210)
|
||||||
|
|
||||||
|
### Свойства
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `SoldProductTypes` | List<string> | Типы продаваемых продуктов |
|
||||||
|
| `DailyRevenue` | decimal | Выручка за день |
|
||||||
|
| `DailyCustomers` | int | Количество клиентов |
|
||||||
|
|
||||||
|
### Вычисляемые
|
||||||
|
|
||||||
|
| Свойство | Формула |
|
||||||
|
|----------|---------|
|
||||||
|
| `AverageCheck` | `DailyRevenue / DailyCustomers` |
|
||||||
|
|
||||||
|
### Параметры по умолчанию
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| `MaxEmployees` | 20 |
|
||||||
|
| `BuildCost` | 50 000 |
|
||||||
|
| `UpkeepCost` | 1 000 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Factory (фабрика)
|
||||||
|
|
||||||
|
**Назначение:** Производство товаров из сырья/компонентов.
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L215-L240)
|
||||||
|
|
||||||
|
### Свойства
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `OutputProductId` | string? | ID производимого продукта |
|
||||||
|
| `RequiredInputs` | Dictionary<string, int> | Требуемые ресурсы |
|
||||||
|
| `LastTickOutput` | int | Произведено за тик |
|
||||||
|
|
||||||
|
### Вычисляемые
|
||||||
|
|
||||||
|
| Свойство | Описание |
|
||||||
|
|----------|----------|
|
||||||
|
| `IsIdle` | `ActiveProduction == null \|\| !ActiveProduction.IsActive` |
|
||||||
|
|
||||||
|
### Параметры по умолчанию
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| `MaxEmployees` | 100 |
|
||||||
|
| `BuildCost` | 200 000 |
|
||||||
|
| `UpkeepCost` | 5 000 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Warehouse (склад)
|
||||||
|
|
||||||
|
**Назначение:** Хранение товаров и сырья.
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L245-L295)
|
||||||
|
|
||||||
|
### Свойства
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `Capacity` | int | Вместимость (единиц) |
|
||||||
|
| `UsedCapacity` | int | Использовано места |
|
||||||
|
| `FreeCapacity` | int | Свободно места |
|
||||||
|
|
||||||
|
### Методы
|
||||||
|
|
||||||
|
| Метод | Описание |
|
||||||
|
|-------|----------|
|
||||||
|
| `AddToInventory(productId, quantity)` | Добавить товар |
|
||||||
|
| `RemoveFromInventory(productId, quantity)` | Взять товар |
|
||||||
|
|
||||||
|
### Параметры по умолчанию
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| `MaxEmployees` | 10 |
|
||||||
|
| `BuildCost` | 30 000 |
|
||||||
|
| `UpkeepCost` | 500 |
|
||||||
|
| `Capacity` | 10 000 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Office (офис)
|
||||||
|
|
||||||
|
**Назначение:** Управление компанией, бонусы к эффективности.
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L300-L325)
|
||||||
|
|
||||||
|
### Свойства
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `ManagementBonus` | int | Бонус к управлению (%) |
|
||||||
|
| `ManagedBuildings` | int | Количество управляемых зданий |
|
||||||
|
|
||||||
|
### Параметры по умолчанию
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| `MaxEmployees` | 50 |
|
||||||
|
| `BuildCost` | 100 000 |
|
||||||
|
| `UpkeepCost` | 3 000 |
|
||||||
|
| `ManagementBonus` | 5 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ResearchLab (научная лаборатория)
|
||||||
|
|
||||||
|
**Назначение:** Исследование новых технологий.
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L330-L375)
|
||||||
|
|
||||||
|
### Свойства
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `CurrentResearch` | string? | Текущее исследование |
|
||||||
|
| `ResearchProgress` | int | Прогресс (0-100%) |
|
||||||
|
|
||||||
|
### Вычисляемые
|
||||||
|
|
||||||
|
| Свойство | Формула |
|
||||||
|
|----------|---------|
|
||||||
|
| `SciencePerTick` | `Employees * 10 * Efficiency / 100` |
|
||||||
|
|
||||||
|
### Методы
|
||||||
|
|
||||||
|
| Метод | Описание |
|
||||||
|
|-------|----------|
|
||||||
|
| `StartResearch(technologyId)` | Начать исследование |
|
||||||
|
| `Tick()` | Обновление прогресса |
|
||||||
|
|
||||||
|
### Параметры по умолчанию
|
||||||
|
|
||||||
|
| Параметр | Значение |
|
||||||
|
|----------|----------|
|
||||||
|
| `MaxEmployees` | 30 |
|
||||||
|
| `BuildCost` | 150 000 |
|
||||||
|
| `UpkeepCost` | 4 000 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Перечисления
|
||||||
|
|
||||||
|
### BusinessUnitType
|
||||||
|
|
||||||
|
| Значение | Описание |
|
||||||
|
|----------|----------|
|
||||||
|
| `Shop` | Магазин (розничная торговля) |
|
||||||
|
| `Factory` | Фабрика (производство) |
|
||||||
|
| `Warehouse` | Склад (хранение) |
|
||||||
|
| `Office` | Офис (управление) |
|
||||||
|
| `ResearchLab` | Научная лаборатория |
|
||||||
|
|
||||||
|
📂 **Исходный код:** [`BusinessUnit.cs`](../../backend/src/MyBiz.Core/BusinessUnit.cs#L5-L22)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Примеры использования
|
||||||
|
|
||||||
|
### Создание магазина
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var shop = new Shop
|
||||||
|
{
|
||||||
|
Name = "Центральный магазин",
|
||||||
|
CityId = "city_1",
|
||||||
|
X = 150,
|
||||||
|
Y = 200,
|
||||||
|
Employees = 10,
|
||||||
|
SoldProductTypes = { "goods_food", "goods_clothing" }
|
||||||
|
};
|
||||||
|
|
||||||
|
shop.HireEmployee(); // +1 сотрудник
|
||||||
|
shop.UpdateEfficiency();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание фабрики с производством
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var factory = new Factory
|
||||||
|
{
|
||||||
|
Name = "Текстильная фабрика",
|
||||||
|
CityId = "city_1",
|
||||||
|
OutputProductId = "comp_fabric",
|
||||||
|
RequiredInputs = { ["raw_cotton"] = 50 },
|
||||||
|
Employees = 50
|
||||||
|
};
|
||||||
|
|
||||||
|
// Запуск производства
|
||||||
|
var config = new ProductionChainConfig
|
||||||
|
{
|
||||||
|
Id = "chain_fabric",
|
||||||
|
OutputProductId = "comp_fabric",
|
||||||
|
OutputQuantity = 40,
|
||||||
|
RequiredBuildingId = "textile_factory",
|
||||||
|
Steps = new List<ProductionStep>
|
||||||
|
{
|
||||||
|
new() { InputProductId = "raw_cotton", InputQuantity = 50, ProductionTime = 10 }
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
factory.ActiveProduction = new ActiveProductionChain
|
||||||
|
{
|
||||||
|
Config = config,
|
||||||
|
Building = new Building(),
|
||||||
|
IsActive = true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Каждый тик:
|
||||||
|
factory.Tick();
|
||||||
|
```
|
||||||
|
|
||||||
|
### Управление складом
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var warehouse = new Warehouse { Capacity = 5000 };
|
||||||
|
|
||||||
|
// Добавить товары
|
||||||
|
warehouse.AddToInventory("raw_cotton", 1000);
|
||||||
|
warehouse.AddToInventory("raw_steel", 500);
|
||||||
|
|
||||||
|
Console.WriteLine($"Заполнено: {warehouse.UsedCapacity}/{warehouse.Capacity}");
|
||||||
|
|
||||||
|
// Взять товары
|
||||||
|
var taken = warehouse.RemoveFromInventory("raw_cotton", 300);
|
||||||
|
Console.WriteLine($"Взято: {taken}");
|
||||||
|
```
|
||||||
|
|
||||||
|
### Исследование технологий
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
var lab = new ResearchLab
|
||||||
|
{
|
||||||
|
Employees = 20,
|
||||||
|
Efficiency = 100
|
||||||
|
};
|
||||||
|
|
||||||
|
lab.StartResearch("tech_advanced_production");
|
||||||
|
|
||||||
|
// Каждый тик:
|
||||||
|
lab.Tick();
|
||||||
|
|
||||||
|
if (lab.ResearchProgress >= 100)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Технология изучена!");
|
||||||
|
// Добавить технологию в компанию
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Тесты
|
||||||
|
|
||||||
|
📂 **Код:** [`backend/tests/MyBiz.Tests/UserTests.cs`](../../backend/tests/MyBiz.Tests/UserTests.cs)
|
||||||
|
|
||||||
|
| Класс тестов | Количество | Описание |
|
||||||
|
|--------------|------------|----------|
|
||||||
|
| `BusinessUnitTests` | 10 | Базовый класс |
|
||||||
|
| `ShopTests` | 3 | Магазины |
|
||||||
|
| `FactoryTests` | 3 | Фабрики |
|
||||||
|
| `WarehouseTests` | 6 | Склады |
|
||||||
|
| `ResearchLabTests` | 4 | Лаборатории |
|
||||||
|
| `CompanyBusinessUnitTests` | 6 | Компания + единицы |
|
||||||
|
|
||||||
|
**Всего:** 32 теста
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Связанные документы
|
||||||
|
|
||||||
|
- [Ядро](core.md) — базовые классы
|
||||||
|
- [Управление пользователем](user-management.md) — User, Company
|
||||||
|
- [Производство](production.md) — цепочки производства
|
||||||
|
- [Здания](buildings.md) — типы зданий
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Последнее обновление:** 21.02.2026
|
||||||
341
docs/tech/user-management.md
Normal file
341
docs/tech/user-management.md
Normal file
@@ -0,0 +1,341 @@
|
|||||||
|
# Управление пользователем (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<BusinessUnit> | Бизнес-единицы компании |
|
||||||
|
| `FoundedAt` | DateTime | Дата основания |
|
||||||
|
|
||||||
|
### Новые методы
|
||||||
|
|
||||||
|
| Метод | Описание |
|
||||||
|
|-------|----------|
|
||||||
|
| `AddBusinessUnit(unit)` | Добавить бизнес-единицу |
|
||||||
|
| `RemoveBusinessUnit(unitId)` | Удалить бизнес-единицу |
|
||||||
|
| `Tick()` | Обновить все единицы (каждый тик) |
|
||||||
|
| `CalculateTotalProfit()` | Рассчитать общую прибыль |
|
||||||
|
| `CalculateAssets()` | Рассчитать стоимость активов |
|
||||||
|
|
||||||
|
### Свойства для фильтрации
|
||||||
|
|
||||||
|
| Свойство | Тип | Описание |
|
||||||
|
|----------|-----|----------|
|
||||||
|
| `Shops` | IEnumerable<Shop> | Все магазины |
|
||||||
|
| `Factories` | IEnumerable<Factory> | Все фабрики |
|
||||||
|
| `Warehouses` | IEnumerable<Warehouse> | Все склады |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Примеры использования 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
|
||||||
Reference in New Issue
Block a user