コード例 #1
0
 public IEnumerable<ApplicationEvent> Process(BankOperationProcessorCommand command)
 {
     Argument.NotNull(command, "command");
     var operation = command.BankOperation;
     if (operation.Status == ProcessStatus.Failed)
     {
         Logger.Warn("Operation #{0} has been already failed.", operation.Id);
         return Enumerable.Empty<ApplicationEvent>();
     }
     if (operation.Status == ProcessStatus.Completed)
     {
         Logger.Warn("Operation #{0} has been already completed.", operation.Id);
         return Enumerable.Empty<ApplicationEvent>();
     }
     var postponeDate = PostponeDateOrNull(operation);
     if (postponeDate != null)
     {
         var operationModel = command.BankOperation.ToModel<BankOperation, BankOperationModel>();
         var @event = new OperationProgressEvent(command.OperationId, operationModel);
         return new List<ApplicationEvent>
         {
             new PostponedEvent(@event, postponeDate.Value)
         };
     }
     return ProcessPending(command);
 }
コード例 #2
0
ファイル: TransferProcessor.cs プロジェクト: al-main/vabank
 protected override IEnumerable<ApplicationEvent> ProcessPending(BankOperationProcessorCommand command)
 {
     var transfer = (Transfer) command.BankOperation;
     var appOperationId = command.OperationId;
     if (transfer.Withdrawal != null &&
         transfer.Withdrawal.Status == ProcessStatus.Pending &&
         transfer.Deposit == null)
     {
         return WhenWithdrawalPending(appOperationId, transfer);
     }
     if (transfer.Withdrawal != null &&
         transfer.Deposit == null &&
         transfer.Withdrawal.Status == ProcessStatus.Failed)
     {
         return WhenWithdrawalFailed(appOperationId, transfer);
     }
     if (transfer.Withdrawal != null &&
         transfer.Deposit == null &&
         transfer.Withdrawal.Status == ProcessStatus.Completed)
     {
         return WhenWithdrawalCompleted(appOperationId, transfer);
     }
     if (transfer.Deposit != null &&
         transfer.Deposit.Status == ProcessStatus.Failed)
     {
         return WhenDepositFailed(appOperationId, transfer);
     }
     if (transfer.Deposit != null &&
         transfer.Deposit.Status == ProcessStatus.Completed)
     {
         return WhenDepositCompleted(appOperationId, transfer);
     }
     return WhenStateIsInvalid(appOperationId, transfer);
 }
コード例 #3
0
 protected abstract IEnumerable<ApplicationEvent> ProcessPending(BankOperationProcessorCommand command);