148 lines
5.9 KiB
C#
148 lines
5.9 KiB
C#
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|