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