ISEbd-22_CourseWork_School/School/SchoolBusinessLogics/BusinessLogics/StudentLogic.cs

148 lines
5.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Extensions.Logging;
using SchoolContracts.BindingModels;
using SchoolContracts.BusinessLogicContracts;
using SchoolContracts.SearchModels;
using SchoolContracts.StoragesContracts;
using SchoolContracts.ViewModels;
using static System.Net.Mime.MediaTypeNames;
namespace SchoolBusinessLogics.BusinessLogics
{
public class StudentLogic : IStudentLogic
{
private readonly ILogger _logger;
private readonly IStudentStorage _studentStorage;
private const string ErrorString = "Произошла ошибка на уровне проверки StudentBindingModel.";
public StudentLogic(ILogger<StudentLogic> logger, IStudentStorage studentStorage)
{
_logger = logger;
_studentStorage = studentStorage;
}
private void CheckOnlyModel(StudentBindingModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model), ErrorString);
}
}
private void CheckUpdateModel(StudentBindingModel model)
{
CheckOnlyModel(model);
if (model.Course <= 0)
{
throw new ArgumentException(ErrorString + $"Курс (Course={model.Course}) должна быть больше 0");
}
}
public void CheckFullModel(StudentBindingModel model)
{
CheckOnlyModel(model);
CheckUpdateModel(model);
if (string.IsNullOrEmpty(model.Name))
{
throw new ArgumentNullException(ErrorString + $"Имя клиента не должно быть нулевым или пустым. Полученное имя: \"{model.Name}\"");
}
}
public List<StudentViewModel> ReadList(StudentSearchModel? model)
{
try
{
var results = model != null ? _studentStorage.GetFilteredList(model) : _studentStorage.GetFullList();
_logger.LogDebug("Список полученных клиентов: {@students}", results);
_logger.LogInformation("Извлечение списка в количестве {Count} c клиентов по модели: {@StudentSearchModel}", results.Count, model);
return results;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки получить список по модели: {@StudentSearchModel}", model);
throw;
}
}
public StudentViewModel ReadElement(StudentSearchModel model)
{
try
{
var result = _studentStorage.GetElement(model);
if (result == null)
{
throw new ArgumentNullException($"Результат получения элемента с айди {model.Id} оказался нулевым");
}
_logger.LogInformation("Извлечение элемента {@StudentViewModel} c клиентов по модели: {@StudentSearchModel}", result, model);
return result;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки получить элемент по модели: {@StudentSearchModel}", model);
throw;
}
}
public bool Create(StudentBindingModel model)
{
try
{
CheckFullModel(model);
var result = _studentStorage.Insert(model);
if (result == null)
{
throw new ArgumentNullException($"Результат создания клиентов оказался нулевым");
}
_logger.LogInformation("Была создана сущность: {@StudentViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки создать элемент по модели: {@StudentBindingModel}", model);
throw;
}
}
public bool Update(StudentBindingModel model)
{
try
{
CheckUpdateModel(model);
var result = _studentStorage.Update(model);
if (result == null)
{
throw new ArgumentNullException($"Результат обновления клиентов оказался нулевым");
}
_logger.LogInformation("Была обновлена сущность на: {@StudentViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки обновить элемент по модели: {@StudentBindingModel}", model);
throw;
}
}
public bool Delete(StudentBindingModel model)
{
try
{
CheckOnlyModel(model);
var result = _studentStorage.Delete(model);
if (result == null)
{
throw new ArgumentNullException($"Результат удаления клиентов оказался нулевым");
}
_logger.LogInformation("Была удалена сущность: {@StudentViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки удалить элемент по модели: {@StudentBindingModel}", model);
throw;
}
}
}
}