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