mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 21:17:32 +00:00
fix(adminAPI): localize event type (#5059)
* fix(adminAPI): localisation of event types, aggregate types * fix(adminAPI): validations of ListEvent request * implement caching of editor user information
This commit is contained in:
@@ -3,15 +3,13 @@ package admin
|
||||
import (
|
||||
"context"
|
||||
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
"github.com/zitadel/zitadel/internal/api/authz"
|
||||
"github.com/zitadel/zitadel/internal/errors"
|
||||
"github.com/zitadel/zitadel/internal/eventstore"
|
||||
"github.com/zitadel/zitadel/internal/query"
|
||||
admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin"
|
||||
event_pb "github.com/zitadel/zitadel/pkg/grpc/event"
|
||||
)
|
||||
|
||||
const (
|
||||
maxLimit = 1000
|
||||
)
|
||||
|
||||
func (s *Server) ListEvents(ctx context.Context, in *admin_pb.ListEventsRequest) (*admin_pb.ListEventsResponse, error) {
|
||||
@@ -23,19 +21,18 @@ func (s *Server) ListEvents(ctx context.Context, in *admin_pb.ListEventsRequest)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return convertEventsToResponse(events)
|
||||
|
||||
return admin_pb.EventsToPb(ctx, events)
|
||||
}
|
||||
|
||||
func (s *Server) ListEventTypes(ctx context.Context, in *admin_pb.ListEventTypesRequest) (*admin_pb.ListEventTypesResponse, error) {
|
||||
return &admin_pb.ListEventTypesResponse{
|
||||
EventTypes: s.query.SearchEventTypes(ctx),
|
||||
}, nil
|
||||
eventTypes := s.query.SearchEventTypes(ctx)
|
||||
return admin_pb.EventTypesToPb(eventTypes), nil
|
||||
}
|
||||
|
||||
func (s *Server) ListAggregateTypes(ctx context.Context, in *admin_pb.ListAggregateTypesRequest) (*admin_pb.ListAggregateTypesResponse, error) {
|
||||
return &admin_pb.ListAggregateTypesResponse{
|
||||
AggregateTypes: s.query.SearchAggregateTypes(ctx),
|
||||
}, nil
|
||||
aggregateTypes := s.query.SearchAggregateTypes(ctx)
|
||||
return admin_pb.AggregateTypesToPb(aggregateTypes), nil
|
||||
}
|
||||
|
||||
func eventRequestToFilter(ctx context.Context, req *admin_pb.ListEventsRequest) (*eventstore.SearchQueryBuilder, error) {
|
||||
@@ -43,16 +40,28 @@ func eventRequestToFilter(ctx context.Context, req *admin_pb.ListEventsRequest)
|
||||
for i, eventType := range req.EventTypes {
|
||||
eventTypes[i] = eventstore.EventType(eventType)
|
||||
}
|
||||
aggregateIDs := make([]string, 0, 1)
|
||||
if req.AggregateId != "" {
|
||||
aggregateIDs = append(aggregateIDs, req.AggregateId)
|
||||
}
|
||||
aggregateTypes := make([]eventstore.AggregateType, len(req.AggregateTypes))
|
||||
for i, aggregateType := range req.AggregateTypes {
|
||||
aggregateTypes[i] = eventstore.AggregateType(aggregateType)
|
||||
}
|
||||
limit := uint64(req.Limit)
|
||||
if limit == 0 || limit > maxLimit {
|
||||
limit = maxLimit
|
||||
}
|
||||
|
||||
builder := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
|
||||
OrderDesc().
|
||||
InstanceID(authz.GetInstance(ctx).InstanceID()).
|
||||
Limit(uint64(req.Limit)).
|
||||
Limit(limit).
|
||||
ResourceOwner(req.ResourceOwner).
|
||||
EditorUser(req.EditorUserId).
|
||||
AddQuery().
|
||||
AggregateIDs(req.AggregateId).
|
||||
AggregateTypes(eventstore.AggregateType(req.AggregateType)).
|
||||
AggregateIDs(aggregateIDs...).
|
||||
AggregateTypes(aggregateTypes...).
|
||||
EventTypes(eventTypes...).
|
||||
CreationDateAfter(req.CreationDate.AsTime()).
|
||||
SequenceGreater(req.Sequence).
|
||||
@@ -64,44 +73,3 @@ func eventRequestToFilter(ctx context.Context, req *admin_pb.ListEventsRequest)
|
||||
|
||||
return builder, nil
|
||||
}
|
||||
|
||||
func convertEventsToResponse(events []*query.Event) (response *admin_pb.ListEventsResponse, err error) {
|
||||
response = &admin_pb.ListEventsResponse{
|
||||
Events: make([]*event_pb.Event, len(events)),
|
||||
}
|
||||
|
||||
for i, event := range events {
|
||||
response.Events[i], err = convertEvent(event)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return response, nil
|
||||
}
|
||||
|
||||
func convertEvent(event *query.Event) (*event_pb.Event, error) {
|
||||
var payload *structpb.Struct
|
||||
if len(event.Payload) > 0 {
|
||||
payload = new(structpb.Struct)
|
||||
if err := payload.UnmarshalJSON(event.Payload); err != nil {
|
||||
return nil, errors.ThrowInternal(err, "ADMIN-eaimD", "Errors.Internal")
|
||||
}
|
||||
}
|
||||
return &event_pb.Event{
|
||||
Editor: &event_pb.Editor{
|
||||
UserId: event.Editor.ID,
|
||||
DisplayName: event.Editor.DisplayName,
|
||||
Service: event.Editor.Service,
|
||||
},
|
||||
Aggregate: &event_pb.Aggregate{
|
||||
Id: event.Aggregate.ID,
|
||||
Type: string(event.Aggregate.Type),
|
||||
ResourceOwner: event.Aggregate.ResourceOwner,
|
||||
},
|
||||
Sequence: event.Sequence,
|
||||
CreationDate: timestamppb.New(event.CreationDate),
|
||||
Payload: payload,
|
||||
Type: event.Type,
|
||||
}, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user