fix: logic errors in view models

This commit is contained in:
2026-08-10 08:59:17 +03:00
parent 5b6abc045b
commit 089df7d524
4 changed files with 121 additions and 133 deletions
@@ -321,63 +321,11 @@ public partial class SampleCalibrationViewModel : ViewModelBase
_logger.LogTrace("Выбран элемент из списка: {}", value);
// Находим запись в базе данных
var selectedRecord = _context.SampleRecords.Find(MenuItems[value].Id);
// Если запись найдена, то заполняем поля из базы данных
if (selectedRecord is not null)
{
// Заполняем простые поля
Record.Id = selectedRecord.Id;
Record.Uuid = selectedRecord.Uuid;
Record.CreateDateTime = selectedRecord.CreateDateTime;
Record.EditDateTime = selectedRecord.EditDateTime;
Record.SampleName = selectedRecord.SampleName;
Record.SampleComment = selectedRecord.SampleComment;
Record.SamplingDateTime = selectedRecord.SamplingDateTime;
Record.SamplingPlace = selectedRecord.SamplingPlace;
Record.MixtureActualRate = selectedRecord.MixtureActualRate;
Record.MeasuredContent = selectedRecord.MeasuredContent;
if (selectedRecord.Features.Count() > 0)
Record.Features = selectedRecord.Features.Chunk(AnalyzerService.FEATURES_LENGTH).Select(v => v.ToArray()).ToList();
else
Record.Features = new List<float[]>();
// Ищем изображение в базе данных
var imageRecord = _context.ImageRecords.Find(selectedRecord.ImageId);
// Если изображение не найдено в базе данных, то логгируем как ошибку
if (imageRecord is null)
_logger.LogError("Не удалось найти элемент с Id({}) в таблице {}", selectedRecord.ImageId, nameof(_context.ImageRecords));
// В любом случае заполняем изображение
Record.Image.Data = imageRecord?.Base64 ?? "";
// Ищем марку в базе данных
var brandRecord = _context.BrandRecords.Find(selectedRecord.BrandId);
// Если марка не найдена в базе данных
if (brandRecord is null)
{
// Логгируем как ошибку
_logger.LogError("Не удалось найти элемент с Id({}) в таблице {}", selectedRecord.BrandId, nameof(_context.BrandRecords));
// Устанавливаем, что элемент не выбран
BrandComboBoxSelectedIndex = -1;
}
// Если марка найдена в базе данных
else
{
// Ищем марку в выпадающем списке марок
var brandComboBoxItem = BrandComboBoxItems.FirstOrDefault(r => r.Id == brandRecord.Id);
// Если марка не найдена в выпадающем списке марок, то логгируем как ошибку
if (brandComboBoxItem is null)
_logger.LogError("Не удалось найти элемент с Id({}) в списке {}", brandRecord.Id, nameof(BrandComboBoxItems));
// Если марка найдена в выпадающем списке марок, выбираем её
else
BrandComboBoxSelectedIndex = BrandComboBoxItems.IndexOf(brandComboBoxItem);
}
return;
}
// Если значение не найдено в базе данных
else
if (selectedRecord is null)
{
// Логгируем как ошибку
_logger.LogError("Не удалось найти элемент с Id({}) в таблице {}", MenuItems[value].Id, nameof(_context.BrandRecords));
_logger.LogError("Не удалось найти элемент с Id({}) в таблице {}", MenuItems[value].Id, nameof(_context.SampleRecords));
var nonExistingIndex = MenuSelectedIndex; // Сохраняем несуществующий индекс
// Устанавливаем, что запись не выбрана, этот метод вызовется повторно и заполнит поля пустыми значениями
MenuSelectedIndex = -1;
@@ -385,6 +333,55 @@ public partial class SampleCalibrationViewModel : ViewModelBase
MenuItems.RemoveAt(nonExistingIndex);
return;
}
// Если запись найдена, то заполняем поля из базы данных
// Заполняем простые поля
Record.Id = selectedRecord.Id;
Record.Uuid = selectedRecord.Uuid;
Record.CreateDateTime = selectedRecord.CreateDateTime;
Record.EditDateTime = selectedRecord.EditDateTime;
Record.SampleName = selectedRecord.SampleName;
Record.SampleComment = selectedRecord.SampleComment;
Record.SamplingDateTime = selectedRecord.SamplingDateTime;
Record.SamplingPlace = selectedRecord.SamplingPlace;
Record.MixtureActualRate = selectedRecord.MixtureActualRate;
Record.MeasuredContent = selectedRecord.MeasuredContent;
if (selectedRecord.Features.Count() > 0)
Record.Features = selectedRecord.Features.Chunk(AnalyzerService.FEATURES_LENGTH).Select(v => v.ToArray()).ToList();
else
Record.Features = new List<float[]>();
// Ищем изображение в базе данных
var imageRecord = _context.ImageRecords.Find(selectedRecord.ImageId);
// Если изображение не найдено в базе данных, то логгируем как ошибку
if (imageRecord is null)
_logger.LogError("Не удалось найти элемент с Id({}) в таблице {}", selectedRecord.ImageId, nameof(_context.ImageRecords));
// В любом случае заполняем изображение
Record.Image.Data = imageRecord?.Base64 ?? "";
// Ищем марку в базе данных
var brandRecord = _context.BrandRecords.Find(selectedRecord.BrandId);
// Если марка не найдена в базе данных
if (brandRecord is null)
{
// Логгируем как ошибку
_logger.LogError("Не удалось найти элемент с Id({}) в таблице {}", selectedRecord.BrandId, nameof(_context.BrandRecords));
// Устанавливаем, что элемент не выбран
BrandComboBoxSelectedIndex = -1;
}
// Если марка найдена в базе данных
else
{
// Ищем марку в выпадающем списке марок
var brandComboBoxItem = BrandComboBoxItems.FirstOrDefault(r => r.Id == brandRecord.Id);
// Если марка не найдена в выпадающем списке марок, то логгируем как ошибку
if (brandComboBoxItem is null)
_logger.LogError("Не удалось найти элемент с Id({}) в списке {}", brandRecord.Id, nameof(BrandComboBoxItems));
// Если марка найдена в выпадающем списке марок, выбираем её
else
BrandComboBoxSelectedIndex = BrandComboBoxItems.IndexOf(brandComboBoxItem);
}
return;
}
// Если элемент не выбран, заполняем поля пустыми значениями