CourseWork_Bank/Bank/BankBusinessLogics/BusinessLogic/CostLogic.cs

139 lines
5.1 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 CostLogic : ICostLogic
{
private readonly ILogger _logger;
private readonly ICostStorage _costStorage;
public CostLogic(ILogger<CostLogic> logger, ICostStorage costStorage)
{
_logger = logger;
_costStorage = costStorage;
}
public void CheckModel(CostBindingModel model, bool checkParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (checkParams is false)
{
return;
}
if (string.IsNullOrEmpty(model.NameOfCost))
{
throw new ArgumentNullException($"Имя затраты не должно быть пустым");
}
if (model.Price <= 0)
{
throw new ArgumentException($"Стоимость должна быть больше 0");
}
}
public bool Create(CostBindingModel model)
{
try
{
CheckModel(model);
var result = _costStorage.Insert(model);
if (result == null)
{
throw new ArgumentNullException($"Затрата не создана");
}
_logger.LogInformation("Была создана сущность {@CostViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки создать элемент по {@CostBindingModel} модели", model);
throw;
}
}
public bool Delete(CostBindingModel model)
{
try
{
CheckModel(model, false);
var result = _costStorage.Delete(model);
if (result == null)
{
throw new ArgumentNullException($"Удалить затрату не удалось");
}
_logger.LogInformation("Была удалена сущность {@CostViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки удалить элемент по {@CostBindingModel} модели", model);
throw;
}
}
public CostViewModel ReadElement(CostSearchModel model)
{
try
{
var result = _costStorage.GetElement(model);
if (result == null)
{
throw new ArgumentNullException($"Не получилось получить id {model.Id}");
}
_logger.LogInformation("Извлечение элемента {@CostViewModel} c затрат по {@CostSearchModel} модели", result, model);
return result;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки получить элемент по {@CostSearchModel} модели", model);
throw;
}
}
public List<CostViewModel> ReadList(CostSearchModel? model = null)
{
try
{
var results = model != null ? _costStorage.GetFilteredList(model) : _costStorage.GetFullList();
_logger.LogDebug("Список полученных статей затрат {@costs}", results);
_logger.LogInformation("Извлечение списка c затрат по {@CostSearchModel} модели", model);
return results;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки получить список по {@CostSearchModel} модели", model);
throw;
}
}
public bool Update(CostBindingModel model)
{
try
{
//CheckModel(model);
var result = _costStorage.Update(model);
if (result == null)
{
throw new ArgumentNullException($"Не получилось обновить затраты");
}
_logger.LogInformation("Обновлена сущность на {@CostViewModel}", result);
return true;
}
catch (Exception e)
{
_logger.LogError(e, "Произошла ошибка при попытки обновить элемент по {@CostBindingModel} модели", model);
throw;
}
}
}
}