Skip to main content

History

1. Summary

Goal: Агрегация и отображение истории активности пользователя в TMA.

User Value: Пользователь видит свои последние действия — открытия кейсов, результаты рулеток, выводы скинов, выигрыши в розыгрышах.


2. Business Logic

Source Types

Домен объединяет данные из нескольких источников:

TypeОписаниеИсточник данных
DAILY_CASEБесплатный ежедневный кейсcase_openings
PAID_CASEПлатный кейсcase_openings
SPINРулеткаspin_results
RAFFLEВыигрыш в розыгрышеuser_inventory (sourceType=RAFFLE_WIN)
WITHDRAWALВывод скинаwithdrawals

UI Filters

Дополнительные типы для фильтрации в интерфейсе:

FilterВключает
CASEDAILY_CASE + PAID_CASE
ROULETTESPIN

Rules

Read-only домен

История только читается — домен не изменяет данные. Записи создаются в соответствующих доменах (cases, streaks, inventory).

  • Показываются записи за последние 7 дней
  • Максимум 500 записей за запрос (default: 100)
  • Сортировка по дате (новые сверху)

3. Architecture

Key Components

КомпонентПутьОписание
Controllerbackend/src/domains/history/controllers/user-history.controller.tsHTTP handlers
Servicebackend/src/domains/history/services/history.service.tsBusiness logic
Repositorybackend/src/domains/history/repositories/history.repository.tsАгрегация из 4 таблиц
Routesbackend/src/domains/history/routes/user-history.routes.tsAPI endpoints

Data Flow


4. Database Schema

Source Tables

Домен не имеет собственных таблиц — агрегирует данные из:

ТаблицаМодельИспользуемые поля
case_openingsCaseOpeningid, userId, caseId, itemId, createdAt
spin_resultsSpinResultid, userId, rewardType, rewardValue, createdAt
user_inventoryUserInventoryid, userId, itemId, sourceType, createdAt
withdrawalsWithdrawalid, userId, itemId, status, createdAt

5. API Endpoints

User API

МетодЭндпоинтОписание
GET/api/history/recentПоследние события пользователя

Query Parameters

ParamTypeDefaultОписание
typeenumФильтр по типу события
caseIdstringФильтр по конкретному кейсу
limitnumber100Лимит записей (1-500)

Response Example

{
"items": [
{
"id": "uuid",
"type": "PAID_CASE",
"item": { "name": "AK-47 | Redline", "tier": "RARE" },
"case": { "name": "Weapon Case" },
"createdAt": "2024-01-15T12:00:00Z"
}
],
"total": 42
}