Files
PIBD-23_Coursach_YouAreProg…/YouAreProgrammerShop/YAPBusinessLogic/Implementations/StorekeeperBusinessLogicContract.cs

67 lines
2.7 KiB
C#

using Microsoft.Extensions.Logging;
using System.Text.Json;
using YAPContracts.BusinessLogicContracts;
using YAPContracts.DataModels.UserRoles;
using YAPContracts.Exceptions;
using YAPContracts.Extentions;
using YAPContracts.StorageContracts;
namespace YAPBusinessLogic.Implementations
{
internal class StorekeeperBusinessLogicContract(ILogger logger, IStorekeeperStorageContract storekeeperStorageContract) : IStorekeeperBusinessLogicContract
{
private readonly ILogger _logger = logger;
private readonly IStorekeeperStorageContract _storekeeperStorageContract = storekeeperStorageContract;
public List<StorekeeperDataModel> GetAllStorekeepers()
{
_logger.LogInformation("GetAllStorekeepers method called");
var storekeepers = _storekeeperStorageContract.GetList();
return storekeepers ?? throw new NullListException();
}
public StorekeeperDataModel? GetStorekeeperByData(string data)
{
_logger.LogInformation("GetStorekeeperByData method called with data: {data}", data);
if (data.IsEmpty())
{
throw new ArgumentNullException(nameof(data));
}
if (data.IsGuid())
{
return _storekeeperStorageContract.GetElementById(data) ?? throw new ElementNotFoundException(data);
}
var storekeeper = _storekeeperStorageContract.GetElementByLogin(data);
return storekeeper ?? throw new ElementNotFoundException(data);
}
public void InsertStorekeeper(StorekeeperDataModel storekeeper)
{
_logger.LogInformation("Insert data: {json}", JsonSerializer.Serialize(storekeeper));
ArgumentNullException.ThrowIfNull(storekeeper);
storekeeper.Validate();
_storekeeperStorageContract.AddElement(storekeeper);
}
public void UpdateStorekeeper(StorekeeperDataModel storekeeper)
{
_logger.LogInformation("Update data: {json}", JsonSerializer.Serialize(storekeeper));
ArgumentNullException.ThrowIfNull(storekeeper);
storekeeper.Validate();
_storekeeperStorageContract.UpdateElement(storekeeper);
}
public void DeleteStorekeeper(string id)
{
_logger.LogInformation($"Delete data by id: {id}", id);
if (id.IsEmpty())
{
throw new ArgumentNullException(nameof(id));
}
if (!id.IsGuid())
{
throw new ValidationException("Id is not a unique identifier");
}
_storekeeperStorageContract.DeleteElement(id);
}
}
}