using System.Text.Json; using BankContracts.BusinessLogicContracts; using BankContracts.DataModels; using BankContracts.Exceptions; using BankContracts.Extensions; using BankContracts.StorageContracts; using Microsoft.Extensions.Logging; namespace BankBusinessLogic.Implementations; /// /// реализация бизнес логики для сроков /// /// контракт сроков /// логгер internal class PeriodBusinessLogicContract( IPeriodStorageContract periodStorageContract, ILogger logger ) : IPeriodBusinessLogicContract { private readonly IPeriodStorageContract _periodStorageContract = periodStorageContract; private readonly ILogger _logger = logger; public List GetAllPeriods() { _logger.LogInformation("get all periods"); return _periodStorageContract.GetList(); } public List GetAllPeriodsByStartTime(DateTime fromDate) { if (fromDate.IsDateNotOlder(DateTime.UtcNow)) { throw new IncorrectDatesException(fromDate, DateTime.UtcNow); } return _periodStorageContract.GetList(startDate: fromDate).OrderBy(x => x.StartTime).ToList() ?? throw new NullListException(nameof(PeriodDataModel)); } public List GetAllPeriodsByEndTime(DateTime toDate) { return _periodStorageContract.GetList(endDate: toDate).OrderBy(x => x.EndTime).ToList() ?? throw new NullListException(nameof(PeriodDataModel)); } public List GetAllPeriodsByStorekeeper(string storekeeperId) { _logger.LogInformation("GetAllPeriodsByStorekeeper params: {storekeeperId}", storekeeperId); if (storekeeperId.IsEmpty()) { throw new ArgumentNullException(nameof(storekeeperId)); } if (!storekeeperId.IsGuid()) { throw new ValidationException( "The value in the field storekeeperId is not a unique identifier." ); } return _periodStorageContract.GetList(storekeeperId: storekeeperId) ?? throw new NullListException($"{storekeeperId}"); } public PeriodDataModel GetPeriodByData(string data) { _logger.LogInformation($"GetPeriodByData by data: {data}"); if (data.IsEmpty()) { throw new ArgumentNullException(nameof(data)); } if (data.IsGuid()) { return _periodStorageContract.GetElementById(data) ?? throw new ElementNotFoundException($"element not found: {data}"); } throw new ElementNotFoundException($"element not found: {data}"); } public void InsertPeriod(PeriodDataModel periodataModel) { _logger.LogInformation("Insert period: {period}", JsonSerializer.Serialize(periodataModel)); ArgumentNullException.ThrowIfNull(periodataModel); periodataModel.Validate(); _periodStorageContract.AddElement(periodataModel); } public void UpdatePeriod(PeriodDataModel periodataModel) { _logger.LogInformation("Update period: {period}", JsonSerializer.Serialize(periodataModel)); ArgumentNullException.ThrowIfNull(periodataModel); periodataModel.Validate(); _periodStorageContract.UpdElement(periodataModel); } }