feat: add business audit client

This commit is contained in:
Grendgi
2026-06-17 11:35:48 +03:00
parent a1f6966200
commit 2ca85077a3
3 changed files with 268 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ Shared Go-библиотека для микросервисов портала.
- `db/` — pgxpool init + slow-query tracer. Заменяет идентичный код в 9 сервисах.
- `middleware/``InternalAuth` (X-Internal-Key + X-User-*) + хелперы для кастомных заголовков.
- `portal/` — HTTP-клиент portal-сервиса: directory с кэшем+stale fallback, notifications, deactivate user.
- `audit/` — общий контракт business-audit событий и клиент отправки в Portal.
## Использование
@@ -14,6 +15,7 @@ Shared Go-библиотека для микросервисов портала.
```go
import (
"gitea.estateliga.work/admin/portal-common/audit"
"gitea.estateliga.work/admin/portal-common/db"
"gitea.estateliga.work/admin/portal-common/middleware"
"gitea.estateliga.work/admin/portal-common/portal"
@@ -25,8 +27,31 @@ r := chi.NewRouter()
r.Use(middleware.InternalAuth(cfg.InternalAPIKey))
portalCli := portal.New(cfg.PortalBaseURL, cfg.PortalAPIKey)
auditCli := audit.NewClient(cfg.PortalBaseURL, cfg.PortalAPIKey)
_ = auditCli.Send(ctx, audit.Event{
Action: "tasks.task_create",
EntityType: "task",
EntityID: taskID,
UserID: actorID,
UserName: actorName,
Details: map[string]any{
"request_id": requestID,
},
})
```
## Business audit vocabulary
События именуются в формате `<service>.<entity>_<verb>`:
- `service`: короткий код сервиса (`tasks`, `files`, `tg`, `pf`, `telephony`, `portal`).
- `entity`: бизнес-сущность (`task`, `node`, `channel`, `project`, `call`).
- `verb`: действие в прошедшем бизнес-смысле или команда (`create`, `update`, `delete`, `retry`, `share`, `move`).
В `Details` можно класть диагностический контекст (`request_id`, `scope`,
`status`, `error_code`), но нельзя класть токены, пароли и API-ключи. Пакет
`audit` дополнительно вырезает чувствительные ключи перед отправкой.
## Dev-режим (без push в Gitea)
В `go.mod` сервиса добавить `replace`: