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(); } }
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(); } }
public void Consume(WithdrawalApproved message) { _withdrawHandlers.Handle(message); }
public void Consume(WithdrawalApproved message) { _paymentSubscriber.Handle(message); }
public void Handle(WithdrawalApproved @event) { AddActivityLog(AdminActivityLogCategory.Withdrawal, @event, @event.Username); }