using Expedience.Api.Encryption; using Expedience.Models; using MassTransit; using Microsoft.AspNetCore.Mvc; using System.Text.Json; namespace Expedience.Api.Controllers { [Route("api/[controller]")] [ApiController] public class ExpedienceController : ControllerBase { private readonly ILogger _logger; private readonly IPublishEndpoint _publisher; private readonly IDecryptor _decrypytor; public ExpedienceController(ILogger logger, IPublishEndpoint publisher, IDecryptor decrypytor) { _logger = logger; _publisher = publisher; _decrypytor = decrypytor; } [HttpPost("DutyCompletion")] public async Task PostDutyCompletionResult(List encryptedPayloads) { var utcNow = DateTime.UtcNow; try { foreach (var payload in encryptedPayloads) { var decryptedData = _decrypytor.Decrypt(payload); var completionResult = JsonSerializer.Deserialize(decryptedData)!; completionResult.UploadDateUtc = utcNow; await _publisher.Publish(completionResult); } } catch (Exception ex) { _logger.LogError(ex, "Error publishing completion result: {errorMessage}", ex.Message); } return Ok(); } } }