GET /api/v1/reward-rules/{ruleId} — Карточка правила вознаграждения
Точечное чтение одного правила вознаграждения застройщика — экран редактирования/просмотра правила в админке застройщика.
Назначение
Менеджер застройщика открывает правило для просмотра или правки (правка — update-reward-rule.md).
Owning-контекст — rewards, дом полей — domain/reward-rule.md.
Feature group — rules.
Metadata
| Поле | Значение |
|---|---|
| Сервис/контекст | rewards |
| API area | developer-admin |
| Feature group | rules |
| Статус | draft |
| Документ | docs/06-services/rewards/api/admin/get-reward-rule.md |
Актор и доступ
| Проверка | Значение |
|---|---|
| Actor type | User (менеджер компании-застройщика) |
| Auth policy / Permissions | rewards.rules.view |
| Scope (RBAC) | организация: компания Type = Developer |
| Record-level | не применяется |
| Tenant isolation | TenantId из claims; правило чужого tenant-а невидимо (интерсептор) → 404 |
| Audit | none (read) |
HTTP-контракт
| Поле | Значение |
|---|---|
| Method | GET |
| Route | /api/v1/reward-rules/{ruleId} |
| Success status | 200 |
| Idempotency header | не применяется (read) |
| Correlation | сквозной trace через заголовок traceparent |
Входные данные / параметры запроса
| Поле | Источник | Тип | Обязательность | Валидация / Ограничения | Безопасность |
|---|---|---|---|---|---|
TenantId | identity claims (tenant_id) | Guid | Да | Required | Tenant isolation |
RuleId | route {ruleId} | Guid | Да | Required, непустой Guid | — |
Модель ответа GetRewardRuleQueryResult
Обёртка над RewardRuleModel (дом — README.md) без дельты: единственное поле Rule.
| Поле | Тип | Обязательность | Источник | Masking | Описание |
|---|---|---|---|---|---|
Rule | RewardRuleModel | Да | RewardRuleEntity | — | Полная проекция правила, включая Conditions и Version (для optimistic-конкуренции последующей мутации). |
Алгоритм
Точечное чтение. Менеджер застройщика с правом rewards.rules.view запрашивает правило по RuleId
в scope своей организации. RuleId должен быть непустым (!= Guid.Empty) и корректным Guid — иначе
ValidationError (400; некорректный формат отклоняется до обращения к хранилищу). Правило ищется в
пределах tenant-а застройщика; читаются все статусы, включая Archived (история). Если правило не
найдено или принадлежит другому tenant-у → REWARDS_RULE_NOT_FOUND (404; существование чужого правила
не раскрывается). Иначе возвращается полная проекция RewardRuleModel (включая Conditions и Version
для последующей optimistic-конкуренции) → 200. Freshness — source of truth, без кэша: отдаётся
актуальное состояние на момент запроса.
Ошибки и failure modes
| Код | HTTP status | Условие | Сообщение | Retry |
|---|---|---|---|---|
ValidationError | 400 | RuleId пуст (Guid.Empty) или некорректный Guid | «Некорректный идентификатор правила» | no retry |
REWARDS_RULE_NOT_FOUND | 404 | Правило не существует или принадлежит другому tenant-у | «Правило не найдено» | no retry |
Общие коды — README.md.
Acceptance-критерии
- Happy path. Дано: правило существует в tenant-е актора, у актора есть
rewards.rules.view. Когда:GET /api/v1/reward-rules/{ruleId}. Тогда:200, полная проекцияRewardRuleModelс актуальнымVersion(для последующей optimistic-конкуренции) иConditions. - Архивное правило доступно. Дано: правило в статусе
Archived. Когда:GET. Тогда:200— архив читается как история (в отличие от списков «по умолчанию неархивные»). - Чужой tenant / не существует. Дано:
RuleIdпринадлежит другому застройщику либо отсутствует. Когда:GET. Тогда:404REWARDS_RULE_NOT_FOUND(существование чужого правила не раскрывается). - Пустой/некорректный идентификатор. Дано:
RuleId = Guid.Emptyили неразбираемый Guid. Когда:GET. Тогда:400ValidationError(до обращения к хранилищу). - Нет права. Дано: у актора нет
rewards.rules.view. Когда:GET. Тогда:403FORBIDDEN.
Совместимость и наблюдаемость
- Модель — общий
RewardRuleModel: изменения только additive. - Logs:
TenantId,RuleId; metrics:rewards_api_request_duration_seconds{route}; traces: OTel; dashboardrewards-overview; runbook — не применяется.
Обратные ссылки
Автоссылки: где используется этот документ.
- API (3): GET /api/v1/reward-rules — Список правил вознаграждений застройщика, PUT /api/v1/reward-rules/{ruleId} — Изменение правила вознаграждения, Rewards API — реестр операций и общие контрактные модели
- registries (1): Реестр API-методов PIN
Связанные документы
- Сущность: domain/reward-rule.md; модель — README.md.
- Мутации: update-reward-rule.md, activate-reward-rule.md.