private Task PublishStatusUpdatedEvent(string referralId, StakeStatus status) { return(_statusUpdatedPublisher.PublishAsync(new ReferralStakeStatusUpdatedEvent { ReferralId = referralId, Status = (Contract.StakeStatus)status })); }
private async Task <ReferralStakesStatusUpdateErrorCode> SetStatusAsync (string referralId, StakeStatus requiredPreviousStatus, StakeStatus newStatus, Func <ReferralStakeModel, Task> callback = null) { if (string.IsNullOrEmpty(referralId)) { throw new ArgumentNullException(nameof(referralId)); } var transactionError = await _transactionRunner.RunWithTransactionAsync(async txContext => { var referralStake = await _referralStakesRepository.GetByReferralIdAsync(referralId, txContext); if (referralStake == null) { return(ReferralStakesStatusUpdateErrorCode.DoesNotExist); } if (referralStake.Status != requiredPreviousStatus) { return(ReferralStakesStatusUpdateErrorCode.InvalidStatus); } await _referralStakesRepository.SetStatusAsync(referralId, newStatus, txContext); if (callback != null) { await callback(referralStake); } return(ReferralStakesStatusUpdateErrorCode.None); }); if (transactionError == ReferralStakesStatusUpdateErrorCode.None) { await PublishStatusUpdatedEvent(referralId, newStatus); } return(transactionError); }
public async Task SetStatusAsync(string referralId, StakeStatus status, TransactionContext txContext = null) { using (var context = _contextFactory.CreateDataContext(txContext)) { var entity = new ReferralStakeEntity { ReferralId = referralId }; context.ReferralStakes.Attach(entity); entity.Status = status; try { await context.SaveChangesAsync(); } catch (DbUpdateException) { throw new InvalidOperationException("Entity was not found during status update"); } } }