using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UniversityBusinessLogics.BusinessLogic { public class ClassLogic : IClassLogic { private readonly ILogger _logger; private readonly IOperationStorage _carStorage; public OperationLogic(ILogger logger, IOperationStorage carStorage) { _logger = logger; _carStorage = carStorage; } public void CheckOnlyModel(OperationBindingModel model) { if (model == null) { throw new ArgumentNullException(nameof(model), "Произошла ошибка на уровне проверки OperationBindingModel"); } } private void CheckUpdateModel(OperationBindingModel model) { CheckOnlyModel(model); if (model.Price <= 0) { throw new ArgumentException($"Произошла ошибка на уровне проверки OperationBindingModel. Стоимость операции (Price={model.Price}) должна быть больше 0"); } } public void CheckFullModel(OperationBindingModel model) { CheckOnlyModel(model); CheckUpdateModel(model); if (string.IsNullOrEmpty(model.Model) && string.IsNullOrEmpty(model.Mark)) { throw new ArgumentNullException($"Произошла ошибка на уровне проверки OperationBindingModel.Вид и тип операции не должна быть нулевыми или пустыми."); } } public List ReadList(OperationSearchModel? model) { try { var results = model != null ? _carStorage.GetFilteredList(model) : _carStorage.GetFullList(); _logger.LogDebug("Список операций: {@operations}", results); _logger.LogInformation("Извлечение списка операций по {@OperationSearchModel} модели", model); return results; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки получить список по {@OperationSearchModel} модели", model); throw; } } public OperationViewModel ReadElement(OperationSearchModel model) { try { var result = _carStorage.GetElement(model); if (result == null) { throw new ArgumentNullException($"Не получилось получить эдемент с id {model.Id}"); } _logger.LogInformation("Извлечение элемента {@OperationViewModel} c обследований по {@OperationSearchModel} модели", result, model); return result; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки получить элемент по {@OperationSearchModel} модели:", model); throw; } } public bool Create(OperationBindingModel model) { try { CheckFullModel(model); var result = _carStorage.Insert(model); if (result == null) { throw new ArgumentNullException($"Не получилось создать операцию"); } _logger.LogInformation("Создана сущность {@OperationViewModel}", result); return true; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки создать элемент по {@OperationBindingModel} модели", model); throw; } } public bool Update(OperationBindingModel model) { try { CheckFullModel(model); var result = _carStorage.Update(model); if (result == null) { throw new ArgumentNullException($"Результат обновления обследований оказался нулевым"); } _logger.LogInformation("Была обновлена сущность на: {@OperationViewModel}", result); return true; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки обновить элемент по модели: {@OperationBindingModel}", model); throw; } } public bool Delete(OperationBindingModel model) { try { CheckOnlyModel(model); var result = _carStorage.Delete(model); if (result == null) { throw new ArgumentNullException($"Не получилось удалить операциб"); } _logger.LogInformation("Удалена сущность {@OperationViewModel}", result); return true; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки удалить элемент по {@OperationBindingModel} модели", model); throw; } } } }