public async Task <IActionResult> CheckPaymentTestAsync([FromForm] PaymentSuccessInput paymentSuccessInput) { await _paymentService.RefillBalanceAsync(paymentSuccessInput); // TODO: Менять при тесте на http://localhost:8080/home или для прода https://barbuuuda.ru return(new RedirectResult("http://localhost:8080/home")); //return new RedirectResult(" https://barbuuuda.ru"); //return new RedirectResult(" https://barbuuuda.com"); }
/// <summary> /// Метод пополнит счет пользователя на сервисе в переданной валюте, либо создаст новый счет в этой валюте. /// Также в этом методе происходит запись заказа в БД. /// Также этот метод производит вычитание суммы при оплате задания со счета заказчика. /// </summary> /// <param name="paymentSuccessInput">Входная модель.</param> /// <returns>Флаг успеха.</returns> public async Task <bool> RefillBalanceAsync(PaymentSuccessInput paymentSuccessInput) { try { OrderEntity order; IFormatProvider formatter = new NumberFormatInfo { NumberDecimalSeparator = "." }; // Найдет Id пользователя по его логину. string userId = await _userService.GetUserIdByLogin(paymentSuccessInput.Account); if (string.IsNullOrEmpty(userId)) { throw new NotFoundUserException(paymentSuccessInput.Account); } if (paymentSuccessInput.LMI_PAYMENT_AMOUNT == null || string.IsNullOrEmpty(paymentSuccessInput.LMI_CURRENCY)) { throw new EmptyInvoiceParameterException(); } // Если валюта не передана, значит выставить ее по дефолту в RUB. if (!string.IsNullOrEmpty(paymentSuccessInput.LMI_CURRENCY)) { paymentSuccessInput.LMI_CURRENCY = CurrencyType.CURRENCY_RUB; } // Если идет пополнение счета. if (paymentSuccessInput.Refill) { // Ищет счет пользователя по UserId. InvoiceEntity invoice = await _postgre.Invoices .Where(i => i.UserId .Equals(userId) && i.Currency .Equals(paymentSuccessInput.LMI_CURRENCY)) .FirstOrDefaultAsync(); // Если счет пользователя в текущей валюте найден, то запишет средства на этот счет в этой валюте. if (invoice != null) { invoice.InvoiceAmount += decimal.Parse(paymentSuccessInput.LMI_PAYMENT_AMOUNT, formatter); await _postgre.SaveChangesAsync(); } // Счета у пользователя в этой валюте не найдено, значит создаст счет в этой валюте. else { await _postgre.Invoices.AddAsync(new InvoiceEntity { UserId = userId, InvoiceAmount = 0, Currency = paymentSuccessInput.LMI_CURRENCY, ScoreNumber = null, ScoreEmail = string.Empty }); await _postgre.SaveChangesAsync(); } order = new OrderEntity { Id = userId, Amount = decimal.Parse(paymentSuccessInput.LMI_PAYMENT_AMOUNT, formatter), Currency = paymentSuccessInput.LMI_CURRENCY, DateCreate = DateTime.Now }; } // Если идет оплата задания. else { order = new OrderEntity { Id = userId, Amount = decimal.Parse(paymentSuccessInput.LMI_PAYMENT_AMOUNT, formatter), TaskId = paymentSuccessInput.TaskId, Currency = paymentSuccessInput.LMI_CURRENCY, DateCreate = DateTime.Now }; } // Запишет заказ пользователя в таблицу заказов. await _postgre.Orders.AddAsync(order); await _postgre.SaveChangesAsync(); return(true); } catch (Exception ex) { Console.WriteLine(ex); Logger logger = new Logger(_db, ex.GetType().FullName, ex.Message, ex.StackTrace); await logger.LogCritical(); throw; } }