package audit import ( "context" "encoding/json" "log/slog" "github.com/noderunners/nip05api/internal/db" ) const ( ActorAdmin = "admin" ActorSystem = "system" ActionUserAdded = "user.added" ActionUserUsernameChanged = "user.username_changed" ActionUserExtended = "user.extended" ActionUserDeleted = "user.deleted" ActionPaymentConfirmed = "payment.confirmed" ActionUserExpired = "user.expired" ActionUserGracePurged = "user.grace_purged" ) type Logger struct{ db *db.DB } func New(d *db.DB) *Logger { return &Logger{db: d} } func (l *Logger) Log(ctx context.Context, action, actor, pubkey string, details map[string]any) { if l == nil || l.db == nil { return } var detailsJSON string if details != nil { b, err := json.Marshal(details) if err == nil { detailsJSON = string(b) } } if _, err := l.db.ExecContext(ctx, `INSERT INTO audit_log (action, actor, pubkey, details) VALUES (?, ?, ?, ?)`, action, actor, pubkey, detailsJSON); err != nil { slog.Warn("audit log insert failed", "action", action, "err", err) } }