using SchoolContracts.BindingModels; using SchoolContracts.BusinessLogicContracts; using SchoolContracts.SearchModels; using SchoolContracts.StoragesContracts; using SchoolContracts.ViewModels; using Microsoft.Extensions.Logging; namespace SchoolBusinessLogics.BusinessLogics { public class DisciplineLogic : IDisciplineLogic { private readonly ILogger _logger; private readonly IDisciplineStorage _disciplineStorage; public DisciplineLogic(ILogger logger, IDisciplineStorage disciplineStorage) { _logger = logger; _disciplineStorage = disciplineStorage; } public void CheckModel(DisciplineBindingModel model, bool checkParams = true) { const string txt = "Произошла ошибка на уровне проверки DisciplineBindingModel."; if (model == null) { throw new ArgumentNullException(nameof(model), txt); } if (checkParams is false) { return; } } public List ReadList(DisciplineSearchModel? model) { try { var results = model != null ? _disciplineStorage.GetFilteredList(model) : _disciplineStorage.GetFullList(); _logger.LogDebug("Список полученных дисциплин на посещение: {@disciplinesVisit}", results); _logger.LogInformation("Извлечение списка в количестве {Count} c дисциплин на посещение по модели: {@DisciplineSearchModel}", results.Count, model); return results; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки получить список по модели: {@DisciplineSearchModel}", model); throw; } } public DisciplineViewModel ReadElement(DisciplineSearchModel model) { try { var result = _disciplineStorage.GetElement(model); if (result == null) { throw new ArgumentNullException($"Результат получения элемента с айди {model.Id} оказался нулевым"); } _logger.LogInformation("Извлечение элемента {@DisciplineViewModel} c дисциплин на посещение по модели: {@DisciplineSearchModel}", result, model); return result; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки получить элемент по модели: {@DisciplineSearchModel}", model); throw; } } public bool Create(DisciplineBindingModel model) { try { CheckModel(model); var result = _disciplineStorage.Insert(model); if (result == null) { throw new ArgumentNullException($"Результат создания дисциплины на посещение оказался нулевым"); } _logger.LogInformation("Была создана сущность: {@DisciplineViewModel}", result); return true; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки создать элемент по модели: {@DisciplineBindingModel}", model); throw; } } public bool Update(DisciplineBindingModel model) { try { CheckModel(model); var result = _disciplineStorage.Update(model); if (result == null) { throw new ArgumentNullException($"Результат обновления дисциплины на посещение оказался нулевым"); } _logger.LogInformation("Была обновлена сущность на: {@DisciplineViewModel}", result); return true; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки обновить элемент по модели: {@DisciplineBindingModel}", model); throw; } } public bool Delete(DisciplineBindingModel model) { try { CheckModel(model, false); var result = _disciplineStorage.Delete(model); if (result == null) { throw new ArgumentNullException($"Результат удаления дисциплины на посещение оказался нулевым"); } _logger.LogInformation("Была удалена сущность: {@DisciplineViewModel}", result); return true; } catch (Exception e) { _logger.LogError(e, "Произошла ошибка при попытки удалить элемент по модели: {@DisciplineBindingModel}", model); throw; } } } }