104 lines
4.0 KiB
C#
104 lines
4.0 KiB
C#
using Microsoft.Extensions.Localization;
|
|
using Microsoft.Extensions.Logging;
|
|
using SmallSoftwareContracts.BusinessLogicsContracts;
|
|
using SmallSoftwareContracts.DataModels;
|
|
using SmallSoftwareContracts.Enums;
|
|
using SmallSoftwareContracts.Exceptions;
|
|
using SmallSoftwareContracts.Extensions;
|
|
using SmallSoftwareContracts.Resources;
|
|
using SmallSoftwareContracts.StoragesContracts;
|
|
using System.Text.Json;
|
|
|
|
namespace SmallSoftwareBusinessLogic.Implementations;
|
|
|
|
internal class SoftwareBusinessLogicContract(ISoftwareStorageContract
|
|
softwareStorageContract, IStringLocalizer<Messages> localizer, ILogger logger) : ISoftwareBusinessLogicContract
|
|
{
|
|
private readonly ILogger _logger = logger;
|
|
private readonly ISoftwareStorageContract _softwareStorageContract =
|
|
softwareStorageContract;
|
|
private readonly IStringLocalizer<Messages> _localizer = localizer;
|
|
public List<SoftwareDataModel> GetAllSoftwares(bool onlyActive)
|
|
{
|
|
_logger.LogInformation("GetAllSoftwares params: {onlyActive}", onlyActive);
|
|
return _softwareStorageContract.GetList(onlyActive) ?? throw new
|
|
NullListException();
|
|
}
|
|
public List<SoftwareDataModel> GetAllSoftwaresByManufacturer(string
|
|
manufacturerId, bool onlyActive = true)
|
|
{
|
|
if (manufacturerId.IsEmpty())
|
|
{
|
|
throw new ArgumentNullException(nameof(manufacturerId));
|
|
}
|
|
if (!manufacturerId.IsGuid())
|
|
{
|
|
throw new ValidationException(string.Format(localizer["ValidationExceptionMessageNotAId"], "ManufacturerId"));
|
|
}
|
|
_logger.LogInformation("GetAllSoftwares params: {manufacturerId}, { onlyActive} ", manufacturerId, onlyActive);
|
|
return _softwareStorageContract.GetList(onlyActive, manufacturerId) ??
|
|
throw new NullListException();
|
|
}
|
|
public List<SoftwareHistoryDataModel> GetSoftwareHistoryBySoftware(string softwareId)
|
|
{
|
|
_logger.LogInformation("GetSoftwareHistoryBySoftware for {softwareId}", softwareId);
|
|
if (softwareId.IsEmpty())
|
|
{
|
|
throw new ArgumentNullException(nameof(softwareId));
|
|
}
|
|
if (!softwareId.IsGuid())
|
|
{
|
|
throw new ValidationException(string.Format(localizer["ValidationExceptionMessageNotAId"], "SoftwareId"));
|
|
}
|
|
return _softwareStorageContract.GetHistoryBySoftwareId(softwareId) ??
|
|
throw new NullListException();
|
|
|
|
}
|
|
public SoftwareDataModel GetSoftwareByData(string data)
|
|
{
|
|
_logger.LogInformation("Get element by data: {data}", data);
|
|
if (data.IsEmpty())
|
|
{
|
|
throw new ArgumentNullException(nameof(data));
|
|
}
|
|
if (data.IsGuid())
|
|
{
|
|
return _softwareStorageContract.GetElementById(data) ?? throw
|
|
new ElementNotFoundException(data, _localizer);
|
|
}
|
|
return _softwareStorageContract.GetElementByName(data) ?? throw new
|
|
ElementNotFoundException(data, _localizer);
|
|
}
|
|
public void InsertSoftware(SoftwareDataModel softwareDataModel)
|
|
{
|
|
_logger.LogInformation("New data: {json}",
|
|
JsonSerializer.Serialize(softwareDataModel));
|
|
ArgumentNullException.ThrowIfNull(softwareDataModel);
|
|
softwareDataModel.Validate(_localizer);
|
|
_softwareStorageContract.AddElement(softwareDataModel);
|
|
}
|
|
public void UpdateSoftware(SoftwareDataModel softwareDataModel)
|
|
{
|
|
_logger.LogInformation("Update data: {json}",
|
|
JsonSerializer.Serialize(softwareDataModel));
|
|
ArgumentNullException.ThrowIfNull(softwareDataModel);
|
|
softwareDataModel.Validate(_localizer);
|
|
_softwareStorageContract.UpdElement(softwareDataModel);
|
|
|
|
}
|
|
public void DeleteSoftware(string id)
|
|
{
|
|
_logger.LogInformation("Delete by id: {id}", id);
|
|
if (id.IsEmpty())
|
|
{
|
|
throw new ArgumentNullException(nameof(id));
|
|
}
|
|
if (!id.IsGuid())
|
|
{
|
|
throw new ValidationException(string.Format(localizer["ValidationExceptionMessageNotAId"], "Id"));
|
|
}
|
|
_softwareStorageContract.DelElement(id);
|
|
}
|
|
}
|
|
|