/// <summary>
 /// <inheritdoc />
 /// </summary>
 /// <param name="ctx"></param>
 /// <param name="entry"></param>
 public void Log([FromServices] InfTestContext ctx, LogEntry entry)
 {
     if (ctx != null && entry != null)
     {
         bool hasEntry = ctx.LogEntries.Any(a => a.Id == entry.Id);
         if (!hasEntry)
         {
             ctx.LogEntries.Add(entry);
             ctx.SaveChanges();
         }
         ;
     }
     ;
 }
Esempio n. 2
0
        /// <summary>
        /// Реализует необходимую логику обработки полученных XML-данных с перечнем.
        /// </summary>
        /// <returns></returns>
        private IActionResult GetDataResult()
        {
            // Получаем исходный XML-документ
            XDocument xdoc = GetXmlData(@"https://scsanctions.un.org/resources/xml/ru/consolidated.xml");

            // Если XML-документ содержит корректные данные (правильно распарсен)...
            if (xdoc != null)
            {
                // Сохраняем результат проверки состояния перечня
                bool?check = ctx.HasThisGenerationDate(xdoc);

                // Если проверка вернула null
                if (!check.HasValue)
                {
                    // Записываем в лог сообщение об ошибке
                    var entry = logger.LogError("В полученном перечне отсутствуют сведения о его состоянии. Данные не сохранены.");
                    logger.Log(ctx, entry);

                    // Возвращаем ответ с кодом 400 и записью об ошибке
                    // НОВЫЕ ДАННЫЕ В БД НЕ СОХРАНЯЮТСЯ.
                    return(BadRequest(entry));
                }
                // ... иначе, если в XML-документе присутствует необходимый атрибут dateGenerated...
                else
                {
                    // Если в БД отсутствует перечень с полученным состоянием...
                    if (check.Value == false)
                    {
                        // Пытаемся создать новый экземпляр перечня и сохранить его в БД
                        try
                        {
                            // Генерируем инфо-сообщение о получении нового состояния
                            logger.Log(ctx, logger.LogInfo("Получено новое состояние перечня."));

                            // Создаем экземпляр перечня и сохраняем его в БД
                            var clist = new ConsolidatedList(xdoc);
                            ctx.ConsolidatedLists.Add(clist);
                            ctx.SaveChanges();

                            // Генерируем еще одно инфо-сообщение об удачном сохранении нового перечня
                            var entry = logger.LogInfo("Новое состояние перечня сохранено.");
                            logger.Log(ctx, entry);

                            // Возвращаем ответ с кодом 200 и сообщением об удачном сохранении нового перечня
                            // НОВЫЕ ДАННЫЕ СОХРАНЕНЫ В БД.
                            return(Ok(entry));
                        }
                        // Обрабатываем возможные ошибки (исключения)
                        catch (Exception ex)
                        {
                            // Записываем в лог сообщение об ошибке
                            var entry = logger.LogError(ex.Message);
                            logger.Log(ctx, entry);

                            // Возвращаем ответ с кодом 500 и записью об ошибке
                            // НОВЫЕ ДАННЫЕ В БД СОХРАНИТЬ НЕ УДАЛОСЬ.
                            return(new StatusCodeResult(500));
                        };
                    }
                    // ... иначе, если в БД уже присутствует перечень с полученным состоянием...
                    else
                    {
                        // Записываем в лог сообщение с предупреждением
                        var entry = logger.LogWarning("Полученное состояние перечня уже имеется в базе данных.");
                        logger.Log(ctx, entry);

                        // Возвращаем ответ с кодом 400 и записью-предупреждением
                        // ПОЛУЧЕННЫЕ ДАННЫЕ НЕ СОХРАНЯЮТСЯ В БД.
                        return(BadRequest(entry));
                    };
                };
            }
            // ... иначе, если GET-запрос к источнику XML-данных вернул некорректные XML-данные,
            // которые не могут быть представлены в виде корректного XML-документа...
            else
            {
                // Записываем в лог сообщение об ошибке
                var entry = logger.LogError("Запрос вернул некорректный XML-документ. Данные не сохранены.");
                logger.Log(ctx, entry);

                // Возвращаем ответ с кодом 400 и записью об ошибке
                // ПОЛУЧЕННЫЕ ДАННЫЕ НЕ СОХРАНЯЮТСЯ В БД.
                return(BadRequest(entry));
            };
        }