ISEbd-21_Melnikov_I.O._CarS.../CarService/CarServiceBusinessLogic/BusinessLogics/ItemLogic.cs

111 lines
3.0 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 CarServiceContracts.BindingModels;
using CarServiceContracts.BusinessLogicsContracts;
using CarServiceContracts.SearchModels;
using CarServiceContracts.StorageContracts;
using CarServiceContracts.ViewModels;
using Microsoft.Extensions.Logging;
namespace CarServiceBusinessLogic.BusinessLogics
{
public class ItemLogic : IItemLogic
{
private readonly ILogger _logger;
private readonly IItemStorage _itemStorage;
public ItemLogic(ILogger<ItemLogic> logger, IItemStorage itemStorage)
{
_logger = logger;
_itemStorage = itemStorage;
}
public List<ItemViewModel>? ReadList(ItemSearchModel? model)
{
_logger.LogInformation("ReadList. Id: {Id}", model?.Id);
var list = model == null ? _itemStorage.GetFullList() : _itemStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count: {Count}", list.Count);
return list;
}
public ItemViewModel? ReadElement(ItemSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. Id: {Id}", model.Id);
var element = _itemStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement found. Id: {Id}", element.Id);
return element;
}
public bool Create(ItemBindingModel model)
{
CheckModel(model);
if (_itemStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
return false;
}
return true;
}
public bool Update(ItemBindingModel model)
{
CheckModel(model);
if (_itemStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(ItemBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_itemStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
private void CheckModel(ItemBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
//Заполнено ли название?
if (string.IsNullOrEmpty(model.Name))
{
_logger.LogWarning("Item name is empty");
throw new ArgumentException("Не введено название");
}
//Название уникально?
var existingItem = _itemStorage.GetElement(new() { Name = model.Name });
if (existingItem != null)
{
_logger.LogWarning("Item name is not unique");
throw new ArgumentException("Работа с таким названием уже есть");
}
//Цена больше 0?
if (model.Price <= 0)
{
_logger.LogWarning("Work Price is <= 0");
throw new ArgumentException("Цена должна быть больше 0");
}
_logger.LogInformation("Item. Id: {Id}", model.Id);
}
}
}