public async Task PurgeAsync(ICqrsEvent cqrsEvent, CancellationToken cancellationToken) { _logger.Debug($"Getting entity repository. TypeName: {cqrsEvent.SourceTypeName}"); var sourceEntityType = Type.GetType(cqrsEvent.SourceTypeName); var getRepositoryMethod = _cqrsRepositoryFactory.GetType().GetMethod("GetRepository"); if (getRepositoryMethod != null) { var genericMethodForSourceEntity = getRepositoryMethod.MakeGenericMethod(sourceEntityType); dynamic sourceEntityRepository = genericMethodForSourceEntity.Invoke(_cqrsRepositoryFactory, null); _logger.Debug($"Built {nameof(CqrsRepositoryFactory)}"); _logger.Debug($"Fetching entity by Id. Id: {cqrsEvent.SourceId}"); using var uow = _unitOfWorkManager.Get(); var cqrsEntity = await sourceEntityRepository.GetByIdAsync(cqrsEvent.SourceId, cancellationToken); var baseCqrsEntity = cqrsEntity as BaseCqrsEntity; _logger.Debug($"Fetched entity. Id: {cqrsEvent.SourceId}"); var @event = baseCqrsEntity?.EventsToBeProcessed.FirstOrDefault(f => f.Id == cqrsEvent.Id); if (@event != null) { _logger.Debug($"Removing event. Id: {@event.Id}"); baseCqrsEntity.RemoveEventToBeProcessed(@event); await sourceEntityRepository.UpdateAsync(cqrsEntity, cancellationToken); _logger.Debug("Removed event"); } uow.Commit(); } }
public async Task HandleAsync(CqrsEventProcessedEvent request, CancellationToken cancellationToken) { _logger.Debug($"{nameof(CqrsEventProcessedEventHandler)} invoked"); var getRepositoryMethod = _cqrsRepositoryFactory.GetType().GetMethod("GetRepository"); await RemoveEventToBeProcessed(request, getRepositoryMethod, cancellationToken); await RemoveProcessedEvent(request, getRepositoryMethod, cancellationToken); }