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

GET /api/developers/v1/promotion-packages — Доступные пакеты продвижения

Назначение

Возвращает менеджеру компании витрину платформенных пакетов продвижения (PromotionPackage Status=Active, promotion-package.md) — экран «Продвижение» ЛК: пакеты «продвигать проект чаще» / «продвигать объекты проекта чаще» + продвижение постов ленты; покупка без оплаты — решение №10.

Metadata

ПолеЗначение
Сервис/контекстpromotion
API areadevelopers
Feature grouppromotions
Статусdraft
Документdocs/06-services/promotion/api/developers/list-promotion-packages.md

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

ПроверкаЗначение
Actor typeUser (менеджер компании — JWT identity)
Auth policy / Permissionspermission promotion.packages.view в scope организации
Scope (RBAC)организация
Record-levelне применяется
Tenant isolationпакеты не tenanted (каталог платформы, ADR-0052 п.3); актор всё равно принадлежит компании (для feature flag и телеметрии)
Auditnone (чтение платформенного каталога)

HTTP-контракт

ПолеЗначение
MethodGET
Route/api/developers/v1/promotion-packages
Success status200
Idempotency headerне применяется (чтение)
Correlationсквозной trace через заголовок traceparent

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

ПолеИсточникТипОбязательностьВалидация / ОграниченияБезопасность
Kindquerystring? (enum PromotionPackageKind)Нет∈ {ProjectBoost, PropertyObjectBoost, PostBoost}; null — все

Пагинация не применяется: активных пакетов — единицы/десятки (SEED-каталог платформы), отдаётся контейнер целиком.

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

ПолеТипОбязательностьИсточникMaskingОписание
ItemsPromotionPackageItem[]Да (может быть пустым)активные пакетыАктивные пакеты.
PurchaseEnabledboolДаfeature flag promotion.enabledДоступна ли покупка (флаг «скрыть покупку до готовности»).

Модель PromotionPackageItem (проекция PromotionPackage)

ПолеТипОбязательностьИсточникMaskingОписание
IdGuidДаPromotionPackage.IdПакет.
CodestringДаPromotionPackage.CodeСтабильный код (project-boost-week).
NamestringДаPromotionPackage.NameНазвание.
Descriptionstring?НетPromotionPackage.DescriptionМаркетинговый текст.
Kindstring (enum PromotionPackageKind)ДаPromotionPackage.KindProjectBoost / PropertyObjectBoost / PostBoost.
BoostWeightintДаPromotionPackage.BoostWeightВес буста.
DurationDaysintДаPromotionPackage.DurationDaysСрок действия.
MaxTargetsPerPurchaseint?НетPromotionPackage.MaxTargetsPerPurchaseЛимит целей (PropertyObjectBoost/PostBoost; null при ProjectBoost).
PriceAmountdecimalДаPromotionPackage.Price.AmountПрейскурант (информационно; оплата не требуется — решение №10).
PriceCurrencyIdshortДаPromotionPackage.Price.CurrencyIdСсылка на запись справочника валют handbook (RUB — ADR-0048); display-код/знак клиент берёт из lookup справочника.

Алгоритм

Тривиальное чтение витрины. Операцию выполняет менеджер компании (permission promotion.packages.view). Вход — необязательный фильтр Kind ∈ enum (иначе ValidationError). Отобрать активные пакеты (Status = Active, архив и черновики исключены) с фильтром по Kind, сортировка по Kind, затем BoostWeight (детерминированный порядок при равенстве — по Code). Поля пакета маппятся в PromotionPackageItem (PricePriceAmount/PriceCurrencyId); PurchaseEnabled — из feature flag promotion.enabled. Результат — PromotionPackageListResult, 200.

Граничные случаи. Нет активных пакетов (или под фильтр Kind ничего не подошло) → 200 с пустым Items (не ошибка). При promotion.enabled = false пакеты всё равно отдаются, но PurchaseEnabled = false — витрина видна, кнопка покупки скрыта/заблокирована; сама покупка в этом режиме вернёт PROMOTION_DISABLED (purchase-promotion.md).

Ошибки и failure modes

КодHTTP statusУсловиеСообщениеRetry
ValidationError400Невалидный KindОшибка валидации запросаno retry
UNAUTHORIZED401Нет/просрочен JWTТребуется авторизацияno retry
FORBIDDEN403Нет permission promotion.packages.viewДоступ запрещёнno retry

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

  • Новые optional поля item-а (будущие платёжные атрибуты) — additive; удаление/переименование — breaking.
  • Logs: promotion-packages-listed (tenantId актора, count); metrics: promotion_operations_total{operation="list-promotion-packages"}; traces — сквозной trace через traceparent. Dashboard promotion-overview.

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

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

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