GET /api/v1/referral-rewards-exports/{jobId} — Статус выгрузки и ссылка на скачивание
Опрос задачи Excel-выгрузки реферальных вознаграждений, поставленной операцией create-referral-rewards-export.md: текущий статус жизненного цикла и — для завершённой задачи — короткоживущая подписанная ссылка на скачивание файла из приватного объектного хранилища (ADR-0041).
Назначение
Реферальный партнёр или Менеджер ПИН после постановки выгрузки опрашивает её статус («готовится» → «готово»)
и получает ссылку на XLSX-файл. Ссылка живёт ограниченное время (1 час) — при истечении клиент повторяет
запрос и получает новую, пока файл не удалён по retention. Feature group — referral-rewards-exports.
Metadata
| Поле | Значение |
|---|---|
| Сервис/контекст | rewards |
| API area | partner |
| Feature group | referral-rewards-exports |
| Статус | draft |
| Документ | docs/06-services/rewards/api/partner/get-referral-rewards-export-job.md |
Актор и доступ
| Проверка | Значение |
|---|---|
| Actor type | User (реферальный партнёр — свои задачи; Менеджер ПИН — все) |
| Auth policy / Permissions | rewards.referral.view-own или rewards.commission.view-all |
| Scope (RBAC) | партнёр — своя задача (OwnerUserId = ActorUserId); Менеджер ПИН — любая задача выгрузки |
| Record-level | партнёр видит только задачи, поставленные им самим; чужая задача невидима → 404 |
| Tenant isolation | не применяется (платформенная сущность) |
| Audit | выдача ссылки на скачивание — audit-запись ExportSensitive (актор, JobId, время выдачи URL) |
Партнёр (rewards.referral.view-own без view-all) видит только собственные задачи выгрузки. Менеджер ПИН
(rewards.commission.view-all) — любую задачу реферальной выгрузки.
HTTP-контракт
| Поле | Значение |
|---|---|
| Method | GET |
| Route | /api/v1/referral-rewards-exports/{jobId} |
| Success status | 200 |
| Idempotency header | не применяется (read; каждая выдача ссылки генерирует новый signed URL) |
| Correlation | сквозной trace через заголовок traceparent |
Входные данные / параметры запроса
| Поле | Источник | Тип | Обязательность | Валидация / Ограничения | Безопасность |
|---|---|---|---|---|---|
ActorUserId | identity claims (sub) | Guid | Да | Required | record-level / audit выдачи ссылки |
JobId | route {jobId} | Guid | Да | Required, непустой | — |
Модель ответа ReferralRewardsExportJobModel
Дом модели — README.md («Общие контрактные модели»). Особенности этого ответа:
DownloadUrl заполняется только при Status = Completed и непросроченном файле — подписанная ссылка на
объектное хранилище с TTL 1 час; в остальных статусах DownloadUrl = null. FailureCode заполняется
только при Status = Failed (например, REWARDS_EXPORT_ROW_LIMIT_EXCEEDED).
Алгоритм
- Контекст и доступ. Требуется
rewards.referral.view-ownилиrewards.commission.view-all. - Проверка входа и существования.
JobIdнепустой; задача существует и доступна актору (партнёр — только свояOwnerUserId = ActorUserId; Менеджер ПИН — любая) — иначеREWARDS_EXPORT_JOB_NOT_FOUND(чужая задача партнёру не раскрывается). - Проекция статуса. Возвращается текущее состояние задачи (
Queued/Running/Completed/Failed/Expired). ДляCompleted: если retention файла (7 дней) ещё не истёк — генерируется подписанная ссылка с TTL 1 час,DownloadUrlзаполняется, пишется audit-запись выдачи; если файл уже удалён по retention — задача отдаётся какExpired,DownloadUrl = null. - Результат.
ReferralRewardsExportJobModel→200. Клиент приQueued/Runningповторяет опрос (рекомендованный интервал — 5–10 с); приExpired— ставит новую выгрузку (create-referral-rewards-export.md); приFailed— читаетFailureCodeи сужает фильтры.
Ошибки и failure modes
Общие коды (ValidationError, FORBIDDEN, UNAUTHORIZED) — дом README.md «Общие
ошибки». Дельта операции:
| Код | HTTP status | Условие | Сообщение | Retry |
|---|---|---|---|---|
REWARDS_EXPORT_JOB_NOT_FOUND | 404 | Задача не существует или недоступна актору (партнёр — чужая задача) | «Выгрузка не найдена» | no retry |
Статус Failed самой задачи — не HTTP-ошибка: ответ 200 с Status = Failed и FailureCode (причины —
create-referral-rewards-export.md, «Ошибки»).
Acceptance criteria
- AC-1 (готовый файл). Given задача в
Completed, файл в хранилище (retention не истёк); WhenGET; Then200,Status = Completed,DownloadUrl— подписанная ссылка с TTL 1 час; выдача зафиксирована audit-записьюExportSensitive. - AC-2 (повторная выдача ссылки). Given прежняя ссылка истекла (прошло > 1 часа), файл ещё жив;
When повторный
GET; Then200с новой действующей ссылкой (каждая выдача — новый signed URL и новая audit-запись). - AC-3 (в процессе). Given задача
QueuedилиRunning; WhenGET; Then200, соответствующий статус,DownloadUrl = null; клиент продолжает опрос. - AC-4 (retention истёк). Given с момента готовности файла прошло > 7 дней; When
GET; Then200,Status = Expired,DownloadUrl = null— клиент ставит новую выгрузку. - AC-5 (неуспех генерации). Given задача упала (например, превышен лимит 100 000 строк); When
GET; Then200,Status = Failed,FailureCode = REWARDS_EXPORT_ROW_LIMIT_EXCEEDED,DownloadUrl = null. - AC-6 (чужая задача — партнёр). Given партнёр (
view-own) иJobIdзадачи другого партнёра; WhenGET; ThenREWARDS_EXPORT_JOB_NOT_FOUND(404) — без раскрытия существования. - AC-7 (Менеджер ПИН видит любую). Given актор с
view-allиJobIdзадачи любого партнёра; WhenGET; Then200со статусом задачи.
Совместимость и наблюдаемость
- Новые optional поля модели задачи — additive; новые значения статуса задачи — additive (unknown статус клиент трактует как «в процессе»).
- Logs:
JobId,ActorUserId,Status, факт выдачи ссылки (сам URL не логируется); metrics:rewards_export_download_url_issued_total; traces: OTel, correlation черезtraceparent. - Скачивание файла идёт напрямую из объектного хранилища по подписанной ссылке — минуя API
rewards(SLA API не зависит от размера файла, ADR-0041).
Обратные ссылки
Автоссылки: где используется этот документ.
- API (3): GET /api/v1/my/referral-accruals — Мои реферальные начисления (партнёр), POST /api/v1/referral-rewards-exports — Постановка Excel-выгрузки реферальных вознаграждений, Rewards API — реестр операций и общие контрактные модели
- Use Cases (1): US-реестр: Реферальный партнёр (US-PRT)
- Отчёты (2): Отчет/Export: Реферальные вознаграждения по партнёрам (referral-rewards-by-partner), Отчет/Export: Сводка реферальных вознаграждений за период (referral-rewards-period-summary)
- registries (1): Реестр API-методов PIN
Связанные документы
- Постановка выгрузки, лимиты и жизненный цикл задачи: create-referral-rewards-export.md.
- Контракты отчётов: ../../reports/referral-rewards-by-partner.md, ../../reports/referral-rewards-period-summary.md.
- Модель задачи и общие ошибки: README.md.
- ADR-0041 (signed URL, TTL, retention).