PIbd-21_Bakalskaya_E.D._Sus.../SushiBarBusinessLogic/ImplementerLogic.cs

124 lines
4.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 Microsoft.Extensions.Logging;
using SushiBarContracts.BindingModel;
using SushiBarContracts.BusinessLogicsContracts;
using SushiBarContracts.SearchModel;
using SushiBarContracts.StoragesContracts;
using SushiBarContracts.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SushiBarBusinessLogic
{
public class ImplementerLogic : IImplementerLogic
{
private readonly ILogger _logger;
private readonly IImplementerStorage _implementerStorage;
public ImplementerLogic(ILogger<ImplementerLogic> logger, IImplementerStorage implementerStorage)
{
_logger = logger;
_implementerStorage = implementerStorage;
}
public bool Create(ImplementerBindingModel model)
{
CheckImplementer(model);
if (_implementerStorage.Insert(model) == null)
{
_logger.LogWarning("Не получилось создать исполнителя");
return false;
}
return true;
}
public bool Update(ImplementerBindingModel model)
{
CheckImplementer(model);
if (_implementerStorage.Update(model) == null)
{
_logger.LogWarning("Исправить исполнителя не получилось - люди не меняются");
return false;
}
return true;
}
public bool Delete(ImplementerBindingModel model)
{
CheckImplementer(model, false);
_logger.LogInformation("Удаление. Id:{Id}", model.Id);
if (_implementerStorage.Delete(model) == null)
{
_logger.LogWarning("Не получилось удалить исполнителя...");
return false;
}
return true;
}
public ImplementerViewModel? ReadElement(ImplementerSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("Прочитали исполнителя: Id:{Id}.ImplementerFIO:{ImplementerFIO}", model.Id, model.ImplementerFIO);
var element = _implementerStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("не найден такой исполнитель");
return null;
}
return element;
}
public List<ImplementerViewModel>? ReadList(ImplementerSearchModel? model)
{
var list = (model == null) ? _implementerStorage.GetFullList() : _implementerStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("нет исполнителей вообще-то");
return null;
}
_logger.LogInformation("Прочитан список исполнителей. Количество:{Count}", list.Count);
return list;
}
public void CheckImplementer(ImplementerBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
if (!withParams)
{
return;
}
if (string.IsNullOrEmpty(model.ImplementerFIO))
{
throw new ArgumentNullException("Имя исполнителя не может быть пустым!", nameof(model.ImplementerFIO));
}
if(model.WorkExperience <= 0)
{
throw new ArgumentNullException("Опыт работы не может быть меньше или равен 0 лет...");
}
if(model.Qualification <= 0)
{
throw new ArgumentNullException("Квалификация не может быть меньше или равен 0 лет...");
}
if (string.IsNullOrEmpty(model.Password))
{
throw new ArgumentNullException("Пароль исполнителя не может быть пустым!", nameof(model.Password));
}
_logger.LogInformation("Исполнитель. ImplementerFIO:{ImplementerFIO}. Password:{Password}. WorkExperience:{WorkExperience}. Id:{Id} ", model.ImplementerFIO, model.Password, model.WorkExperience, model.Id);
var element = _implementerStorage.GetElement(new ImplementerSearchModel
{
ImplementerFIO = model.ImplementerFIO
});
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Исполнитель с такими ФИО уже есть.");
}
}
}
}