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 "" }