2024-04-29 18:18:46 +04:00

150 lines
5.9 KiB
C#
Raw 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 System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using UniversityContracts.BusinessLogicContracts;
using UniversityContracts.BindingModels;
using UniversityContracts.SearchModels;
using UniversityContracts.StoragesContracts;
using UniversityContracts.ViewModels;
namespace UniversityBusinessLogics.BusinessLogic
{
public class ClassLogic : IClassLogic
{
private readonly ILogger _logger;
private readonly IClassStorage _carStorage;
public ClassLogic(ILogger<ClassLogic> logger, IClassStorage carStorage)
{
_logger = logger;
_carStorage = carStorage;
}
public void CheckOnlyModel(ClassBindingModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model), "Произошла ошибка на уровне проверки OperationBindingModel");
}
}
private void CheckUpdateModel(ClassBindingModel model)
{
CheckOnlyModel(model);
if (model.Price <= 0)
{
throw new ArgumentException($"Произошла ошибка на уровне проверки OperationBindingModel. Стоимость операции (Price={model.Price}) должна быть больше 0");
}
}
public void CheckFullModel(ClassBindingModel model)
{
CheckOnlyModel(model);
CheckUpdateModel(model);
if (string.IsNullOrEmpty(model.Name) && string.IsNullOrEmpty(model.Time))
{
throw new ArgumentNullException($"Произошла ошибка на уровне проверки OperationBindingModel.Вид и тип операции не должна быть нулевыми или пустыми.");
}
}
public List<ClassViewModel> ReadList(ClassSearchModel? 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 ClassViewModel ReadElement(ClassSearchModel 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(ClassBindingModel 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(ClassBindingModel 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(ClassBindingModel 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;
}
}
}
}