public async Task <IHttpActionResult> Transit([FromBody] CreditCardTransitRequestViewModel transitModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            string         username = HttpContext.Current.User.Identity.Name;
            IdentityResult result   = await _repo.Transit(username, transitModel);

            IHttpActionResult errorResult = GetErrorResult(result);

            return(errorResult == null?Ok() : errorResult);
        }
        public async Task <IdentityResult> Transit(string username, CreditCardTransitRequestViewModel transitModel)
        {
            var deal = await _context.Deals.FirstOrDefaultAsync(d => d.Id == transitModel.DealId);

            if (deal == null)
            {
                return(IdentityResult.Failed($"Deal '{transitModel.DealId}' not found."));
            }

            var user = await _context.Users.FirstOrDefaultAsync(u => u.UserName == username);

            if (user == null)
            {
                return(IdentityResult.Failed($"User '{username}' not found."));
            }

            if (deal.UserOwner.Id != user.Id)
            {
                return(IdentityResult.Failed($"Can not transit money via other account."));
            }

            if (user.UserInfo.Card.Balance < transitModel.Amount)
            {
                return(IdentityResult.Failed("Not enough money."));
            }

            deal.UserOwner.UserInfo.Card.Balance    -= transitModel.Amount;
            deal.UserCreditor.UserInfo.Card.Balance += transitModel.Amount;
            deal.ReturnedAmount += transitModel.Amount;

            try
            {
                await _context.SaveChangesAsync();

                return(IdentityResult.Success);
            }
            catch (DbEntityValidationException ex)
            {
                _logger.Error("CreditCardRepository.Transit", ex);
                return(IdentityResult.Failed(ex.GetValidationErrors()));
            }
            catch (Exception ex)
            {
                _logger.Error("CreditCardRepository.Transit", ex);
                return(null);
            }
        }