public virtual async Task HandleEventAsync(EntityCreatedEto <RefundEto> eventData) { using var uow = _unitOfWorkManager.Begin(isTransactional: true); using var changeTenant = _currentTenant.Change(eventData.Entity.TenantId); var refund = await _refundRepository.FindAsync(eventData.Entity.Id); if (refund != null) { return; } var payment = await _paymentRepository.FindAsync(eventData.Entity.PaymentId); if (payment == null) { return; } refund = _objectMapper.Map <RefundEto, Refund>(eventData.Entity); refund.SetRefundItems( _objectMapper.Map <List <RefundItemEto>, List <RefundItem> >(eventData.Entity.RefundItems)); refund.RefundItems.ForEach(item => { FillRefundItemStoreId(item); FillRefundItemOrderId(item); }); FillRefundItemOrderLines(refund); await _refundRepository.InsertAsync(refund, true); if (refund.CompletedTime.HasValue) { uow.OnCompleted(async() => await _distributedEventBus.PublishAsync(new EShopRefundCompletedEto { Refund = _objectMapper.Map <Refund, EShopRefundEto>(refund) })); } await uow.CompleteAsync(); }