mirror of
https://github.com/zitadel/zitadel.git
synced 2025-02-28 20:37:23 +00:00
fix: creation date argument in search events filters (#6855)
* fix: creation date filter in event queries * fix: creation date with ordering filter * simplify code * simplify review --------- Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
parent
9378e19090
commit
1b6e3dcf27
@ -60,7 +60,6 @@ func eventRequestToFilter(ctx context.Context, req *admin_pb.ListEventsRequest)
|
|||||||
AwaitOpenTransactions().
|
AwaitOpenTransactions().
|
||||||
ResourceOwner(req.ResourceOwner).
|
ResourceOwner(req.ResourceOwner).
|
||||||
EditorUser(req.EditorUserId).
|
EditorUser(req.EditorUserId).
|
||||||
CreationDateAfter(req.CreationDate.AsTime()).
|
|
||||||
SequenceGreater(req.Sequence)
|
SequenceGreater(req.Sequence)
|
||||||
|
|
||||||
if len(aggregateIDs) > 0 || len(aggregateTypes) > 0 || len(eventTypes) > 0 {
|
if len(aggregateIDs) > 0 || len(aggregateTypes) > 0 || len(eventTypes) > 0 {
|
||||||
@ -71,8 +70,11 @@ func eventRequestToFilter(ctx context.Context, req *admin_pb.ListEventsRequest)
|
|||||||
Builder()
|
Builder()
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.Asc {
|
if req.GetAsc() {
|
||||||
builder.OrderAsc()
|
builder.OrderAsc()
|
||||||
|
builder.CreationDateAfter(req.CreationDate.AsTime())
|
||||||
|
} else {
|
||||||
|
builder.CreationDateBefore(req.CreationDate.AsTime())
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder, nil
|
return builder, nil
|
||||||
|
@ -25,7 +25,8 @@ type SearchQuery struct {
|
|||||||
Owner *Filter
|
Owner *Filter
|
||||||
Position *Filter
|
Position *Filter
|
||||||
Sequence *Filter
|
Sequence *Filter
|
||||||
CreatedAt *Filter
|
CreatedAfter *Filter
|
||||||
|
CreatedBefore *Filter
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter represents all fields needed to compare a field of an event with a value
|
// Filter represents all fields needed to compare a field of an event with a value
|
||||||
@ -136,6 +137,7 @@ func QueryFromBuilder(builder *eventstore.SearchQueryBuilder) (*SearchQuery, err
|
|||||||
positionAfterFilter,
|
positionAfterFilter,
|
||||||
eventSequenceGreaterFilter,
|
eventSequenceGreaterFilter,
|
||||||
creationDateAfterFilter,
|
creationDateAfterFilter,
|
||||||
|
creationDateBeforeFilter,
|
||||||
} {
|
} {
|
||||||
filter := f(builder, query)
|
filter := f(builder, query)
|
||||||
if filter == nil {
|
if filter == nil {
|
||||||
@ -191,8 +193,16 @@ func creationDateAfterFilter(builder *eventstore.SearchQueryBuilder, query *Sear
|
|||||||
if builder.GetCreationDateAfter().IsZero() {
|
if builder.GetCreationDateAfter().IsZero() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
query.CreatedAt = NewFilter(FieldCreationDate, builder.GetCreationDateAfter(), OperationGreater)
|
query.CreatedAfter = NewFilter(FieldCreationDate, builder.GetCreationDateAfter(), OperationGreater)
|
||||||
return query.CreatedAt
|
return query.CreatedAfter
|
||||||
|
}
|
||||||
|
|
||||||
|
func creationDateBeforeFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
|
||||||
|
if builder.GetCreationDateBefore().IsZero() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
query.CreatedBefore = NewFilter(FieldCreationDate, builder.GetCreationDateBefore(), OperationLess)
|
||||||
|
return query.CreatedBefore
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceOwnerFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
|
func resourceOwnerFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
|
||||||
|
@ -239,7 +239,14 @@ func prepareConditions(criteria querier, query *repository.SearchQuery, useV1 bo
|
|||||||
clauses += "(" + strings.Join(subClauses, " OR ") + ")"
|
clauses += "(" + strings.Join(subClauses, " OR ") + ")"
|
||||||
}
|
}
|
||||||
|
|
||||||
additionalClauses, additionalArgs := prepareQuery(criteria, useV1, query.Position, query.Owner, query.Sequence, query.CreatedAt, query.Creator)
|
additionalClauses, additionalArgs := prepareQuery(criteria, useV1,
|
||||||
|
query.Position,
|
||||||
|
query.Owner,
|
||||||
|
query.Sequence,
|
||||||
|
query.CreatedAfter,
|
||||||
|
query.CreatedBefore,
|
||||||
|
query.Creator,
|
||||||
|
)
|
||||||
if additionalClauses != "" {
|
if additionalClauses != "" {
|
||||||
if clauses != "" {
|
if clauses != "" {
|
||||||
clauses += " AND "
|
clauses += " AND "
|
||||||
|
@ -25,6 +25,7 @@ type SearchQueryBuilder struct {
|
|||||||
positionAfter float64
|
positionAfter float64
|
||||||
awaitOpenTransactions bool
|
awaitOpenTransactions bool
|
||||||
creationDateAfter time.Time
|
creationDateAfter time.Time
|
||||||
|
creationDateBefore time.Time
|
||||||
eventSequenceGreater uint64
|
eventSequenceGreater uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,6 +85,10 @@ func (q SearchQueryBuilder) GetCreationDateAfter() time.Time {
|
|||||||
return q.creationDateAfter
|
return q.creationDateAfter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q SearchQueryBuilder) GetCreationDateBefore() time.Time {
|
||||||
|
return q.creationDateBefore
|
||||||
|
}
|
||||||
|
|
||||||
// ensureInstanceID makes sure that the instance id is always set
|
// ensureInstanceID makes sure that the instance id is always set
|
||||||
func (b *SearchQueryBuilder) ensureInstanceID(ctx context.Context) {
|
func (b *SearchQueryBuilder) ensureInstanceID(ctx context.Context) {
|
||||||
if b.instanceID == nil && authz.GetInstance(ctx).InstanceID() != "" {
|
if b.instanceID == nil && authz.GetInstance(ctx).InstanceID() != "" {
|
||||||
@ -256,6 +261,15 @@ func (builder *SearchQueryBuilder) CreationDateAfter(creationDate time.Time) *Se
|
|||||||
return builder
|
return builder
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreationDateBefore filters for events which happened before the specified time
|
||||||
|
func (builder *SearchQueryBuilder) CreationDateBefore(creationDate time.Time) *SearchQueryBuilder {
|
||||||
|
if creationDate.IsZero() || creationDate.Unix() == 0 {
|
||||||
|
return builder
|
||||||
|
}
|
||||||
|
builder.creationDateBefore = creationDate
|
||||||
|
return builder
|
||||||
|
}
|
||||||
|
|
||||||
// AddQuery creates a new sub query.
|
// AddQuery creates a new sub query.
|
||||||
// All fields in the sub query are AND-connected in the storage request.
|
// All fields in the sub query are AND-connected in the storage request.
|
||||||
// Multiple sub queries are OR-connected in the storage request.
|
// Multiple sub queries are OR-connected in the storage request.
|
||||||
|
@ -66,7 +66,13 @@ func filterAuditLogRetention(ctx context.Context, auditLogRetention time.Duratio
|
|||||||
if callTime.IsZero() {
|
if callTime.IsZero() {
|
||||||
callTime = time.Now()
|
callTime = time.Now()
|
||||||
}
|
}
|
||||||
return builder.CreationDateAfter(callTime.Add(-auditLogRetention))
|
oldestAllowed := callTime.Add(-auditLogRetention)
|
||||||
|
// The audit log retention time should overwrite the creation date after query only if it is older
|
||||||
|
// For example API calls should still be able to restrict the creation date after to a more recent date
|
||||||
|
if builder.GetCreationDateAfter().Before(oldestAllowed) {
|
||||||
|
return builder.CreationDateAfter(oldestAllowed)
|
||||||
|
}
|
||||||
|
return builder
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) SearchEventTypes(ctx context.Context) []string {
|
func (q *Queries) SearchEventTypes(ctx context.Context) []string {
|
||||||
|
@ -7894,7 +7894,7 @@ message ListEventsRequest {
|
|||||||
google.protobuf.Timestamp creation_date = 9 [
|
google.protobuf.Timestamp creation_date = 9 [
|
||||||
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
(grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = {
|
||||||
example: "\"2019-04-01T08:45:00.000000Z\"";
|
example: "\"2019-04-01T08:45:00.000000Z\"";
|
||||||
description: "If asc is false creation_date is used as less than filter If asc is true creation_date is used as greater than filter. If creation_date is not set the field is ignored.";
|
description: "If asc is false, the events returned are older than creation_date. If asc is true, the events returned are younger than creation_date. If creation_date is not set the field is ignored.";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user