73 lines
2.5 KiB
C#

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<BlankDataModel> 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);
}
}
}