Example #1
0
        private object PerformTransaction(Request request)
        {
            var transaction = _context.Transactions.SingleOrDefault(x => x.PaycomTransactionId == request.Params.Id);

            if (transaction == null)
            {
                throw new AppException("Transaction not found.", -31003);
            }
            switch (transaction.State)
            {
            case TransactionEntity.STATE_CREATED:
                if (transaction.isExpired())
                {
                    Cancel(transaction, TransactionEntity.REASON_CANCELLED_BY_TIMEOUT);
                    throw new AppException("Transaction is expired.", -31008);
                }
                else
                {
                    _userService.AddAmountToBalance(transaction.UserId, transaction.Amount);
                    transaction.State       = TransactionEntity.STATE_COMPLETED;
                    transaction.PerformTime = DateHelper.GetDate();
                    _context.Transactions.Update(transaction);
                    _context.SaveChanges();
                    return(new
                    {
                        perform_time = DateHelper.GetTotalMillisecondsByDate(transaction.PerformTime),
                        transaction = transaction.Id.ToString(),
                        state = transaction.State
                    });
                }

            case TransactionEntity.STATE_COMPLETED:
                return(new
                {
                    perform_time = DateHelper.GetTotalMillisecondsByDate(transaction.PerformTime),
                    transaction = transaction.Id.ToString(),
                    state = transaction.State
                });

            default:
                throw new AppException("Could not perform this operation.", -31008);
            }
        }