Ejemplo n.º 1
0
 private Task PublishStatusUpdatedEvent(string referralId, StakeStatus status)
 {
     return(_statusUpdatedPublisher.PublishAsync(new ReferralStakeStatusUpdatedEvent
     {
         ReferralId = referralId,
         Status = (Contract.StakeStatus)status
     }));
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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");
                }
            }
        }