package elasticsearch import ( "context" "tm/pkg/audit" ) // AuditStore persists audit documents to Elasticsearch. type AuditStore struct { client Client } // NewAuditStore creates an audit store backed by Elasticsearch. func NewAuditStore(client Client) audit.Store { if client == nil { return audit.NoopStore() } return &AuditStore{client: client} } func (s *AuditStore) Save(ctx context.Context, doc audit.Document) error { return s.client.Index(ctx, AuditDocument(doc)) } func (s *AuditStore) Search(ctx context.Context, filter audit.SearchFilter) (*audit.SearchResult, error) { result, err := s.client.Search(ctx, SearchFilter(filter)) if err != nil { return nil, err } items := make([]audit.Document, 0, len(result.Items)) for _, item := range result.Items { items = append(items, audit.Document(item)) } return &audit.SearchResult{ Items: items, TotalCount: result.TotalCount, }, nil } func (s *AuditStore) Close() error { if s.client == nil { return nil } return s.client.Close() }