Перейти к основному содержимому

GET /api/v1/my/wallet/transactions — История транзакций моего кошелька

Назначение

Отдаёт пользователю постраничную историю движений по его счетам кошелька: начисления по сделкам (CommissionCredit), реферальные начисления (ReferralCredit), выплаты (PayoutDebit), корректировки (Adjustment/Correction). Пользователь видит, из чего сложился текущий баланс каждого счёта и когда прошла каждая операция.

Metadata

ПолеЗначение
Сервис/контекстwallet
API areauser
Feature groupmy-wallet
Статусdraft
Документdocs/06-services/wallet/api/user/list-my-wallet-transactions.md

Актор и доступ

ПроверкаЗначение
Actor typeUser (агент / партнёр / любой пользователь-холдер)
Auth policy / Permissionswallet.transactions.view-own
Scope (RBAC)платформа (личные данные пользователя)
Record-levelтолько проводки по счетам с HolderUserId = текущий пользователь

HTTP-контракт

ПолеЗначение
MethodGET
Route/api/v1/my/wallet/transactions
Success status200
Correlationсквозной trace через заголовок traceparent

Входные данные / параметры запроса

ПолеИсточникТипОбязательностьВалидация / Ограничения
UserIdidentity claimsGuidДатекущий пользователь — record-level граница выборки
AccountKindquerystring? (enum WalletAccountKind)НетAgentCommission / ReferralCommission; не указан — по всем счетам пользователя
OperationKindquerystring? (enum WalletOperationKind)Нетфильтр по виду операции (../../domain/ledger-transaction.md)
FromqueryDateTimeOffset?Нетфильтр по OccurredAt >= From
ToqueryDateTimeOffset?Нетфильтр по OccurredAt < To; при обоих границах From < To
Page / PageSizequeryintНетpaging — ../README.md

Модель ответа

Страница WalletTransactionModel (дом модели и paging-конверт — ../README.md). Сортировка — OccurredAt по убыванию (новые сверху); внутри одинакового момента — по TransactionId (стабильный порядок страниц). Каждая строка несёт AccountKind — при выборке без фильтра истории двух счетов различимы.

Алгоритм

  1. Определить счета пользователя (HolderUserId = текущий); при заданном AccountKind — только счёт этого вида. Счетов нет → 200 с пустой страницей.
  2. Проверить фильтры: AccountKind/OperationKind вне enum / From >= To / paging вне диапазонов → ValidationError.
  3. Выбрать проводки этих счетов из журнала по фильтру периода, спроецировать в WalletTransactionModel (Amount — со знаком относительно счёта, BalanceAfter — зафиксированный при проведении), вернуть страницу. Журнал append-only — история не меняется задним числом; корректировки видны отдельными строками Correction/Adjustment, а не правкой прежних.

Ошибки и failure modes

Только общие ошибки области (../README.md): ValidationError (400), UNAUTHORIZED (401), FORBIDDEN (403).

Совместимость и наблюдаемость

  • Новые значения WalletOperationKind — additive: клиент показывает неизвестный вид операции как «прочее», не падая.
  • Logs: запрос без сумм (UserId, фильтры, размер страницы); metrics: латентность p95; traces — traceparent.

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные документы