From a147d23353eebf69b07c9b0aa9c25b51fd482209 Mon Sep 17 00:00:00 2001 From: ChaZIR Date: Tue, 30 Apr 2024 14:41:37 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=BA=D0=B8=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=BA=D0=B8=20=D0=B8=D0=BB=D0=B8=20=D0=BD=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B0=D0=BB=D0=B4=D0=B0=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contractor/ContractorLogic.cs | 127 +++++++++++++++++- .../Contractor/ExcursionGroupLogic.cs | 124 +++++++++++++++++ .../Contractor/ExcursionLogic.cs | 124 +++++++++++++++++ .../BusinessLogic/Contractor/TourLogic.cs | 124 +++++++++++++++++ .../Contractor/IContractorLogic.cs | 2 +- .../Contractor/IContractorStorage.cs | 8 +- 6 files changed, 503 insertions(+), 6 deletions(-) create mode 100644 TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionGroupLogic.cs create mode 100644 TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionLogic.cs create mode 100644 TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/TourLogic.cs diff --git a/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ContractorLogic.cs b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ContractorLogic.cs index 1e99bbf..eab9053 100644 --- a/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ContractorLogic.cs +++ b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ContractorLogic.cs @@ -3,10 +3,135 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using TravelCompanyContracts.BusinessLogicsContracts.Contractor; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; namespace TravelCompanyBusinessLogic.BusinessLogic.Contractor { - internal class ContractorLogic + public class ContractorLogic : IContractorLogic { + private readonly ILogger _logger; + + private readonly IContractorStorage _contractorStorage; + + public ContractorLogic(ILogger logger, IContractorStorage contractorStorage) + { + _logger = logger; + _contractorStorage = contractorStorage; + } + + public List? ReadList(ContractorSearchModel? model) + { + _logger.LogInformation("ReadList. Surname: {Surname}. Name: {Name}. Patronymic: {Patronymic}. Id: {Id} ", model?.Surname, model?.Name, model?.Patronymic, model?.Id); + var list = (model == null) ? _contractorStorage.GetFullList() : _contractorStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count: {Count}", list.Count); + return list; + } + + public ContractorViewModel? ReadElement(ContractorSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. User id: {Id}, User email: {Email}, User mobile phone: {MobilePhone}, User password: {Password}", model?.Id, model?.Email, model?.MobilePhone, model?.Password); + var element = _contractorStorage.GetElement(model!); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id: {Id}", element.Id); + return element; + } + + public bool Create(ContractorBindingModel model) + { + CheckModel(model); + if (_contractorStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(ContractorBindingModel model) + { + CheckModel(model); + if (_contractorStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(ContractorBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id: {Id}", model.Id); + if (_contractorStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(ContractorBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.Surname)) + { + throw new ArgumentNullException("Нет фамилии пользователя", nameof(model.Surname)); + } + if (string.IsNullOrEmpty(model.Name)) + { + throw new ArgumentNullException("Нет имени пользователя", nameof(model.Name)); + } + if (string.IsNullOrEmpty(model.Patronymic)) + { + throw new ArgumentNullException("Нет отчества пользователя", nameof(model.Patronymic)); + } + if (string.IsNullOrEmpty(model.Email)) + { + throw new ArgumentNullException("Нет почты пользователя", nameof(model.Email)); + } + if (string.IsNullOrEmpty(model.MobilePhone)) + { + throw new ArgumentNullException("Нет номера телефона пользователя", nameof(model.MobilePhone)); + } + if (string.IsNullOrEmpty(model.Password)) + { + throw new ArgumentNullException("Нет пароля пользователя", nameof(model.Password)); + } + _logger.LogInformation("User. Id: {id}, Surname: {Surname}, Name: {Name}, Patronymic: {Patronymic} Email: {Email}, Mobile Phone: {MobilePhone}, Password: {Password}", model.Id, model.Surname, model.Name, model.Patronymic, model.Email, model.MobilePhone, model.Password); + var element = _contractorStorage.GetElement(new ContractorSearchModel + { + Email = model.Email, + MobilePhone = model.MobilePhone, + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Пользователь с такими почтой или номером телефона уже есть"); + } + } } } diff --git a/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionGroupLogic.cs b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionGroupLogic.cs new file mode 100644 index 0000000..6b3a6c9 --- /dev/null +++ b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionGroupLogic.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using TravelCompanyContracts.BusinessLogicsContracts.Contractor; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyBusinessLogic.BusinessLogic.Contractor +{ + public class ExcursionGroupLogic : IExcursionGroupLogic + { + private readonly ILogger _logger; + + private readonly IExcursionGroupStorage _excursionGroupStorage; + + public ExcursionGroupLogic(ILogger logger, IExcursionGroupStorage excursionGroupStorage) + { + _logger = logger; + _excursionGroupStorage = excursionGroupStorage; + } + + public List? ReadList(ExcursionGroupSearchModel? model) + { + _logger.LogInformation("ReadList. Id: {Id}, ExcursionGroupName: {ExcursionGroupName}, ContractorID: {ContractorID}.", model?.Id, model?.ExcursionGroupName, model?.ContractorID); + var list = (model == null) ? _excursionGroupStorage.GetFullList() : _excursionGroupStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count: {Count}", list.Count); + return list; + } + + public ExcursionGroupViewModel? ReadElement(ExcursionGroupSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id: {Id}, ExcursionGroup name: {ExcursionGroupName}", model?.Id, model?.ExcursionGroupName); + var element = _excursionGroupStorage.GetElement(model!); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id: {Id}", element.Id); + return element; + } + + public bool Create(ExcursionGroupBindingModel model) + { + CheckModel(model); + if (_excursionGroupStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(ExcursionGroupBindingModel model) + { + CheckModel(model); + if (_excursionGroupStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(ExcursionGroupBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id: {Id}", model.Id); + if (_excursionGroupStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(ExcursionGroupBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ExcursionGroupName)) + { + throw new ArgumentNullException("Нет названия группы", nameof(model.ExcursionGroupName)); + } + if (model.PeopleAmount <= 0) + { + throw new ArgumentNullException("Количество участников быть больше 0", nameof(model.PeopleAmount)); + } + if (model.ContractorID <= 0) + { + throw new ArgumentNullException("Некорректный идентификатор исполнителя", nameof(model.ContractorID)); + } + _logger.LogInformation("ExcursionGroup. Id: {id}, ExcursionGroupName: {ExcursionGroupName}, PeopleAmount: {PeopleAmount}, ContractorID: {ContractorID}", model.Id, model.ExcursionGroupName, model.PeopleAmount, model.ContractorID); + var element = _excursionGroupStorage.GetElement(new ExcursionGroupSearchModel + { + ExcursionGroupName = model.ExcursionGroupName + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Группа с таким названием уже есть"); + } + } + } +} diff --git a/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionLogic.cs b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionLogic.cs new file mode 100644 index 0000000..747e645 --- /dev/null +++ b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/ExcursionLogic.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using TravelCompanyContracts.BusinessLogicsContracts.Contractor; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyBusinessLogic.BusinessLogic.Contractor +{ + public class ExcursionLogic : IExcursionLogic + { + private readonly ILogger _logger; + + private readonly IExcursionStorage _excursionStorage; + + public ExcursionLogic(ILogger logger, IExcursionStorage excursionStorage) + { + _logger = logger; + _excursionStorage = excursionStorage; + } + + public List? ReadList(ExcursionSearchModel? model) + { + _logger.LogInformation("ReadList. Id: {Id}, ExcursionName: {ExcursionName}, ContractorID: {ContractorID}.", model?.Id, model?.ExcursionName, model?.ContractorID); + var list = (model == null) ? _excursionStorage.GetFullList() : _excursionStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count: {Count}", list.Count); + return list; + } + + public ExcursionViewModel? ReadElement(ExcursionSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Excursion id: {Id}, Excursion name: {ExcursionName}", model?.Id, model?.ExcursionName); + var element = _excursionStorage.GetElement(model!); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id: {Id}", element.Id); + return element; + } + + public bool Create(ExcursionBindingModel model) + { + CheckModel(model); + if (_excursionStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(ExcursionBindingModel model) + { + CheckModel(model); + if (_excursionStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(ExcursionBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id: {Id}", model.Id); + if (_excursionStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(ExcursionBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.ExcursionName)) + { + throw new ArgumentNullException("Нет названия экскурсии", nameof(model.ExcursionName)); + } + if (model.ExcursionPrice <= 0) + { + throw new ArgumentNullException("Цена экскурсии должна быть больше 0", nameof(model.ExcursionPrice)); + } + if (model.ContractorID <= 0) + { + throw new ArgumentNullException("Некорректный идентификатор исполнителя", nameof(model.ContractorID)); + } + _logger.LogInformation("Excursion. Id: {id}, ExcursionName: {ExcursionName}, ExcursionPrice: {ExcursionPrice}, ContractorID: {ContractorID}", model.Id, model.ExcursionName, model.ExcursionPrice, model.ContractorID); + var element = _excursionStorage.GetElement(new ExcursionSearchModel + { + ExcursionName = model.ExcursionName + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Экскурсия с таким названием уже есть"); + } + } + } +} diff --git a/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/TourLogic.cs b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/TourLogic.cs new file mode 100644 index 0000000..c4b0e85 --- /dev/null +++ b/TravelCompany/TravelCompanyBusinessLogic/BusinessLogic/Contractor/TourLogic.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using TravelCompanyContracts.BusinessLogicsContracts.Contractor; +using TravelCompanyContracts.BindingModels.Contractor; +using TravelCompanyContracts.SearchModels.Contractor; +using TravelCompanyContracts.StoragesModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; + +namespace TravelCompanyBusinessLogic.BusinessLogic.Contractor +{ + public class TourLogic : ITourLogic + { + private readonly ILogger _logger; + + private readonly ITourStorage _tourStorage; + + public TourLogic(ILogger logger, ITourStorage tourStorage) + { + _logger = logger; + _tourStorage = tourStorage; + } + + public List? ReadList(TourSearchModel? model) + { + _logger.LogInformation("ReadList. Id: {Id}, TourName: {TourName}, ContractorID: {ContractorID}.", model?.Id, model?.TourName, model?.ContractorID); + var list = (model == null) ? _tourStorage.GetFullList() : _tourStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count: {Count}", list.Count); + return list; + } + + public TourViewModel? ReadElement(TourSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. Id: {Id}, Tour name: {TourName}", model?.Id, model?.TourName); + var element = _tourStorage.GetElement(model!); + if (element == null) + { + _logger.LogWarning("ReadElement element not found"); + return null; + } + _logger.LogInformation("ReadElement find. Id: {Id}", element.Id); + return element; + } + + public bool Create(TourBindingModel model) + { + CheckModel(model); + if (_tourStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(TourBindingModel model) + { + CheckModel(model); + if (_tourStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(TourBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id: {Id}", model.Id); + if (_tourStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(TourBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (string.IsNullOrEmpty(model.TourName)) + { + throw new ArgumentNullException("Нет названия тура", nameof(model.TourName)); + } + if (model.TourDate == DateTime.MinValue) + { + throw new ArgumentNullException("Нет даты тура", nameof(model.TourDate)); + } + if (model.ContractorID <= 0) + { + throw new ArgumentNullException("Некорректный идентификатор исполнителя", nameof(model.ContractorID)); + } + _logger.LogInformation("Tour. Id: {id}, TourName: {TourName}, ContractorID: {ContractorID}", model.Id, model.TourName, model.ContractorID); + var element = _tourStorage.GetElement(new TourSearchModel + { + TourName = model.TourName + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Тур с таким названием уже есть"); + } + } + } +} diff --git a/TravelCompany/TravelCompanyContracts/BusinessLogicsContracts/Contractor/IContractorLogic.cs b/TravelCompany/TravelCompanyContracts/BusinessLogicsContracts/Contractor/IContractorLogic.cs index d4d869a..f1fa498 100644 --- a/TravelCompany/TravelCompanyContracts/BusinessLogicsContracts/Contractor/IContractorLogic.cs +++ b/TravelCompany/TravelCompanyContracts/BusinessLogicsContracts/Contractor/IContractorLogic.cs @@ -5,7 +5,7 @@ using System.Text; using System.Threading.Tasks; using TravelCompanyContracts.BindingModels.Contractor; using TravelCompanyContracts.SearchModels.Contractor; -using TravelCompanyContracts.ViewModels.Contractor; +using TravelCompanyContracts.ViewModels.Contractor.ViewModels; namespace TravelCompanyContracts.BusinessLogicsContracts.Contractor { diff --git a/TravelCompany/TravelCompanyContracts/StoragesModels/Contractor/IContractorStorage.cs b/TravelCompany/TravelCompanyContracts/StoragesModels/Contractor/IContractorStorage.cs index 80149db..766a8f2 100644 --- a/TravelCompany/TravelCompanyContracts/StoragesModels/Contractor/IContractorStorage.cs +++ b/TravelCompany/TravelCompanyContracts/StoragesModels/Contractor/IContractorStorage.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using TravelCompanyContracts.BindingModels; +using TravelCompanyContracts.BindingModels.Contractor; using TravelCompanyContracts.SearchModels.Contractor; using TravelCompanyContracts.ViewModels.Contractor.ViewModels; @@ -14,8 +14,8 @@ namespace TravelCompanyContracts.StoragesModels.Contractor List GetFullList(); List GetFilteredList(ContractorSearchModel model); ContractorViewModel? GetElement(ContractorSearchModel model); - ContractorViewModel? Insert(ContractorSearchModel model); - ContractorViewModel? Update(ContractorSearchModel model); - ContractorViewModel? Delete(ContractorSearchModel model); + ContractorViewModel? Insert(ContractorBindingModel model); + ContractorViewModel? Update(ContractorBindingModel model); + ContractorViewModel? Delete(ContractorBindingModel model); } }