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

GET /api/admin/v1/property-object-types — Список настроек типов объектов недвижимости (admin)

Назначение

Отдаёт администратору платформы полный список настроенных типов объектов недвижимости — агрегатов PropertyObjectTypeConfig (nullable-оверрайды платформенной модели по группе планировок LayoutGroup) для таба «Настройка объектов недвижимости → типы объектов недвижимости». Для каждого типа дополнительно отдаётся число помесячных оверрайдов (monthOverridesCount) — админка показывает бейдж заполненности. Типы, для которых настройка не создавалась, в список не входят (расчёт для них идёт по платформенному уровню); справочник всех групп планировок админка берёт у chessboard.

Metadata

ПолеЗначение
Сервис/контекстinvest-analytics
API areaadmin (ADR-0053)
Feature groupadmin-property-object-types
Статусdraft
Документdocs/06-services/invest-analytics/api/admin/list-property-object-types.md

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

ПроверкаЗначение
Actor typeOperator(Admin) — администратор платформы (доступ через admin API, m2m client-credentials)
Auth policy / Permissionspolicy AdminSystemOnly (клиент pin-admin-system); каталожное соответствие — permission invest-analytics.property-object-types.view
Scope (RBAC)платформа
Tenant isolationне применяется — платформенная настройка (ADR-0052 п.3)
Auditread: не аудируется (PII нет)

HTTP-контракт

ПолеЗначение
MethodGET
Route/api/admin/v1/property-object-types
Success status200
Idempotency headerне применяется (safe GET)
Correlationсквозной trace через traceparent; X-Admin-User-Id — обязателен

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

ПолеИсточникТипОбязательностьВалидация / ОграниченияБезопасность
AdminUserIdheader X-Admin-User-IdGuidДа!= Guid.Emptyконтекст admin-области

Пагинация не применяется — таблица маленькая (единицы–десятки типов на всю платформу, ../../domain/property-object-type-config.md); отдаётся полный список.

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

ПолеТипОбязательностьИсточникMaskingОписание
itemsIReadOnlyList<PropertyObjectTypeItemModel>Да (может быть пуст)проекцияНастроенные типы, сортировка по name ASC.

PropertyObjectTypeItemModel

Проекция полей дома property-object-type-config.md (null = «наследовать от платформы»; семантика коэффициентов — economic-model-config.md):

ПолеТипОбязательностьИсточникMaskingОписание
groupIdlongДаPropertyObjectTypeConfig.IdГруппа планировок (натуральный ключ, chessboard).
namestringДа.NameОтображаемое имя типа («Стандарт», «Люкс»…).
marketPremiumdecimal?Нет.MarketPremiumОверрайд надбавки к прайсу.
priceGrowthMonthlydecimal?Нет.PriceGrowthMonthlyОверрайд роста цены.
dailyRentM2decimal?Нет.DailyRentM2Оверрайд аренды.
rentGrowthMonthlydecimal?Нет.RentGrowthMonthlyОверрайд роста аренды.
expenseSharedecimal?Нет.ExpenseShareОверрайд доли расходов.
appreciationTaxMonthlydecimal?Нет.AppreciationTaxMonthlyЛегаси-оверрайд (в расчёте не участвует).
ebitdaTaxMonthlydecimal?Нет.EbitdaTaxMonthlyЛегаси-оверрайд.
occupancydecimal?Нет.OccupancyОверрайд заполняемости.
horizonMonthsint?Нет.HorizonMonthsОверрайд горизонта.
monthOverridesCountintДаcount по property_object_type_month_overrides.GroupIdЧисло помесячных оверрайдов типа.
versionlongДа.VersionРевизия (для expectedVersion в PUT).
updatedAtDateTimeOffsetДа.UpdatedAtПоследняя правка.
updatedByUserIdGuid?Нет.UpdatedByUserIdАктор последней правки.

Алгоритм

  1. Контекст и доступ. Администратор платформы через admin API (policy AdminSystemOnly); scope — платформа; право invest-analytics.property-object-types.view; заголовок X-Admin-User-Id.
  2. Проверка входа. X-Admin-User-Id непустой — иначе ValidationError. Параметров у списка нет.
  3. Что читаем. Полный список настроенных типов, отсортированный по name ASC; для каждого типа — число его помесячных оверрайдов (агрегированный счётчик по GroupId, сами children не материализуются).
  4. Правила и маппинг. Каждый агрегат проецируется в PropertyObjectTypeItemModel; monthOverridesCount — счётчик из проекции (0, если оверрайдов нет).
  5. Результат. Список настроенных типов; пустой список — валидный ответ (ни один тип не настроен, расчёты идут по платформенному уровню).

Ошибки и failure modes

КодHTTP statusУсловиеСообщениеRetry
ValidationError400Отсутствует/пустой X-Admin-User-IdОшибка валидации запросаno retry
FORBIDDEN403Клиент не pin-admin-system / нет policyДоступ запрещёнno retry

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

  • Additive-поля item-модели — без breaking; удаление/переименование — breaking. Если типов станет много (сотни) — пагинация добавляется additive (page/pageSize c дефолтом «всё»), текущий контракт не ломается.
  • Logs: admin-property-object-types-listed (adminUserId, count). Metrics: invest_analytics_admin_operations_total{operation="list-property-object-types"}. Traces — сквозной trace через traceparent.

Acceptance Criteria

  • Given настроено 2 типа объектов недвижимости, When администратор шлёт GET, Then 200 с items из 2 элементов, отсортированных name ASC; у каждого — version и monthOverridesCount.
  • Given тип имеет 5 помесячных оверрайдов, When GET, Then его monthOverridesCount = 5 (children не материализуются — только агрегированный счётчик).
  • Given ни один тип не настроен, When GET, Then 200 с items = [] — валидный ответ (расчёты идут по платформенному уровню).
  • Given заголовок X-Admin-User-Id отсутствует/пуст, When GET, Then 400 ValidationError.
  • Given клиент не pin-admin-system, When GET, Then 403 FORBIDDEN.

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

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

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