refactor(changes): use queries.SearchEvents (#5388)

* refactor(changes): use `queries.SearchEvents`

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
Silvan
2023-03-17 10:14:06 +01:00
committed by GitHub
parent 09abf06d4d
commit a3b36a0138
12 changed files with 261 additions and 215 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"time"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -18,12 +19,14 @@ type Event struct {
}
type EventEditor struct {
ID string
DisplayName string
Service string
ID string
DisplayName string
Service string
PreferedLoginName string
AvatarKey string
}
func (q *Queries) SearchEvents(ctx context.Context, query *eventstore.SearchQueryBuilder) (_ []*Event, err error) {
func (q *Queries) SearchEvents(ctx context.Context, query *eventstore.SearchQueryBuilder, auditLogRetention time.Duration) (_ []*Event, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
events, err := q.eventstore.Filter(ctx, query.AllowTimeTravel())
@@ -31,7 +34,18 @@ func (q *Queries) SearchEvents(ctx context.Context, query *eventstore.SearchQuer
return nil, err
}
return q.convertEvents(ctx, events), nil
callTime := call.FromContext(ctx)
if callTime.IsZero() {
callTime = time.Now()
}
for i, event := range events {
if event.CreationDate().Before(callTime.Add(-auditLogRetention)) {
events = events[:i]
break
}
}
return q.convertEvents(ctx, events, auditLogRetention), nil
}
func (q *Queries) SearchEventTypes(ctx context.Context) []string {
@@ -42,31 +56,33 @@ func (q *Queries) SearchAggregateTypes(ctx context.Context) []string {
return q.eventstore.AggregateTypes()
}
func (q *Queries) convertEvents(ctx context.Context, events []eventstore.Event) []*Event {
func (q *Queries) convertEvents(ctx context.Context, events []eventstore.Event, auditLogRetention time.Duration) []*Event {
result := make([]*Event, len(events))
users := make(map[string]string)
users := make(map[string]*EventEditor)
for i, event := range events {
result[i] = q.convertEvent(ctx, event, users)
}
return result
}
func (q *Queries) convertEvent(ctx context.Context, event eventstore.Event, users map[string]string) *Event {
func (q *Queries) convertEvent(ctx context.Context, event eventstore.Event, users map[string]*EventEditor) *Event {
ctx, span := tracing.NewSpan(ctx)
var err error
defer func() { span.EndWithError(err) }()
displayName, ok := users[event.EditorUser()]
editor, ok := users[event.EditorUser()]
if !ok {
displayName = q.editorUserByID(ctx, event.EditorUser())
users[event.EditorUser()] = displayName
editor = q.editorUserByID(ctx, event.EditorUser())
users[event.EditorUser()] = editor
}
return &Event{
Editor: &EventEditor{
ID: event.EditorUser(),
Service: event.EditorService(),
DisplayName: displayName,
ID: event.EditorUser(),
Service: event.EditorService(),
DisplayName: editor.DisplayName,
PreferedLoginName: editor.PreferedLoginName,
AvatarKey: editor.AvatarKey,
},
Aggregate: event.Aggregate(),
Sequence: event.Sequence(),
@@ -76,15 +92,25 @@ func (q *Queries) convertEvent(ctx context.Context, event eventstore.Event, user
}
}
func (q *Queries) editorUserByID(ctx context.Context, userID string) string {
func (q *Queries) editorUserByID(ctx context.Context, userID string) *EventEditor {
user, err := q.GetUserByID(ctx, false, userID, false)
if err != nil {
return userID
return &EventEditor{ID: userID}
}
if user.Human != nil {
return user.Human.DisplayName
return &EventEditor{
ID: user.ID,
DisplayName: user.Human.DisplayName,
PreferedLoginName: user.PreferredLoginName,
AvatarKey: user.Human.AvatarKey,
}
} else if user.Machine != nil {
return user.Machine.Name
return &EventEditor{
ID: user.ID,
DisplayName: user.Machine.Name,
PreferedLoginName: user.PreferredLoginName,
}
}
return userID
return &EventEditor{ID: userID}
}