Ejemplo n.º 1
0
        public void Consume(Interface.Commands.WithdrawRequestApprove command)
        {
            var paymentRepository = _container.Resolve <IPaymentRepository>();
            var serviceBus        = _container.Resolve <IServiceBus>();

            var withdrawal = paymentRepository.OfflineWithdraws
                             .Include(x => x.PlayerBankAccount.Player)
                             .FirstOrDefault(x => x.Id == command.WithdrawId);

            if (withdrawal == null)
            {
                throw new RegoException(string.Format(WithdrawRecordNotFoundMessage, command.WithdrawId));
            }

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                if (withdrawal.Status != WithdrawalStatus.Accepted)
                {
                    throw new InvalidOperationException(string.Format("The withdrawal has \"{0}\" status, so it can't be Approve, id:{1}", withdrawal.Status, command.WithdrawId));
                }

                withdrawal.Remarks    = command.Remarks;
                withdrawal.Status     = WithdrawalStatus.Approved;
                withdrawal.Approved   = command.Approved;
                withdrawal.ApprovedBy = command.ActorName;

                var eventCreated = DateTimeOffset.Now.ToOffset(command.Approved.Offset);

                //UnLock WithdrawLock
                var withdrawLock =
                    paymentRepository.WithdrawalLocks.FirstOrDefault(x => x.WithdrawalId == command.WithdrawId);
                withdrawLock.Status     = Status.Inactive;
                withdrawLock.UnLockedBy = command.ActorName;
                withdrawLock.UnLockedOn = eventCreated;

                paymentRepository.SaveChanges();

                //raise WithdrawalApproved event
                var withdrawalApprovedEvent = new WithdrawalApproved(
                    command.WithdrawId,
                    withdrawal.Amount,
                    eventCreated,
                    command.ApprovedUerId,
                    withdrawal.PlayerBankAccount.Player.Id,
                    WithdrawalStatus.Approved,
                    command.Remarks,
                    withdrawal.TransactionNumber,
                    command.ActorName)
                {
                    EventCreatedBy = command.ActorName,
                    EventCreated   = command.Approved,
                };

                serviceBus.PublishMessage(withdrawalApprovedEvent);

                scope.Complete();
            }
        }
Ejemplo n.º 2
0
        public void Handle(WithdrawalApproved @event)
        {
            var repository = _container.Resolve <IBonusRepository>();
            var bus        = _container.Resolve <IEventBus>();

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                var wallet = repository.GetLockedWallet(@event.WithdrawalMadeBy);
                wallet.Withdraw(@event.Amount, @event.TransactionNumber);
                wallet.Events.ForEach(bus.Publish);

                repository.SaveChanges();
                scope.Complete();
            }
        }
Ejemplo n.º 3
0
 public void Consume(WithdrawalApproved message)
 {
     _withdrawHandlers.Handle(message);
 }
Ejemplo n.º 4
0
 public void Consume(WithdrawalApproved message)
 {
     _paymentSubscriber.Handle(message);
 }
Ejemplo n.º 5
0
 public void Handle(WithdrawalApproved @event)
 {
     AddActivityLog(AdminActivityLogCategory.Withdrawal, @event, @event.Username);
 }