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

Chessboard API — реестр операций областей Developers и Admin

Индекс HTTP-операций контекста chessboard (Pin.Chessboard.Api) для областей developers (менеджер застройщика, scope своей компании) и admin (администратор платформы, ADR-0053). Public/Agents-области (лента, карточки, шахматка) — отдельные документы этого же каталога (будущие). Дом полей сущностей — ../domain/.

Metadata

ПолеЗначение
Сервис/контекстchessboard (Pin.Chessboard)
Статусdraft
Owning teamPIN Platform Core
Область действияAPI areas developers, admin

Общие правила областей

Область developers (менеджер застройщика)

ПравилоЗначение
Actor typeUser — сотрудник компании-застройщика (developer-manager)
АутентификацияJWT identity; claims: sub = UserId, tenant_id = CompanyId
Tenant isolationTenantId = CompanyId = DeveloperId (ADR-0052); выборки и мутации автоматически ограничены tenant-ом актора — чужие проекты/здания/объекты недвижимости недостижимы (404, не 403 — существование чужих записей не раскрывается)
Permissionschessboard.projects.manage, chessboard.buildings.manage, chessboard.property-objects.manage, chessboard.layouts.manage, chessboard.references.lookup — каталог и scope-назначения в ../../identity/domain/permission.md
Scope (RBAC)Организация (Organization(CompanyId)); scope «группа проектов/проект» — сужение через role assignments identity
Sync-guardРеплика-поля Talent (SyncSource = TalentChessboard) через API не меняются — инварианты *-SyncOwnedFields (INV-DEV-3, INV-PRJ-9, INV-BLD-7, INV-LAY-6)
Статусы объектов недвижимостиDevelopers API меняет только Free ↔ Hidden (INV-CHS-001); Reserved/Booked/Sold — исключительно события CRM
Route prefix/api/v1/developers/…

Область admin (администратор платформы, ADR-0053)

ПравилоЗначение
Actor typeАдминистратор платформы через admin API (m2m-токен, audience pin.chessboard.admin), id админа для аудита — в X-Admin-User-Id
Permissionschessboard.banks.manage, chessboard.hoteliers.manage
Tenant isolationНе применяется — справочники Bank/Hotelier платформенные, не привязаны к застройщику (ADR-0052 п.3)
AuditОбязателен: CreatedByUserId/UpdatedByUserId/DeletedByUserId = id админа из X-Admin-User-Id
Route prefix/api/v1/admin/…

Сквозные соглашения областей (идемпотентность, публикация событий, согласованность)

ПравилоЗначение
Идемпотентность createPOST-создание принимает опциональный Idempotency-Key; повтор с тем же ключом и телом возвращает первый результат без повторного создания и без повторного события; тот же ключ с иным телом → IDEMPOTENCY_KEY_MISMATCH (409). Массовый upsert объектов недвижимости — ключ обязателен.
Идемпотентность update/archivePUT/DELETE идемпотентны по природе: правка — сверка доменной версии (CHESSBOARD_CONCURRENCY_CONFLICT при расхождении), архив — по достигнутому состоянию DeletedAt != null (повтор — no-op).
Публикация событийКаждая мутация публикует snapshot-событие pin.chessboard.*-upserted.v1 (key = Id агрегата) в том же согласованном изменении (outbox); ответ 2xx не ждёт доставки. Порядок, версии и дедуп потребителя — ../README.md, «Гарантии Событий И Согласованность». Справочники Bank/Hotelier событий не публикуют (ADR-0056).
Согласованность для клиентаИзменение видно в кабинете застройщика / admin-выборках сразу (read-after-write); реплики соседей и публичная витрина — в пределах SLO применения событий; денормализованные агрегаты проекта — после project-aggregates-recalc (debounce 30 с).

Реестр операций — область developers

Проекты (feature group projects, permission chessboard.projects.manage)

#ОперацияHTTPRouteДокумент
1searchProjectsGET/api/v1/developers/projectsdevelopers-search-projects.md
2getProjectGET/api/v1/developers/projects/{projectId}developers-get-project.md
3createProjectPOST/api/v1/developers/projectsdevelopers-create-project.md
4updateProjectPUT/api/v1/developers/projects/{projectId}developers-update-project.md
5publishProjectPOST/api/v1/developers/projects/{projectId}/publishdevelopers-publish-project.md
6unpublishProjectPOST/api/v1/developers/projects/{projectId}/unpublishdevelopers-unpublish-project.md

Здания (feature group buildings, permission chessboard.buildings.manage)

#ОперацияHTTPRouteДокумент
7searchBuildingsGET/api/v1/developers/projects/{projectId}/buildingsdevelopers-search-buildings.md
8getBuildingGET/api/v1/developers/buildings/{buildingId}developers-get-building.md
9createBuildingPOST/api/v1/developers/projects/{projectId}/buildingsdevelopers-create-building.md
10updateBuildingPUT/api/v1/developers/buildings/{buildingId}developers-update-building.md
11setBuildingStatusPOST/api/v1/developers/buildings/{buildingId}/statusdevelopers-set-building-status.md

Объекты/объекты недвижимости (feature group propertyObjects, permission chessboard.property-objects.manage)

