using MagicCarpetContracts.BusinessLogicContracts; using MagicCarpetContracts.DataModels; using MagicCarpetContracts.Enums; using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Extensions; using MagicCarpetContracts.StoragesContracts; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace MagicCarpetBusinessLogic.Implementations; public class AgencyBusinessLogicContract(IAgencyStorageContract agencyStorageContract, ILogger logger) : IAgencyBusinessLogicContract { private readonly IAgencyStorageContract _agencyStorageContract = agencyStorageContract; private readonly ILogger _logger = logger; public List GetAllComponents() { _logger.LogInformation("GetAllComponents"); return _agencyStorageContract.GetList() ?? throw new NullListException(); return []; } public AgencyDataModel GetComponentByData(string data) { _logger.LogInformation("Get element by data: {data}", data); if (data.IsEmpty()) { throw new ArgumentNullException(nameof(data)); } if (!data.IsGuid()) { throw new ElementNotFoundException(data); } return _agencyStorageContract.GetElementById(data) ?? throw new ElementNotFoundException(data); return new("", TourType.None, 0, []); } public void InsertComponent(AgencyDataModel agencyDataModel) { _logger.LogInformation("New data: {json}", JsonSerializer.Serialize(agencyDataModel)); ArgumentNullException.ThrowIfNull(agencyDataModel); agencyDataModel.Validate(); _agencyStorageContract.AddElement(agencyDataModel); } public void UpdateComponent(AgencyDataModel agencyDataModel) { _logger.LogInformation("Update data: {json}", JsonSerializer.Serialize(agencyDataModel)); ArgumentNullException.ThrowIfNull(agencyDataModel); agencyDataModel.Validate(); _agencyStorageContract.UpdElement(agencyDataModel); } public void DeleteComponent(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"); } _agencyStorageContract.DelElement(id); } }