public async Task <ActionResult <Product> > UpdateProductScheduler(ProductSchedulerDto productSchedulerDto)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    _logger.LogError($"Валидация модели не успешна {ModelState}");
                    return(BadRequest(ModelState));
                }

                var productDto = await _productWatcherManager.GetProductAsync(productSchedulerDto.ProductId);

                if (productDto == null)
                {
                    _logger.LogError($"Не удалось найти продукт с {nameof(productSchedulerDto.ProductId)}={productSchedulerDto.ProductId}");
                    return(NotFound($"Не удалось найти продукт с {nameof(productSchedulerDto.ProductId)}={productSchedulerDto.ProductId}"));
                }

                if (productDto.IsDeleted)
                {
                    _logger.LogError("Нельзя обновить расписание по удаленному продукту");
                    return(BadRequest("Нельзя обновить расписание по удаленному продукту"));
                }

                if (productDto.Site.Settings.AutoGenerateSchedule)
                {
                    _logger.LogError("Нельзя обновить расписание по продукту с автоматическим расписанием");
                    return(BadRequest("Нельзя обновить расписание по продукту с автоматическим расписанием"));
                }

                await _productWatcherManager.UpdateProductScheduler(productDto, productSchedulerDto.Scheduler);

                _logger.LogInformation($"Продукту с {nameof(productDto.Id)}={productDto.Id} изменено расписание на {JsonSerializer.Serialize(productSchedulerDto.Scheduler)}");

                return(Ok(productDto));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Внутренняя ошибка сервиса при обработке запроса");
                return(StatusCode(500, "Ошибка при обработке запроса"));
            }
        }
예제 #2
0
        public async Task CreateOrUpdateScheduler(ProductSchedulerDto productSchedulerDto)
        {
            if (productSchedulerDto == null)
            {
                _logger.LogError($"Параметр {nameof(productSchedulerDto)} не может быть null");
                throw new ArgumentNullException($"Параметр {nameof(productSchedulerDto)} не может быть null");
            }

            var content = new StringContent(JsonSerializer.Serialize(productSchedulerDto), Encoding.UTF8, "application/json");

            var requestUrl = $"{_baseUrl}/api/HangfireScheduler/Products";
            var response   = await _httpClient.PostAsync(requestUrl, content);

            if (!response.IsSuccessStatusCode)
            {
                _logger.LogError($"Не удалось отправить запрос по {requestUrl}");
                response.EnsureSuccessStatusCode();
            }

            _logger.LogInformation($"Успешно отправлен запрос на создание или обновления расписания {requestUrl}");
        }
예제 #3
0
        public async Task <IActionResult> CreateOrUpdateProductScheduler([FromBody] ProductSchedulerDto productScheduler)
        {
            if (!ModelState.IsValid)
            {
                _logger.LogError($"Валидация модели не успешна {ModelState}");
                return(BadRequest(ModelState));
            }

            _logger.LogInformation($"Поступил запрос на добавления расписания для продукта {JsonSerializer.Serialize(productScheduler)}");

            foreach (var scheduler in productScheduler.Scheduler)
            {
                string id = $"{productScheduler.ProductId}-{scheduler}";
                _recurringJobManager.AddOrUpdate(
                    id,
                    () => _webScraperClient.PostProductPrice(productScheduler.ProductId),
                    scheduler,
                    TimeZoneInfo.Local);

                _logger.LogInformation($"Задача c id={id} успешно добавлена");
            }

            return(Ok());
        }