Files
gochat/internal/handler/api/v1/audit_writer.go
T

47 lines
1.2 KiB
Go

package v1
import (
"github.com/gin-gonic/gin"
"github.com/gochat/gochat/internal/service"
applogger "github.com/gochat/gochat/pkg/logger"
)
type auditMutation struct {
AccountID uint
AuditableType string
AuditableID uint
Action string
AuditedChanges interface{}
Comment string
}
func recordAuditMutation(c *gin.Context, auditSvc *service.AuditService, mutation auditMutation) {
if auditSvc == nil {
return
}
_, err := auditSvc.Record(c.Request.Context(), service.AuditRecord{
AccountID: mutation.AccountID,
UserID: getUserID(c),
AuditableType: mutation.AuditableType,
AuditableID: mutation.AuditableID,
Action: mutation.Action,
AuditedChanges: mutation.AuditedChanges,
RemoteAddress: c.ClientIP(),
RequestUUID: firstNonEmpty(c.GetHeader("X-Request-ID"), c.GetHeader("X-Correlation-ID")),
Comment: mutation.Comment,
})
if err != nil {
applogger.L().Warnf("audit mutation skipped type=%s id=%d action=%s: %v", mutation.AuditableType, mutation.AuditableID, mutation.Action, err)
}
}
func firstNonEmpty(values ...string) string {
for _, value := range values {
if value != "" {
return value
}
}
return ""
}