История правок
История правок: кто, когда и что изменил в данных сети; изменения раскрываются по строке.
Окно открывается и из карточки объекта — тогда в нём сразу только правки этой записи.
Возможности
- Все правки данных базы города: кто, когда, какая операция, какая таблица и запись, какие поля изменились.
- Раскрыть строку: поля «Было» и «Стало»; ссылка «Группа изменений» показывает все строки одной операции (например, разрез участка меняет несколько таблиц).
- Щелчок по объекту («linesobj #133») оставляет историю только этой записи.
- Отбор по таблице, номеру объекта, пользователю, операции и датам; «Сбросить» снимает отбор.
Как это работает
Откуда берутся записи. История — таблица audit_log базы города. Её пишут два источника:
- триггеры базы на таблицах сети — операции INSERT (вставка), UPDATE (изменение), DELETE (удаление). Триггеры срабатывают на любую правку, в том числе из десктопа;
- сам API — операции своих действий: отмена и повтор (UNDO, REDO, GROUP_UNDO), разрез и слияние (SPLIT, MERGE, DISSOLVE), разворот (REVERSE), перенос (MOVE, GEOMETRY), цепочки (CHAIN), групповые установщики (GROUP_SET), расчёты (RUN, RUN_SETY, RECALC), утверждение планов (APPROVE, UNAPPROVE), контуры (CONTOUR), смена пароля пользователя (PASSWORD).
Коды операций в окне показаны как есть, латиницей; цветом выделены только вставка (зелёный), изменение (синий) и удаление (красный).
Что видно в строке. В снимке триггера лежит вся строка таблицы. Окно показывает только отличия «было — стало»:
для вставки — заполненные поля, для удаления — бывшие значения. Геометрия (shape, geom, the_geom) не
показывается, значения длиннее 300 символов обрезаются. Имена полей — как в базе (diameter, nodeid).
Кто. Логин учётной записи. При входе через роли PostgreSQL (AUTH_BACKEND=pg) база пишет роль сессии:
tgid_u_логин окно показывает как логин, групповые роли — как «Администратор», «Редактор» и т. п.
Фильтры. Таблица — точное имя (без учёта регистра), пользователь — часть логина, операция — код из списка, даты — включительно по день «По дату». Списки таблиц, пользователей (до 200 самых частых) и операций строит сервер по самой истории. Новые записи сверху, по 25–200 на странице.
Сколько хранится. Сервер историю не чистит: записи лежат, пока их не удалят из базы вручную.
Что нужно для работы
- Права: любой вошедший пользователь, включая роль «Просмотр».
- База: таблица
audit_logс колонкамиlog_id,operation,table_name,record_id,old_data,new_data,changed_at,changed_by. Нет таблицы — в окне «Таблицы audit_log нет в этой БД».
Шаги
Откройте «Инструменты» и наберите в поиске «История правок» — пункт выделен рамкой.

Нажмите пункт — откроется окно.

Стрелка в строке раскрывает правку: какие поля изменились, было и стало. Отбор по таблице, номеру объекта, пользователю, операции (код: INSERT — вставка, UPDATE — изменение, DELETE — удаление, UNDO — отмена и другие) и датам; «Сбросить» снимает отбор. Щелчок по объекту в строке оставляет историю только этой записи.

Примеры
Объём истории. На копии Алматы (almatygid_copy) в истории 81 788 записей: 59 595 изменений,
18 254 вставки, 3 274 удаления, 304 отмены (UNDO), 69 расчётов (RUN_SETY). Больше всего правок у таблиц
linesobj (24 103) и heatpipesections (19 963).
Кто поменял диаметр. Откройте карточку участка → история записи. Раскройте строки UPDATE: поле diameter,
«Было» и «Стало», автор и время. Если правка — часть разреза или групповой правки, «Группа изменений» покажет
остальные строки той же операции.
Если не получается
- Список пуст при отборе по пользователю — при входе через роли PostgreSQL автор записан как
tgid_u_логин; ищите по части логина. - Нет правок из десктопа — в этой базе нет триггеров истории на таблице; правки API всё равно пишутся.
Для администратора
- В истории есть и правки учётных записей (таблица
usersdb.users: создание, роль, города, блокировка, удаление — без паролей). Их видят только те, у кого есть право «Управление пользователями»; остальным эти строки не показываются ни в списке, ни в отборах, а запись по номеру отвечает «не найдена». - Журнал входов и запросов — отдельно: Журнал действий.
Для разработчика
- API:
GET /api/v1/audit-log(table,record_id,changed_by,operation,date_from,date_to,change_group_id,page,page_sizeдо 200),GET /api/v1/audit-log/{log_id}(полные снимкиold_dataиnew_data),GET /api/v1/audit-log/lookups—routers/admin.py,database/audit_history.py. Запись из API —audit.write_audit_log. - Веб:
components/AuditHistoryDialog.vue, подпись автора —utils/auditAuthor.ts. - Тесты: e2e —
e2e/functions/admin.spec.ts.
