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); } }