using Azure.Data.Tables; using Microsoft.Extensions.Options; using Tango.Portal.Chat.Web.Models; namespace Tango.Portal.Chat.Web.Services { public sealed class AlertsQueryService { private readonly TableClient _tableClient; public AlertsQueryService(IOptions options) { var tableServiceClient = new TableServiceClient(options.Value.ConnectionString); _tableClient = tableServiceClient.GetTableClient("AlertsQueries"); } public async Task EnsureTableExistsAsync(CancellationToken cancellationToken = default) { await _tableClient.CreateIfNotExistsAsync(cancellationToken); } public async Task> GetEnabledQueriesAsync(CancellationToken cancellationToken = default) { var queries = new List(); var now = DateTime.UtcNow; await foreach (var entity in _tableClient.QueryAsync( filter: $"PartitionKey eq 'Queries' and Enable eq true and ExecutesOn le datetime'{now:yyyy-MM-ddTHH:mm:ss.fffZ}'", cancellationToken: cancellationToken)) { queries.Add(entity); } return queries; } public async Task UpdateExecutionTimeAsync(AlertsQuery query, CancellationToken cancellationToken = default) { query.ExecutesOn = DateTime.UtcNow.AddMinutes(query.IntervalMinutes); await _tableClient.UpdateEntityAsync(query, query.ETag, cancellationToken: cancellationToken); } } }