diff --git a/PapaCarloProject/PapaCarloBusinessLogic/Implementations/BlankBusinessLogicContract.cs b/PapaCarloProject/PapaCarloBusinessLogic/Implementations/BlankBusinessLogicContract.cs index ec3e9de..9c3bda8 100644 --- a/PapaCarloProject/PapaCarloBusinessLogic/Implementations/BlankBusinessLogicContract.cs +++ b/PapaCarloProject/PapaCarloBusinessLogic/Implementations/BlankBusinessLogicContract.cs @@ -1,37 +1,71 @@ -using PapaCarloContracts.BusinessLogicContracts; +using Microsoft.Extensions.Logging; +using PapaCarloContracts.BusinessLogicContracts; using PapaCarloContracts.DataModels; +using PapaCarloContracts.Exceptions; +using PapaCarloContracts.Extensions; using PapaCarloContracts.StoragesContracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.Json; using System.Threading.Tasks; namespace PapaCarloBusinessLogic.Implementations { - internal class BlankBusinessLogicContract(IBlankStorageContract storageContract) : IBlankBusinessLogicContract + internal class BlankBusinessLogicContract(IBlankStorageContract blankStorageContract, ILogger logger) : IBlankBusinessLogicContract { - private IBlankStorageContract _storageContract = storageContract; + private readonly ILogger _logger = logger; + private IBlankStorageContract _blankStorageContract = blankStorageContract; + public void DeleteBlank(string id) { + _logger.LogInformation("Delete by id: {id}", id); + if (id.IsEmpty()) + { + throw new ArgumentNullException(nameof(id)); + } + if (!id.IsGuid()) + { + throw new ValidationException("Id is not a unique identifier"); + } + _blankStorageContract.DelElement(id); } public List GetAllBlanks() { - return []; + _logger.LogInformation("GetAllBlanks"); + return _blankStorageContract.GetList() ?? throw new NullListException(); } public BlankDataModel GetBlankByData(string data) { - return new("", "", "", ""); + _logger.LogInformation("Get element by data {data}", data); + if (data.IsEmpty()) + { + throw new ArgumentNullException(nameof(data)); + } + if (data.IsGuid()) + { + return _blankStorageContract.GetElementById(data) ?? throw new ElementNotFoundException(data); + } + return _blankStorageContract.GetElementByName(data) ?? throw new ElementNotFoundException(data); } public void InsertBlank(BlankDataModel blankDataModel) { + _logger.LogInformation("New data:{json}", JsonSerializer.Serialize(blankDataModel)); + ArgumentNullException.ThrowIfNull(blankDataModel); + blankDataModel.Validate(); + _blankStorageContract.AddElement(blankDataModel); } public void UpdateBlank(BlankDataModel blankDataModel) { + _logger.LogInformation("Update data: {json}", JsonSerializer.Serialize(blankDataModel)); + ArgumentNullException.ThrowIfNull(blankDataModel); + blankDataModel.Validate(); + _blankStorageContract.UpdElement(blankDataModel); } } diff --git a/PapaCarloProject/PapaCarloBusinessLogic/PapaCarloBusinessLogic.csproj b/PapaCarloProject/PapaCarloBusinessLogic/PapaCarloBusinessLogic.csproj index 16e76b6..047805f 100644 --- a/PapaCarloProject/PapaCarloBusinessLogic/PapaCarloBusinessLogic.csproj +++ b/PapaCarloProject/PapaCarloBusinessLogic/PapaCarloBusinessLogic.csproj @@ -10,6 +10,10 @@ + + + + diff --git a/PapaCarloProject/PapaCarloTests/BusinessLogicsContracts/BlankBusinessLogicContractTests.cs b/PapaCarloProject/PapaCarloTests/BusinessLogicsContracts/BlankBusinessLogicContractTests.cs index 7012bab..bb37f0c 100644 --- a/PapaCarloProject/PapaCarloTests/BusinessLogicsContracts/BlankBusinessLogicContractTests.cs +++ b/PapaCarloProject/PapaCarloTests/BusinessLogicsContracts/BlankBusinessLogicContractTests.cs @@ -1,4 +1,6 @@ -using Moq; + +using Microsoft.Extensions.Logging; +using Moq; using NUnit.Framework; using PapaCarloBusinessLogic.Implementations; using PapaCarloContracts.BusinessLogicContracts; @@ -16,14 +18,15 @@ namespace PapaCarloTests.BusinessLogicsContracts; [TestFixture] internal class BlankBusinessLogicContractTests { - private IBlankBusinessLogicContract _blankBusinessLogicContract; + private BlankBusinessLogicContract _blankBusinessLogicContract; private Mock _blankStorageContract; [OneTimeSetUp] public void OneTimeSetUp() { _blankStorageContract = new Mock(); - _blankBusinessLogicContract = new BlankBusinessLogicContract(_blankStorageContract.Object); + _blankBusinessLogicContract = new BlankBusinessLogicContract(_blankStorageContract.Object, new Mock().Object); + } [SetUp] @@ -221,7 +224,7 @@ internal class BlankBusinessLogicContractTests { _blankStorageContract.Setup(x => x.UpdElement(It.IsAny())).Throws(new ElementExistsException("Data","Data")); - Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf()); + Assert.That(() => _blankBusinessLogicContract.UpdateBlank(new(Guid.NewGuid().ToString(), "Spruce", "", "")), Throws.TypeOf()); _blankStorageContract.Verify(x => x.UpdElement(It.IsAny()), Times.Once); } [Test]