diff --git a/CarCenter/CarCenterBusinessLogic/BusinessLogics/BundlingLogic.cs b/CarCenter/CarCenterBusinessLogic/BusinessLogics/BundlingLogic.cs new file mode 100644 index 0000000..02ec3d1 --- /dev/null +++ b/CarCenter/CarCenterBusinessLogic/BusinessLogics/BundlingLogic.cs @@ -0,0 +1,107 @@ +using CarCenterContracts.BindingModels; +using CarCenterContracts.BusinessLogicsContracts; +using CarCenterContracts.SearchModels; +using CarCenterContracts.StoragesContracts; +using CarCenterContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterBusinessLogic.BusinessLogics +{ + public class BundlingLogic : IBundlingLogic + { + private readonly ILogger _logger; + private readonly IBundlingStorage _bundlingStorage; + public BundlingLogic(ILogger logger, IBundlingStorage bundlingStorage) + { + _logger = logger; + _bundlingStorage = bundlingStorage; + } + + public List? ReadList(BundlingSearchModel? model) + { + _logger.LogInformation("ReadList. BundlingId:Id:{ Id}", model?.Id); + var list = model == null ? _bundlingStorage.GetFullList() : _bundlingStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public BundlingViewModel? ReadElement(BundlingSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. ComponentId:Id:{ Id}", model.Id); + var element = _bundlingStorage.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(BundlingBindingModel model) + { + CheckModel(model); + if (_bundlingStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(BundlingBindingModel model) + { + CheckModel(model); + if (_bundlingStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(BundlingBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_bundlingStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(BundlingBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.Price <= 0) + { + throw new ArgumentNullException("Цена должна быть больше 0", nameof(model.Price)); + } + _logger.LogInformation("Bundling. Bundling:Id:{ Id}.Price:{ Price}", model.Id, model.Price); + } + + } +} diff --git a/CarCenter/CarCenterBusinessLogic/BusinessLogics/CarLogic.cs b/CarCenter/CarCenterBusinessLogic/BusinessLogics/CarLogic.cs new file mode 100644 index 0000000..62ebf09 --- /dev/null +++ b/CarCenter/CarCenterBusinessLogic/BusinessLogics/CarLogic.cs @@ -0,0 +1,114 @@ +using CarCenterContracts.BindingModels; +using CarCenterContracts.BusinessLogicsContracts; +using CarCenterContracts.SearchModels; +using CarCenterContracts.StoragesContracts; +using CarCenterContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterBusinessLogic.BusinessLogics +{ + public class CarLogic : ICarLogic + { + private readonly ILogger _logger; + private readonly ICarStorage _carStorage; + public CarLogic(ILogger logger, ICarStorage carStorage) + { + _logger = logger; + _carStorage = carStorage; + } + + public List? ReadList(CarSearchModel? model) + { + _logger.LogInformation("ReadList. VINnumber:{VINnumber}.Id:{ Id}", model?.VINnumber, model?.Id); + var list = model == null ? _carStorage.GetFullList() : _carStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public CarViewModel? ReadElement(CarSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. VINnumber:{VINnumber}.Id:{ Id}", model?.VINnumber, model?.Id); + var element = _carStorage.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(CarBindingModel model) + { + CheckModel(model); + if (_carStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(CarBindingModel model) + { + CheckModel(model); + if (_carStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(CarBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_carStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(CarBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.VINnumber <= 0) + { + throw new ArgumentNullException("Нет VIN-номера", nameof(model.VINnumber)); + } + _logger.LogInformation("Car. VINnumber:{VINnumber}. Id: { Id}", model.VINnumber, model.Id); + var element = _carStorage.GetElement(new CarSearchModel + { + VINnumber = model.VINnumber, + }); + if (element != null && element.Id != model.Id) + { + throw new InvalidOperationException("Компонент с таким VIN-номером уже есть"); + } + } + } +} diff --git a/CarCenter/CarCenterBusinessLogic/BusinessLogics/FeatureLogic.cs b/CarCenter/CarCenterBusinessLogic/BusinessLogics/FeatureLogic.cs new file mode 100644 index 0000000..245313c --- /dev/null +++ b/CarCenter/CarCenterBusinessLogic/BusinessLogics/FeatureLogic.cs @@ -0,0 +1,106 @@ +using CarCenterContracts.BindingModels; +using CarCenterContracts.BusinessLogicsContracts; +using CarCenterContracts.SearchModels; +using CarCenterContracts.StoragesContracts; +using CarCenterContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterBusinessLogic.BusinessLogics +{ + public class FeatureLogic : IFeatureLogic + { + private readonly ILogger _logger; + private readonly IFeatureStorage _fatureStorage; + public FeatureLogic(ILogger logger, IFeatureStorage fatureStorage) + { + _logger = logger; + _fatureStorage = fatureStorage; + } + + public List? ReadList(FeatureSearchModel? model) + { + _logger.LogInformation("ReadList. FeatureId:Id:{ Id}", model?.Id); + var list = model == null ? _fatureStorage.GetFullList() : _fatureStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public FeatureViewModel? ReadElement(FeatureSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. ComponentId:Id:{ Id}", model.Id); + var element = _fatureStorage.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(FeatureBindingModel model) + { + CheckModel(model); + if (_fatureStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(FeatureBindingModel model) + { + CheckModel(model); + if (_fatureStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(FeatureBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_fatureStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(FeatureBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.Price <= 0) + { + throw new ArgumentNullException("Цена должна быть больше 0", nameof(model.Price)); + } + _logger.LogInformation("Feature. Feature:Id:{ Id}.Price:{ Price}", model.Id, model.Price); + } + } +} diff --git a/CarCenter/CarCenterBusinessLogic/BusinessLogics/StorekeeperLogic.cs b/CarCenter/CarCenterBusinessLogic/BusinessLogics/StorekeeperLogic.cs new file mode 100644 index 0000000..a23e0e1 --- /dev/null +++ b/CarCenter/CarCenterBusinessLogic/BusinessLogics/StorekeeperLogic.cs @@ -0,0 +1,106 @@ +using CarCenterContracts.BindingModels; +using CarCenterContracts.BusinessLogicsContracts; +using CarCenterContracts.SearchModels; +using CarCenterContracts.StoragesContracts; +using CarCenterContracts.ViewModels; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CarCenterBusinessLogic.BusinessLogics +{ + public class StorekeeperLogic : IStorekeeperLogic + { + private readonly ILogger _logger; + private readonly IStorekeeperStorage _storekeeperStorage; + public StorekeeperLogic(ILogger logger, IStorekeeperStorage storekeeperStorage) + { + _logger = logger; + _storekeeperStorage = storekeeperStorage; + } + + public List? ReadList(StorekeeperSearchModel? model) + { + _logger.LogInformation("ReadList. StorekeeperId:Id:{ Id}", model?.Id); + var list = model == null ? _storekeeperStorage.GetFullList() : _storekeeperStorage.GetFilteredList(model); + if (list == null) + { + _logger.LogWarning("ReadList return null list"); + return null; + } + _logger.LogInformation("ReadList. Count:{Count}", list.Count); + return list; + } + + public StorekeeperViewModel? ReadElement(StorekeeperSearchModel model) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + _logger.LogInformation("ReadElement. ComponentId:Id:{ Id}", model.Id); + var element = _storekeeperStorage.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(StorekeeperBindingModel model) + { + CheckModel(model); + if (_storekeeperStorage.Insert(model) == null) + { + _logger.LogWarning("Insert operation failed"); + return false; + } + return true; + } + + public bool Update(StorekeeperBindingModel model) + { + CheckModel(model); + if (_storekeeperStorage.Update(model) == null) + { + _logger.LogWarning("Update operation failed"); + return false; + } + return true; + } + + public bool Delete(StorekeeperBindingModel model) + { + CheckModel(model, false); + _logger.LogInformation("Delete. Id:{Id}", model.Id); + if (_storekeeperStorage.Delete(model) == null) + { + _logger.LogWarning("Delete operation failed"); + return false; + } + return true; + } + + private void CheckModel(StorekeeperBindingModel model, bool withParams = true) + { + if (model == null) + { + throw new ArgumentNullException(nameof(model)); + } + if (!withParams) + { + return; + } + if (model.PhoneNumber <= 0) + { + throw new ArgumentNullException("Нет телефона", nameof(model.PhoneNumber)); + } + _logger.LogInformation("Storekeeper. Storekeeper:Id:{ Id}.Price:{ Price}", model.Id, model.PhoneNumber); + } + } +} diff --git a/CarCenter/CarCenterBusinessLogic/CarCenterBusinessLogic.csproj b/CarCenter/CarCenterBusinessLogic/CarCenterBusinessLogic.csproj index 3daf2c3..2f2461b 100644 --- a/CarCenter/CarCenterBusinessLogic/CarCenterBusinessLogic.csproj +++ b/CarCenter/CarCenterBusinessLogic/CarCenterBusinessLogic.csproj @@ -7,7 +7,7 @@ - +