или нормалдаки??? XD
This commit is contained in:
parent
c649d4db51
commit
d7670e91fe
131
CarCenterBusinessLogics/BusinessLogics/CarLogic.cs
Normal file
131
CarCenterBusinessLogics/BusinessLogics/CarLogic.cs
Normal file
@ -0,0 +1,131 @@
|
||||
using CarCenterContracts.BindingModels;
|
||||
using CarCenterContracts.BusinessLogicContracts;
|
||||
using CarCenterContracts.SearchModels;
|
||||
using CarCenterContracts.StoragesContracts;
|
||||
using CarCenterContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace CarCenterBusinessLogics.BusinessLogics
|
||||
{
|
||||
public class CarLogic : ICarLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly ICarStorage _CarStorage;
|
||||
|
||||
public CarLogic(ILogger<CarLogic> logger, ICarStorage CarStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_CarStorage = CarStorage;
|
||||
}
|
||||
|
||||
public void CheckModel(CarBindingModel model, bool checkParams = true)
|
||||
{
|
||||
const string txt = "Произошла ошибка на уровне проверки CarBindingModel.";
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model), txt);
|
||||
}
|
||||
if (checkParams is false)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public List<CarViewModel> ReadList(CarSearchModel? model)
|
||||
{
|
||||
try
|
||||
{
|
||||
var results = model != null ? _CarStorage.GetFilteredList(model) : _CarStorage.GetFullList();
|
||||
_logger.LogDebug("Список полученных автомобилей: {@CarsVisit}", results);
|
||||
_logger.LogInformation("Извлечение списка в количестве {Count} c автомобилей по модели: {@CarSearchModel}", results.Count, model);
|
||||
return results;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки получить список по модели: {@CarSearchModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public CarViewModel ReadElement(CarSearchModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = _CarStorage.GetElement(model);
|
||||
if (result == null)
|
||||
{
|
||||
throw new ArgumentNullException($"Результат получения элемента с айди {model.Id} оказался нулевым");
|
||||
}
|
||||
_logger.LogInformation("Извлечение элемента {@CarViewModel} c автомобилей по модели: {@CarSearchModel}", result, model);
|
||||
return result;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки получить элемент по модели: {@CarSearchModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Create(CarBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
CheckModel(model);
|
||||
var result = _CarStorage.Insert(model);
|
||||
if (result == null)
|
||||
{
|
||||
throw new ArgumentNullException($"Результат создания автомобиля оказался нулевым");
|
||||
}
|
||||
_logger.LogInformation("Была создана сущность: {@CarViewModel}", result);
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки создать элемент по модели: {@CarBindingModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Update(CarBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
CheckModel(model);
|
||||
var result = _CarStorage.Update(model);
|
||||
if (result == null)
|
||||
{
|
||||
throw new ArgumentNullException($"Результат обновления автомобиля оказался нулевым");
|
||||
}
|
||||
_logger.LogInformation("Была обновлена сущность на: {@CarViewModel}", result);
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки обновить элемент по модели: {@CarBindingModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Delete(CarBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
CheckModel(model, false);
|
||||
var result = _CarStorage.Delete(model);
|
||||
if (result == null)
|
||||
{
|
||||
throw new ArgumentNullException($"Результат удаления автомобилей оказался нулевым");
|
||||
}
|
||||
_logger.LogInformation("Была удалена сущность: {@CarViewModel}", result);
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки удалить элемент по модели: {@CarBindingModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
106
CarCenterBusinessLogics/BusinessLogics/ImplementerLogic.cs
Normal file
106
CarCenterBusinessLogics/BusinessLogics/ImplementerLogic.cs
Normal file
@ -0,0 +1,106 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using CarCenterContracts.BusinessLogicContracts;
|
||||
using CarCenterContracts.BindingModels;
|
||||
using CarCenterContracts.SearchModels;
|
||||
using CarCenterContracts.ViewModels;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using CarCenterContracts.StoragesContracts;
|
||||
|
||||
namespace CarCenterBusinessLogics.BusinessLogics
|
||||
{
|
||||
public class ImplementerLogic : IImplementerLogic
|
||||
{
|
||||
private readonly ILogger _logger;
|
||||
private readonly IImplementerStorage _storage;
|
||||
public ImplementerLogic(ILogger<ImplementerLogic> logger, IImplementerStorage implementerStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_storage = implementerStorage;
|
||||
}
|
||||
|
||||
public bool Create(ImplementerBindingModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
CheckModel(model);
|
||||
var result = _storage.Insert(model);
|
||||
if (result == null)
|
||||
{
|
||||
throw new ArgumentNullException($"Результат создания клиента оказался нулевым");
|
||||
}
|
||||
_logger.LogInformation("Была создана сущность: {@ClientViewModel}", result);
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки создать элемент по модели: {@ClientBindingModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public ImplementerViewModel ReadElement(ImplementerSearchModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
var result = _storage.GetElement(model);
|
||||
if (result == null)
|
||||
{
|
||||
throw new ArgumentNullException($"Результат получения элемента с айди {model.Id} оказался нулевым");
|
||||
}
|
||||
_logger.LogInformation("Извлечение элемента {@ClientViewModel} c клиента по модели: {@ClientSearchModel}", result, model);
|
||||
return result;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_logger.LogError(e, "Произошла ошибка при попытки получить элемент по модели: {@ClientSearchModel}", model);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
private void CheckModel(ImplementerBindingModel model, bool withParams = true)
|
||||
{
|
||||
const string txt = "Произошла ошибка на уровне проверки ClientBindingModel.";
|
||||
if (model == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model), txt);
|
||||
}
|
||||
if (!withParams)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Login))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model.Login), txt + "Нет логина клиента");
|
||||
}
|
||||
if (string.IsNullOrEmpty(model.Password))
|
||||
{
|
||||
throw new ArgumentNullException(nameof(model.Password), txt + "Нет пароля клиента");
|
||||
}
|
||||
if (model.Login.Length is < 5 or > 20)
|
||||
{
|
||||
throw new ArgumentException(nameof(model.Login), "Логин пользователя должен быть от 5 до 20 символом");
|
||||
}
|
||||
|
||||
if (model.Password.Length < 5)
|
||||
{
|
||||
throw new ArgumentException(nameof(model.Password),
|
||||
"Пароль пользователя должен быть не менее 5 символов");
|
||||
}
|
||||
if (!Regex.IsMatch(model.Password, "[0-9]+"))
|
||||
{
|
||||
throw new ArgumentException(nameof(model.Password),
|
||||
"Пароль пользователя должен содержать хотя бы одну цифру");
|
||||
}
|
||||
_logger.LogDebug("{level} Проверка логина пользователя на уникальность {@Client}", txt, model);
|
||||
var element = _storage.GetElement(new ImplementerSearchModel
|
||||
{
|
||||
Login = model.Login,
|
||||
});
|
||||
if (element != null && element.Id != model.Id)
|
||||
{
|
||||
_logger.LogWarning("С логином: {login}, уже есть пользователь: {@ExistClient}", model.Login, element);
|
||||
throw new InvalidOperationException($"Клиент с таким логином \"{model.Login}\" уже есть");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
@ -6,4 +6,16 @@
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.2" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||
<PackageReference Include="PDFsharp-MigraDoc-GDI" Version="1.50.5147" />
|
||||
<PackageReference Include="System.Drawing.Common" Version="8.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\CarCenterContracts\CarCenterContracts.csproj" />
|
||||
<ProjectReference Include="..\CarCenterDataModels\CarCenterDataModels.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
Loading…
Reference in New Issue
Block a user