140 lines
5.9 KiB
C#
140 lines
5.9 KiB
C#
|
using SchoolContracts.BindingModels;
|
|||
|
using SchoolContracts.BusinessLogicContracts;
|
|||
|
using SchoolContracts.SearchModels;
|
|||
|
using SchoolContracts.StoragesContracts;
|
|||
|
using SchoolContracts.ViewModels;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
|
|||
|
namespace SchoolBusinessLogics.BusinessLogics
|
|||
|
{
|
|||
|
public class RequirementLogic : IRequirementLogic
|
|||
|
{
|
|||
|
private readonly ILogger _logger;
|
|||
|
private readonly IRequirementStorage _requirementStorage;
|
|||
|
|
|||
|
public RequirementLogic(ILogger<RequirementLogic> logger, IRequirementStorage requirementStorage)
|
|||
|
{
|
|||
|
_logger = logger;
|
|||
|
_requirementStorage = requirementStorage;
|
|||
|
}
|
|||
|
|
|||
|
public void CheckModel(RequirementBindingModel model, bool checkParams = true)
|
|||
|
{
|
|||
|
const string txt = "Произошла ошибка на уровне проверки RequirementBindingModel.";
|
|||
|
if (model == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException(nameof(model), txt);
|
|||
|
}
|
|||
|
if (checkParams is false)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (string.IsNullOrEmpty(model.NameOfRequirement))
|
|||
|
{
|
|||
|
throw new ArgumentNullException(txt + $"Имя требованийы не должно быть нулевым или пустым. Полученное имя: \"{model.NameOfRequirement}\"");
|
|||
|
}
|
|||
|
|
|||
|
if (model.Price <= 0)
|
|||
|
{
|
|||
|
throw new ArgumentException(txt + $"Стоимость требованийы (Price={model.Price}) должна быть больше 0");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public List<RequirementViewModel> ReadList(RequirementSearchModel? model)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var results = model != null ? _requirementStorage.GetFilteredList(model) : _requirementStorage.GetFullList();
|
|||
|
_logger.LogDebug("Список полученных статей требований: {@requirements}", results);
|
|||
|
_logger.LogInformation("Извлечение списка в количестве {Count} c требований по модели: {@RequirementSearchModel}", results.Count, model);
|
|||
|
return results;
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
_logger.LogError(e, "Произошла ошибка при попытки получить список по модели: {@RequirementSearchModel}", model);
|
|||
|
throw;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public RequirementViewModel ReadElement(RequirementSearchModel model)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
var result = _requirementStorage.GetElement(model);
|
|||
|
if (result == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException($"Результат получения элемента с айди {model.Id} оказался нулевым");
|
|||
|
}
|
|||
|
_logger.LogInformation("Извлечение элемента {@RequirementViewModel} c требований по модели: {@RequirementSearchModel}", result, model);
|
|||
|
return result;
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
_logger.LogError(e, "Произошла ошибка при попытки получить элемент по модели: {@RequirementSearchModel}", model);
|
|||
|
throw;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool Create(RequirementBindingModel model)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
CheckModel(model);
|
|||
|
var result = _requirementStorage.Insert(model);
|
|||
|
if (result == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException($"Результат создания требований оказался нулевым");
|
|||
|
}
|
|||
|
_logger.LogInformation("Была создана сущность: {@RequirementViewModel}", result);
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
_logger.LogError(e, "Произошла ошибка при попытки создать элемент по модели: {@RequirementBindingModel}", model);
|
|||
|
throw;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool Update(RequirementBindingModel model)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
CheckModel(model, false);
|
|||
|
var result = _requirementStorage.Update(model);
|
|||
|
if (result == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException($"Результат обновления требований оказался нулевым");
|
|||
|
}
|
|||
|
_logger.LogInformation("Была обновлена сущность на: {@RequirementViewModel}", result);
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
_logger.LogError(e, "Произошла ошибка при попытки обновить элемент по модели: {@RequirementBindingModel}", model);
|
|||
|
throw;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public bool Delete(RequirementBindingModel model)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
CheckModel(model, false);
|
|||
|
var result = _requirementStorage.Delete(model);
|
|||
|
if (result == null)
|
|||
|
{
|
|||
|
throw new ArgumentNullException($"Результат удаления требований оказался нулевым");
|
|||
|
}
|
|||
|
_logger.LogInformation("Была удалена сущность: {@RequirementViewModel}", result);
|
|||
|
return true;
|
|||
|
}
|
|||
|
catch (Exception e)
|
|||
|
{
|
|||
|
_logger.LogError(e, "Произошла ошибка при попытки удалить элемент по модели: {@RequirementBindingModel}", model);
|
|||
|
throw;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|