public IReadOnlyDictionary <IEntityType, HashSet <long> > Filter(TrackedUseCase trackedUseCase) { var filteredOperations = FilterByIgnoredOperations(trackedUseCase); var changes = FilterByEntityTypes(filteredOperations); return(changes); }
protected override AggregatableMessage <ICommand> Process(TrackedUseCase trackedUseCase) { var commands = _commandFactory.CreateCommands(trackedUseCase).ToList(); return(new AggregatableMessage <ICommand> { TargetFlow = MessageFlow, Commands = commands, }); }
public static TrackedUseCase UpdateFirms() { var operationIdentity = new StrictOperationIdentity(UpdateIdentity.Instance, new EntitySet(EntityTypeFirm.Instance)); var changes = new[] { ChangeDescriptor.Create(EntityTypeFirm.Instance, 12, ChangeKind.Updated), ChangeDescriptor.Create(EntityTypeFirm.Instance, 13, ChangeKind.Updated) }; var operations = new[] { new OperationDescriptor(Guid.NewGuid(), operationIdentity, new OperationContext(DateTimeOffset.UtcNow, DateTime.UtcNow), new EntityChangesContext(changes)) }; var context = new UseCaseContext(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, 0); var useCase = new TrackedUseCase(context, operations[0].Id, operations, new Dictionary <Guid, HashSet <Guid> >()); return(useCase); }
public static TrackedUseCase UpdateFirms() { var operationIdentity = new StrictOperationIdentity(UpdateIdentity.Instance, new EntitySet(EntityTypeFirm.Instance)); var changes = new[] { ChangeDescriptor.Create(EntityTypeFirm.Instance, 12, ChangeKind.Updated), ChangeDescriptor.Create(EntityTypeFirm.Instance, 13, ChangeKind.Updated) }; var operations = new[] { new OperationDescriptor(Guid.NewGuid(), operationIdentity, new OperationContext(DateTimeOffset.UtcNow, DateTime.UtcNow), new EntityChangesContext(changes)) }; var context = new UseCaseContext(DateTimeOffset.UtcNow, DateTimeOffset.UtcNow, 0); var useCase = new TrackedUseCase(context, operations[0].Id, operations, new Dictionary<Guid, HashSet<Guid>>()); return useCase; }
private IEnumerable <OperationDescriptor> FilterByIgnoredOperations(TrackedUseCase message) { var operations = (IEnumerable <OperationDescriptor>)message.Operations; var ignoredOperations = operations.Where(x => _operationsRegistry.IsIgnoredOperation(x.OperationIdentity)); var operationIds = ignoredOperations.Aggregate(new HashSet <Guid>(), (hashSet, operation) => { hashSet.Add(operation.Id); hashSet.UnionWith(message.GetNestedOperations(operation.Id).Select(x => x.Id)); return(hashSet); }); if (operationIds.Any()) { operations = operations.Where(x => !operationIds.Contains(x.Id)); } return(operations); }
private static IEnumerable <OperationDescriptor> Filter(TrackedUseCase message) { var operations = (IEnumerable <OperationDescriptor>)message.Operations; var disallowedIds = new HashSet <Guid>(); var disallowedOperations = operations.Where(x => OperationIdentityMetadata.DisallowedOperationIdentities.Contains(x.OperationIdentity)); foreach (var disallowedOperation in disallowedOperations) { disallowedIds.Add(disallowedOperation.Id); disallowedIds.UnionWith(message.GetNestedOperations(disallowedOperation.Id).Select(x => x.Id)); } if (disallowedIds.Any()) { operations = operations.Where(x => !disallowedIds.Contains(x.Id)); } return(operations); }
protected override OperationAggregatableMessage <FactOperation> Process(TrackedUseCase message) { _tracer.DebugFormat("Processing TUC {0}", message.Id); var receivedOperationCount = message.Operations.Sum(x => x.AffectedEntities.Changes.Sum(y => y.Value.Sum(z => z.Value.Count))); _telemetryPublisher.Publish <ErmReceivedOperationCountIdentity>(receivedOperationCount); var filteredOperations = Filter(message); var factOperations = Convert(filteredOperations).ToArray(); _telemetryPublisher.Publish <ErmEnqueuedOperationCountIdentity>(factOperations.Length); return(new OperationAggregatableMessage <FactOperation> { TargetFlow = MessageFlow, Operations = factOperations, OperationTime = message.Context.Finished.UtcDateTime, }); }
protected override OperationAggregatableMessage <FactOperation> Process(TrackedUseCase message) { _tracer.DebugFormat("Processing TUC {0}", message.Id); var receivedOperationCount = message.Operations.Sum(x => x.AffectedEntities.Changes.Sum(y => y.Value.Sum(z => z.Value.Count))); _telemetryPublisher.Publish <ErmReceivedOperationCountIdentity>(receivedOperationCount); var changes = _useCaseFiltrator.Filter(message); // TODO: вместо кучи factoperation можно передавать одну с dictionary, где уже всё сгруппировано по entity type var factOperations = changes.SelectMany(x => x.Value.Select(y => new FactOperation(_registry.GetEntityType(x.Key), y))).ToList(); _telemetryPublisher.Publish <ErmEnqueuedOperationCountIdentity>(factOperations.Count); return(new OperationAggregatableMessage <FactOperation> { TargetFlow = MessageFlow, Operations = factOperations, OperationTime = message.Context.Finished.UtcDateTime, }); }