Files
2025-12-17 22:57:57 +01:00

45 lines
922 B
Go

package audit
import (
"context"
"encoding/json"
"log"
"go.b0esche.cloud/backend/internal/database"
"github.com/google/uuid"
)
type Logger struct {
db *database.DB
}
func NewLogger(db *database.DB) *Logger {
return &Logger{db: db}
}
type Entry struct {
UserID *uuid.UUID
OrgID *uuid.UUID
Action string
Resource *string
Success bool
Metadata map[string]interface{}
}
func (l *Logger) Log(ctx context.Context, entry Entry) {
metadataJSON, err := json.Marshal(entry.Metadata)
if err != nil {
log.Printf("Failed to marshal audit metadata: %v", err)
metadataJSON = []byte("{}")
}
_, err = l.db.ExecContext(ctx, `
INSERT INTO audit_logs (user_id, org_id, action, resource, success, metadata)
VALUES ($1, $2, $3, $4, $5, $6)
`, entry.UserID, entry.OrgID, entry.Action, entry.Resource, entry.Success, metadataJSON)
if err != nil {
log.Printf("Failed to log audit entry: %v", err)
}
}