using System.Threading; using System.Threading.Tasks; using AutopilotMonitor.Functions.Services.Activation; using AutopilotMonitor.Functions.Services.Queueing; using AutopilotMonitor.Shared; using Azure.Storage.Queues.Models; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Logging; namespace AutopilotMonitor.Functions.Functions.Queue { /// /// Host-managed consumer of the tenant-auto-approve queue (lease, retry ladder and /// poison move owned by the Functions host — see ). /// The producer's ~1-minute visibility delay still applies; every decision lives in /// . /// public sealed class TenantAutoApproveQueueFunction { private readonly TenantAutoApproveHandler _handler; private readonly ILogger _logger; public TenantAutoApproveQueueFunction( TenantAutoApproveHandler handler, ILogger logger) { _handler = handler; _logger = logger; } [Function("TenantAutoApproveQueue")] public Task Run( [QueueTrigger(Constants.QueueNames.TenantAutoApprove, Connection = Constants.QueueNames.TriggerConnection)] QueueMessage message, CancellationToken cancellationToken) { if (!QueueEnvelopeReader.TryRead( message, _logger, out var envelope, validate: e => !string.IsNullOrWhiteSpace(e.TenantId))) return Task.CompletedTask; return _handler.HandleAsync(envelope, cancellationToken); } } }