Реализация BusinessLogic.

This commit is contained in:
Programmist73 2023-04-12 16:52:32 +04:00
parent 3b2c3613cc
commit 26e96f3294
9 changed files with 766 additions and 8 deletions

View File

@ -0,0 +1,149 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TransportCompanyContracts.BindingModels;
using TransportCompanyContracts.BusinessLogicsContracts;
using TransportCompanyContracts.SearchModels;
using TransportCompanyContracts.StoragesContracts;
using TransportCompanyContracts.ViewModels;
namespace TransportCompanyBusinessLogic.BusinessLogic
{
public class CargoLogic : ICargoLogic
{
private readonly ILogger _logger;
private readonly ICargoStorage _cargoStorage;
//конструктор
public CargoLogic(ILogger<CargoLogic> logger, ICargoStorage cargoStorage)
{
_logger = logger;
_cargoStorage = cargoStorage;
}
public List<CargoViewModel>? ReadList(CargoSearchModel? model)
{
_logger.LogInformation("ReadList. TypeCargo:{TypeCargo}. Id:{Id}", model?.TypeCargo, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _cargoStorage.GetFullList() : _cargoStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public CargoViewModel? ReadElement(CargoSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. TypeCargo:{TypeCargo}. Id:{Id}", model.TypeCargo, model.Id);
var element = _cargoStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", model.Id);
return element;
}
public bool Create(CargoBindingModel model)
{
CheckModel(model);
if (_cargoStorage.Insert(model) == null)
{
_logger.LogWarning("Create operation failed");
return false;
}
return true;
}
public bool Update(CargoBindingModel model)
{
CheckModel(model);
if (_cargoStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(CargoBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_cargoStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(CargoBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на наличие названия типа груза
if (string.IsNullOrEmpty(model.TypeCargo))
{
throw new ArgumentNullException("названия типа груза", nameof(model.TypeCargo));
}
_logger.LogInformation("Cargo. TypeCargo:{TypeCargo}. Id:{Id}",
model.TypeCargo, model.Id);
//проверка на наличие такого же типа груза в списке
var element = _cargoStorage.GetElement(new CargoSearchModel
{
TypeCargo = model.TypeCargo,
});
//если элемент найден и его Id не совпадает с Id объекта, переданного на вход
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Такой тип груза уже есть");
}
}
}
}

View File

@ -1,4 +1,5 @@
using System; using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -6,6 +7,7 @@ using System.Threading.Tasks;
using TransportCompanyContracts.BindingModels; using TransportCompanyContracts.BindingModels;
using TransportCompanyContracts.BusinessLogicsContracts; using TransportCompanyContracts.BusinessLogicsContracts;
using TransportCompanyContracts.SearchModels; using TransportCompanyContracts.SearchModels;
using TransportCompanyContracts.StoragesContracts;
using TransportCompanyContracts.ViewModels; using TransportCompanyContracts.ViewModels;
namespace TransportCompanyBusinessLogic.BusinessLogic namespace TransportCompanyBusinessLogic.BusinessLogic
@ -14,29 +16,158 @@ namespace TransportCompanyBusinessLogic.BusinessLogic
{ {
private readonly ILogger _logger; private readonly ILogger _logger;
public ClientViewModel? ReadElement(ClientSearchModel model) private readonly IClientStorage _clientStorage;
public ClientLogic(ILogger<ClientLogic> logger, IClientStorage clientStorage)
{ {
throw new NotImplementedException(); _logger = logger;
_clientStorage = clientStorage;
} }
public List<ClientViewModel>? ReadList(ClientSearchModel? model) public List<ClientViewModel>? ReadList(ClientSearchModel? model)
{ {
throw new NotImplementedException(); _logger.LogInformation("ReadList. Surname:{Surname}. Id:{Id}", model?.Surname, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _clientStorage.GetFullList() : _clientStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public ClientViewModel? ReadElement(ClientSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. Surname:{Surname}. Id:{Id}", model.Surname, model.Id);
var element = _clientStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", model.Id);
return element;
} }
public bool Create(ClientBindingModel model) public bool Create(ClientBindingModel model)
{ {
throw new NotImplementedException(); CheckModel(model);
if (_clientStorage.Insert(model) == null)
{
_logger.LogWarning("Create operation failed");
return false;
}
return true;
} }
public bool Update(ClientBindingModel model) public bool Update(ClientBindingModel model)
{ {
throw new NotImplementedException(); CheckModel(model);
if (_clientStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
} }
public bool Delete(ClientBindingModel model) public bool Delete(ClientBindingModel model)
{ {
throw new NotImplementedException(); CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_clientStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(ClientBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на наличие имени
if (string.IsNullOrEmpty(model.Name))
{
throw new ArgumentNullException("Нет имени клиента", nameof(model.Name));
}
//проверка на наличие фамилии
if (string.IsNullOrEmpty(model.Surname))
{
throw new ArgumentNullException("Нет фамилии клиента", nameof(model.Surname));
}
//проверка на наличие отчества
if (string.IsNullOrEmpty(model.Patronymic))
{
throw new ArgumentNullException("Нет отчества клиента", nameof(model.Patronymic));
}
//проверка на наличие телефонного номера
if (string.IsNullOrEmpty(model.TelephoneNumber))
{
throw new ArgumentNullException("Нет телефонного номера клиента", nameof(model.TelephoneNumber));
}
//проверка на наличие почты
if (string.IsNullOrEmpty(model.Email))
{
throw new ArgumentNullException("Нет электронной почты клиента", nameof(model.Email));
}
_logger.LogInformation("Client. Name:{Name}. Surname:{Surname}. Patronymic:{Patronymic}. " +
"TelephoneNumber:{TelephoneNumber}. Email:{Email}. Id:{Id}",
model.Name, model.Surname, model.Patronymic, model.TelephoneNumber, model.Email, model.Id);
//проверка на наличие такой же почты в списке
var element = _clientStorage.GetElement(new ClientSearchModel
{
Email = model.Email,
});
//если почта найдена и его Id не совпадает с Id объекта, переданного на вход
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Клиент с такой почтой уже есть");
}
} }
} }
} }

View File

@ -0,0 +1,148 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TransportCompanyContracts.BindingModels;
using TransportCompanyContracts.BusinessLogicsContracts;
using TransportCompanyContracts.SearchModels;
using TransportCompanyContracts.StoragesContracts;
using TransportCompanyContracts.ViewModels;
namespace TransportCompanyBusinessLogic.BusinessLogic
{
public class TransportLogic : ITransportLogic
{
private readonly ILogger _logger;
private readonly ITransportStorage _transportStorage;
//конструктор
public TransportLogic(ILogger<TransportLogic> logger, ITransportStorage transportStorage)
{
_logger = logger;
_transportStorage = transportStorage;
}
public List<TransportViewModel>? ReadList(TransportSearchModel? model)
{
_logger.LogInformation("ReadList. Tranport:{Tranport}. Id:{Id}", model?.Tranport, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _transportStorage.GetFullList() : _transportStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public TransportViewModel? ReadElement(TransportSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. Tranport:{Tranport}. Id:{Id}", model.Tranport, model.Id);
var element = _transportStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", model.Id);
return element;
}
public bool Create(TransportBindingModel model)
{
CheckModel(model);
if (_transportStorage.Insert(model) == null)
{
_logger.LogWarning("Create operation failed");
return false;
}
return true;
}
public bool Update(TransportBindingModel model)
{
CheckModel(model);
if (_transportStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(TransportBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_transportStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(TransportBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на наличие названия транспортного средства
if (string.IsNullOrEmpty(model.Tranport))
{
throw new ArgumentNullException("Нет названия транспортного средства", nameof(model.Tranport));
}
_logger.LogInformation("Tranport. Tranport:{Tranport}. Id:{Id}", model.Tranport, model.Id);
//проверка на наличие такого же транспортного средства в списке
var element = _transportStorage.GetElement(new TransportSearchModel
{
Tranport = model.Tranport,
});
//если элемент найден и его Id не совпадает с Id объекта, переданного на вход
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Такое транспортное средство уже есть");
}
}
}
}

View File

@ -0,0 +1,150 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TransportCompanyContracts.BindingModels;
using TransportCompanyContracts.BusinessLogicsContracts;
using TransportCompanyContracts.SearchModels;
using TransportCompanyContracts.StoragesContracts;
using TransportCompanyContracts.ViewModels;
namespace TransportCompanyBusinessLogic.BusinessLogic
{
public class TransportationLogic : ITransportationLogic
{
private readonly ILogger _logger;
private readonly ITransportationStorage _transportationStorage;
//конструктор
public TransportationLogic(ILogger<TransportationLogic> logger, ITransportationStorage transportationStorage)
{
_logger = logger;
_transportationStorage = transportationStorage;
}
public List<TransportationViewModel>? ReadList(TransportationSearchModel? model)
{
_logger.LogInformation("ReadList. TransportationType:{TransportationType}. Id:{Id}", model?.TransportationType, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _transportationStorage.GetFullList() : _transportationStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public TransportationViewModel? ReadElement(TransportationSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. TransportationType:{TransportationType}. Id:{Id}", model.TransportationType, model.Id);
var element = _transportationStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", model.Id);
return element;
}
public bool Create(TransportationBindingModel model)
{
CheckModel(model);
if (_transportationStorage.Insert(model) == null)
{
_logger.LogWarning("Create operation failed");
return false;
}
return true;
}
public bool Update(TransportationBindingModel model)
{
CheckModel(model);
if (_transportationStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(TransportationBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_transportationStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(TransportationBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на наличие типа перевозки
if (string.IsNullOrEmpty(model.TransportationType))
{
throw new ArgumentNullException("Нет названия изделия", nameof(model.TransportationType));
}
_logger.LogInformation("Transportation. TransportationType:{TransportationType}. Id:{Id}",
model.TransportationType, model.Id);
//проверка на наличие такого же типа перевозки в списке
var element = _transportationStorage.GetElement(new TransportationSearchModel
{
TransportationType = model.TransportationType,
});
//если элемент найден и его Id не совпадает с Id объекта, переданного на вход
if (element != null && element.Id != model.Id)
{
throw new InvalidOperationException("Такой тип перевозки уже есть");
}
}
}
}

View File

@ -0,0 +1,162 @@
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TransportCompanyContracts.BindingModels;
using TransportCompanyContracts.BusinessLogicsContracts;
using TransportCompanyContracts.SearchModels;
using TransportCompanyContracts.StoragesContracts;
using TransportCompanyContracts.ViewModels;
namespace TransportCompanyBusinessLogic.BusinessLogic
{
public class TruckingLogic : ITruckingLogic
{
private readonly ILogger _logger;
private readonly ITruckingStorage _truckingStorage;
//конструктор
public TruckingLogic(ILogger<TruckingLogic> logger, ITruckingStorage truckingStorage)
{
_logger = logger;
_truckingStorage = truckingStorage;
}
public List<TruckingViewModel>? ReadList(TruckingSearchModel? model)
{
_logger.LogInformation("ReadList. ClientId:{ClientId}. DateStart:{DateStart} Id:{Id}", model?.ClientId, model?.DateStart, model?.Id);
//list хранит весь список в случае, если model пришло со значением null на вход метода
var list = model == null ? _truckingStorage.GetFullList() : _truckingStorage.GetFilteredList(model);
if (list == null)
{
_logger.LogWarning("ReadList return null list");
return null;
}
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
public TruckingViewModel? ReadElement(TruckingSearchModel model)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
_logger.LogInformation("ReadElement. ClientId:{ClientId}. DateStart:{DateStart} Id:{Id}", model?.ClientId, model?.DateStart, model?.Id);
var element = _truckingStorage.GetElement(model);
if (element == null)
{
_logger.LogWarning("ReadElement element not found");
return null;
}
_logger.LogInformation("ReadElement find. Id:{Id}", model.Id);
return element;
}
public bool Create(TruckingBindingModel model)
{
CheckModel(model);
if (_truckingStorage.Insert(model) == null)
{
_logger.LogWarning("Create operation failed");
return false;
}
return true;
}
public bool Update(TruckingBindingModel model)
{
CheckModel(model);
if (_truckingStorage.Update(model) == null)
{
_logger.LogWarning("Update operation failed");
return false;
}
return true;
}
public bool Delete(TruckingBindingModel model)
{
CheckModel(model, false);
_logger.LogInformation("Delete. Id:{Id}", model.Id);
if (_truckingStorage.Delete(model) == null)
{
_logger.LogWarning("Delete operation failed");
return false;
}
return true;
}
//проверка входного аргумента для методов Insert, Update и Delete
private void CheckModel(TruckingBindingModel model, bool withParams = true)
{
if (model == null)
{
throw new ArgumentNullException(nameof(model));
}
//так как при удалении параметром withParams передаём false
if (!withParams)
{
return;
}
//проверка на корректный id заказчика
if (model.ClientId <= 0)
{
throw new ArgumentNullException("Некорректный id заказчика", nameof(model.ClientId));
}
//проверка на корректный id груза
if (model.CargoId <= 0)
{
throw new ArgumentNullException("Некорректный id груза", nameof(model.CargoId));
}
//проверка на корректный id транспорта
if (model.TransportId <= 0)
{
throw new ArgumentNullException("Некорректный id транспорта", nameof(model.TransportId));
}
//проверка на корректный id типа транспортировки
if (model.TransportationId <= 0)
{
throw new ArgumentNullException("Некорректный id типа транспортировки", nameof(model.TransportationId));
}
//проверка на корректную дату начала транспортировки
if (model.DateStart > model.DateEnd)
{
throw new ArgumentNullException("Дата начала транспортировки должна быть раньше даты окончания перевозки", nameof(model.DateStart));
}
_logger.LogInformation("Trucking. ClientId:{ClientId}. CargoId:{CargoId}. TransportId:{TransportId}." +
"TransportationId:{TransportationId}. DateStart:{DateStart}. DateEnd:{DateEnd}. Id:{Id}",
model.ClientId, model.CargoId, model.TransportId, model.TransportationId, model.DateStart, model.DateEnd, model.Id);
}
}
}

View File

@ -6,4 +6,14 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
<PackageReference Include="Serilog" Version="2.12.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\TransportCompanyContracts\TransportCompanyContracts.csproj" />
<ProjectReference Include="..\TransportCompanyDataModels\TransportCompanyDataModels.csproj" />
</ItemGroup>
</Project> </Project>

View File

@ -18,6 +18,6 @@ namespace TransportCompanyContracts.SearchModels
public string? TelephoneNumber { get; set; } public string? TelephoneNumber { get; set; }
public string? Email { get;} public string? Email { get; set; }
} }
} }

View File

@ -6,4 +6,8 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\TransportCompanyDataModels\TransportCompanyDataModels.csproj" />
</ItemGroup>
</Project> </Project>

View File

@ -6,4 +6,8 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.3" />
</ItemGroup>
</Project> </Project>