CourseWork_Bank/Bank/BankBusinessLogics/BusinessLogic/OperationLogic.cs

144 lines
5.8 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 BankContracts.BindingModels;
using BankContracts.BusinessLogicContracts;
using BankContracts.SearchModels;
using BankContracts.StoragesContracts;
using BankContracts.ViewModels;
using Microsoft.Extensions.Logging;
namespace BankBusinessLogics.BusinessLogic
{
public class OperationLogic : IOperationLogic
{
private readonly ILogger _logger;
private readonly IOperationStorage _opationStorage;
public OperationLogic(ILogger<OperationLogic> logger, IOperationStorage operationStorage)
{
_logger = logger;
_opationStorage = operationStorage;
}
public void CheckOnlyModel(OperationBindingModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model), "Произошла ошибка на уровне проверки OperationBindingModel");
}
}
private void CheckUpdateModel(OperationBindingModel model)
{
CheckOnlyModel(model);
if (model.Price <= 0)
{
throw new ArgumentException($"Произошла ошибка на уровне проверки OperationBindingModel. Стоимость операции (Price={model.Price}) должна быть больше 0");
}
}
public void CheckFullModel(OperationBindingModel model)
{
CheckOnlyModel(model);
CheckUpdateModel(model);
if (string.IsNullOrEmpty(model.Model) && string.IsNullOrEmpty(model.Mark))
{
throw new ArgumentNullException($"Произошла ошибка на уровне проверки OperationBindingModel.Вид и тип операции не должна быть нулевыми или пустыми.");
}
}
public List<OperationViewModel> ReadList(OperationSearchModel? model)
{
try
{
var results = model != null ? _opationStorage.GetFilteredList(model) : _opationStorage.GetFullList();
_logger.LogDebug("Список операций: {@operations}", results);
_logger.LogInformation("Извлечение списка операций по {@OperationSearchModel} модели", model);
return results;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки получить список по {@OperationSearchModel} модели", model);
throw;
}
}
public OperationViewModel ReadElement(OperationSearchModel model)
{
try
{
var result = _opationStorage.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(OperationBindingModel model)
{
try
{
CheckFullModel(model);
var result = _opationStorage.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(OperationBindingModel model)
{
try
{
CheckFullModel(model);
var result = _opationStorage.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(OperationBindingModel model)
{
try
{
CheckOnlyModel(model);
var result = _opationStorage.Delete(model);
if (result == null)
{
throw new ArgumentNullException($"Не получилось удалить операциб");
}
_logger.LogInformation("Удалена сущность {@OperationViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки удалить элемент по {@OperationBindingModel} модели", model);
throw;
}
}
}
}