#ОперацияHTTPRouteДокумент
12searchPropertyObjectsGET/api/v1/developers/projects/{projectId}/property-objectsdevelopers-search-property-objects.md
13getPropertyObjectGET/api/v1/developers/property-objects/{propertyObjectId}developers-get-property-object.md
14createPropertyObjectPOST/api/v1/developers/buildings/{buildingId}/property-objectsdevelopers-create-property-object.md
15updatePropertyObjectPUT/api/v1/developers/property-objects/{propertyObjectId}developers-update-property-object.md
16bulkUpsertPropertyObjectsPOST/api/v1/developers/buildings/{buildingId}/property-objects/bulkdevelopers-bulk-upsert-property-objects.md
17changePropertyObjectPricePOST/api/v1/developers/property-objects/{propertyObjectId}/pricedevelopers-change-property-object-price.md
18hidePropertyObjectPOST/api/v1/developers/property-objects/{propertyObjectId}/hidedevelopers-hide-property-object.md
19unhidePropertyObjectPOST/api/v1/developers/property-objects/{propertyObjectId}/unhidedevelopers-unhide-property-object.md

Планировки и группы (feature group layouts, permission chessboard.layouts.manage)

#ОперацияHTTPRouteДокумент
20listLayoutsGET/api/v1/developers/projects/{projectId}/layoutsdevelopers-list-layouts.md
21createLayoutPOST/api/v1/developers/projects/{projectId}/layoutsdevelopers-create-layout.md
22updateLayoutPUT/api/v1/developers/layouts/{layoutId}developers-update-layout.md
23archiveLayoutPOST/api/v1/developers/layouts/{layoutId}/archivedevelopers-archive-layout.md
24listLayoutGroupsGET/api/v1/developers/projects/{projectId}/layout-groupsdevelopers-list-layout-groups.md
25createLayoutGroupPOST/api/v1/developers/projects/{projectId}/layout-groupsdevelopers-create-layout-group.md
26updateLayoutGroupPUT/api/v1/developers/layout-groups/{layoutGroupId}developers-update-layout-group.md
27archiveLayoutGroupPOST/api/v1/developers/layout-groups/{layoutGroupId}/archivedevelopers-archive-layout-group.md

Lookup справочников (feature group references, permission chessboard.references.lookup)

#ОперацияHTTPRouteДокумент
28lookupBanksGET/api/v1/developers/lookup/banksdevelopers-references-lookup.md
29lookupBankByIdGET/api/v1/developers/lookup/banks/{bankId}developers-references-lookup.md
30lookupHoteliersGET/api/v1/developers/lookup/hoteliersdevelopers-references-lookup.md
31lookupHotelierByIdGET/api/v1/developers/lookup/hoteliers/{hotelierId}developers-references-lookup.md

Lookup-методы продублированы в Agents API теми же запросами — маршруты /api/v1/agents/lookup/…, различие только в policy (агентские permissions); отдельно не документируются.

Реестр операций — область admin

#ОперацияHTTPRouteДокумент
32createBankPOST/api/v1/admin/banksadmin-banks-crud.md
33searchBanksGET/api/v1/admin/banksadmin-banks-crud.md
34getBankGET/api/v1/admin/banks/{bankId}admin-banks-crud.md
35updateBankPUT/api/v1/admin/banks/{bankId}admin-banks-crud.md
36deleteBankDELETE/api/v1/admin/banks/{bankId}admin-banks-crud.md
37lookupBanks (admin)GET/api/v1/admin/lookup/banks (+/{bankId})admin-banks-crud.md
38createHotelierPOST/api/v1/admin/hoteliersadmin-hoteliers-crud.md
39searchHoteliersGET/api/v1/admin/hoteliersadmin-hoteliers-crud.md
40getHotelierGET/api/v1/admin/hoteliers/{hotelierId}admin-hoteliers-crud.md
41updateHotelierPUT/api/v1/admin/hoteliers/{hotelierId}admin-hoteliers-crud.md
42deleteHotelierDELETE/api/v1/admin/hoteliers/{hotelierId}admin-hoteliers-crud.md
43lookupHoteliers (admin)GET/api/v1/admin/lookup/hoteliers (+/{hotelierId})admin-hoteliers-crud.md

Справочники Bank/Hotelier — простые справочные сущности одной формы (Id, Название, Лого), поэтому их CRUD-группы описаны одним файлом на справочник (полный алгоритм — на каждую операцию внутри файла); lookup четырёх операций developers-области — одним файлом (однотипные read-only запросы).

Сквозные ошибки области (не повторяются в каждом файле)

КодHTTP statusУсловие
ValidationError400Нарушение format/min/max/pattern/enum
UNAUTHORIZED401Нет/просрочен JWT (developers) или m2m-токен (admin)
FORBIDDEN403Нет требуемого permission в scope
CHESSBOARD_CONCURRENCY_CONFLICT409Несовпадение доменной версии сущности (конкурентная правка)
IDEMPOTENCY_KEY_MISMATCH409Тот же Idempotency-Key переиспользован с иным телом запроса (операции с idempotency-заголовком)

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