public TransferResultDTO TransferTransaction(TransferInDTO dto) { TransferResultDTO result = new TransferResultDTO(); using (BaseContext context = ContextFactory.Create()) { IUnitOfWork uow = new BaseUnitOfWork(context); IRepository <Account> accountRepository = uow.GetRepository <Account>(); IRepository <Customer> customerRepository = uow.GetRepository <Customer>(); var fromAccount = accountRepository.GetAll(x => x.Id == dto.FromAccountId && x.CustomerId == dto.CustomerId && x.Status == 1).FirstOrDefault(); var accountNo = dto.ToAccountNo.Substring(0, 4); var accountIntNo = Convert.ToInt32(accountNo); var customerNo = dto.ToAccountNo.Substring(4, 5); var customerIntNo = Convert.ToInt32(customerNo); var toCustomer = customerRepository.GetAll(x => x.CustomerNo == customerIntNo && x.Status == 1).FirstOrDefault(); var toAccount = accountRepository.GetAll(x => x.AccountNo == accountIntNo && x.CustomerId == toCustomer.Id && x.Status == 1).FirstOrDefault(); if (fromAccount == null || toAccount == null) { result.IsSuccess = false; result.ResponseMessage = "Geçersiz bir işlem yürütüldü. Girdiğiniz bilgileri kontrol ediniz."; } else if (fromAccount.Balance < dto.FromBalance) { result.IsSuccess = false; result.ResponseMessage = "Hesabınızda yeteri kadar bakiye bulunmamaktadır."; } else if (fromAccount.CustomerId != dto.CustomerId) { result.IsSuccess = false; result.ResponseMessage = "Fraud işlem algılandı. İşlem iptal edildi."; } else { fromAccount.Balance -= dto.FromBalance; toAccount.Balance += dto.FromBalance; uow.SaveChanges(); result.IsSuccess = true; result.ResponseMessage = "Transfer başarıyla gerçekleştirildi."; } return(result); } }
public ActionResult Transfer(TransferInDTO dto) { if (dto.FromAccountId == 0 || dto.FromBalance <= 0 || string.IsNullOrWhiteSpace(dto.ToAccountNo)) { TempData["Error"] = "Girdiğiniz bilgileri kontrol ediniz."; return(Redirect($"/Account/Transfer")); } dto.CustomerId = UserSession.Info.Id; TransferResultDTO result = _accountService.TransferTransaction(dto); if (result.IsSuccess) { TempData["Success"] = result.ResponseMessage; return(Redirect($"/Account/Index")); } else { TempData["Error"] = "Girdiğiniz bilgileri kontrol ediniz."; return(Redirect($"/Account/Transfer")); } }