Описать контракт деталей аудита в документации
ci / build-test (pull_request) Successful in 2m58s

This commit is contained in:
2026-09-13 19:18:16 +03:00
parent 4a6fa374c5
commit ac2bf4b302
@@ -149,8 +149,13 @@
"actorType": "tenant", "actorType": "tenant",
"actorId": "1f2e3d4c-5b6a-7980-1234-56789abcdef0", "actorId": "1f2e3d4c-5b6a-7980-1234-56789abcdef0",
"tenantId": "aabbccdd-eeff-0011-2233-445566778899", "tenantId": "aabbccdd-eeff-0011-2233-445566778899",
"tenantName": "ООО «Ромашка»",
"ip": "203.0.113.7", "ip": "203.0.113.7",
"detailJson": "{\"cardId\":\"c_1a2b3c4d5e6f\",\"to\":\"planned\"}", "changes": [
{ "field": "cardId", "to": "c_1a2b3c4d5e6f" },
{ "field": "to", "to": "planned" }
],
"detailJson": "{\"changes\":[{\"field\":\"cardId\",\"to\":\"c_1a2b3c4d5e6f\"},{\"field\":\"to\",\"to\":\"planned\"}]}",
"at": "2026-09-10T15:22:46.123Z", "at": "2026-09-10T15:22:46.123Z",
"id": 1042 "id": 1042
} }
@@ -162,7 +167,18 @@
``` ```
- `items` — новые сверху (`at` DESC). `total` — полное число по фильтру (без `limit`/`offset`). - `items` — новые сверху (`at` DESC). `total` — полное число по фильтру (без `limit`/`offset`).
- `detailJson`**строка** JSON деталей события (без секретов), может быть `null`. - `tenantName` — имя пользователя события (join с реестром); `null`, если пользователя нет/не разрешено.
- `changes` — человекочитаемые изменения параметров события (см. «Детали события»); `[]`, если деталей нет.
- `detailJson`**строка** сырого JSON деталей события (без секретов) для спойлера; может быть `null`.
### Детали события (`changes`)
Детали события хранятся как JSON вида `{ "changes": [ { "field": "<код>", "from": "<было>", "to": "<стало>" } ] }`,
где `field` — стабильный код параметра, `from` — предыдущее значение (`null` — параметр задан впервые),
`to` — новое. Сериализация деталей — `AuditService.ToDetailJson`, форма изменения — `AuditDetails.Set`/
`AuditDetails.Change`. Ядро отдаёт `changes` как есть; человекочитаемые названия событий, акторов, параметров
и значений — в ресурсах интерфейса (`ru.js`: `operator.event`/`operator.actor`/`operator.field`/`operator.value`).
Прежние записи плоского формата (`{ "login": "..." }`, пары `old*`/`new*`) читаются обратно совместимо.
**Коды**: `200`, `401`. **Коды**: `200`, `401`.