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 blankStorageContract, ILogger logger) : IBlankBusinessLogicContract { 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() { _logger.LogInformation("GetAllBlanks"); return _blankStorageContract.GetList() ?? throw new NullListException(); } public BlankDataModel GetBlankByData(string data) { _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); } } }