package store import "context" // AppendAudit 追加一条审计留痕(best-effort:审计失败不应影响主流程,调用方忽略返回)。 func (p *Postgres) AppendAudit(ctx context.Context, a *AuditLog) error { if p.db == nil || a == nil { return errStoreDisabled } return p.db.WithContext(ctx).Create(a).Error } // ListAudit 倒序列出审计留痕(管理端审计流;limit 限流、offset 翻页)。 func (p *Postgres) ListAudit(ctx context.Context, limit, offset int) ([]AuditLog, error) { if p.db == nil { return nil, errStoreDisabled } limit, offset = clampPage(limit, offset) var out []AuditLog err := p.db.WithContext(ctx).Order("created_at desc").Limit(limit).Offset(offset).Find(&out).Error return out, err } // AppendGuardrailEvent 追加一条护栏命中(best-effort)。 func (p *Postgres) AppendGuardrailEvent(ctx context.Context, e *GuardrailEvent) error { if p.db == nil || e == nil { return errStoreDisabled } return p.db.WithContext(ctx).Create(e).Error } // ListGuardrailEvents 倒序列出护栏事件(管理端安全事件流)。 func (p *Postgres) ListGuardrailEvents(ctx context.Context, limit, offset int) ([]GuardrailEvent, error) { if p.db == nil { return nil, errStoreDisabled } limit, offset = clampPage(limit, offset) var out []GuardrailEvent err := p.db.WithContext(ctx).Order("created_at desc").Limit(limit).Offset(offset).Find(&out).Error return out, err } // clampPage 归一分页参数:limit ∈ [1,200](默认 50),offset ≥ 0。 func clampPage(limit, offset int) (int, int) { if limit <= 0 || limit > 200 { limit = 50 } if offset < 0 { offset = 0 } return limit, offset }