using System; using Serilog; using MassTransit; using TimeZoneConverter; using LCU.Library.Internal.ArchiverApiModel.Models; using LCU.Api.Internal.ArchiverApi.Configuration; using LCU.Library.Internal.LcuMassTransitModels; using LCU.Library.Internal.Exceptions; namespace LCU.Api.Internal.ArchiverApi.Services; public class QueueArchiverService : IQueueArchiverService { private readonly ISendEndpoint _sendEndpoint; private readonly ReceiveEndpointConfiguration _receiveEndpointsConfiguration; private readonly ArchiverApiConfig _archiverApiConfig; public QueueArchiverService(IBusControl busControl, ReceiveEndpointConfigurations receiveEndpointsConfiguration, ArchiverApiConfig archiverApiConfig) { _receiveEndpointsConfiguration = receiveEndpointsConfiguration.ArchiverReceiveEndpoint; _archiverApiConfig = archiverApiConfig; _sendEndpoint = busControl.GetSendEndpoint(_receiveEndpointsConfiguration.ReceiveEndpointUri).Result; } public void QueueArchiver(ArchiveRequest archiveRequest) { try { var dateToConvert = archiveRequest.EffectiveDate == null ? DateTime.Now.AddDays(archiveRequest.DaysFromDate) : Convert.ToDateTime(archiveRequest.EffectiveDate).AddDays(archiveRequest.DaysFromDate); var assumedTimezone = TZConvert.GetTimeZoneInfo(_archiverApiConfig.TimeZone); archiveRequest.EffectiveDate = TimeZoneInfo.ConvertTime(dateToConvert, assumedTimezone).Date; _sendEndpoint.Send(archiveRequest); } catch (Exception ex) { Log.Error(ex, $"Failed to queue archive request with effective date. Effective Date: {archiveRequest.EffectiveDate}"); throw new ServiceException($"Failed to queue archive request with effective date. Effective Date: {archiveRequest.EffectiveDate}"); } } }