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