//using FrameworkDAL.DTO.SchedulerTaskGenerator; //using GB5Shared.DTO.Framework.Login; //using Microsoft.EntityFrameworkCore; //using Microsoft.Extensions.Configuration; //using Microsoft.Extensions.Logging; //using System; //using System.Collections.Generic; //using System.Linq; //using System.Threading.Tasks; //namespace FrameworkDAL.CustomCode.SchedulerTaskGenerator //{ // public interface ISchedulerTaskGeneratorDAL // { // Task> GenerateTasksAsync(LoginDTO login); // Task> GetActiveSchedulerTasksAsync(LoginDTO login); // } // public sealed class SchedulerTaskGeneratorDAL : ISchedulerTaskGeneratorDAL // { // private const string DEFAULT_CRON = "*/5 * * * * *"; // private readonly ILogger _logger; // private readonly string _server; // private readonly string _user; // private readonly string _password; // public SchedulerTaskGeneratorDAL( // IConfiguration config, // ILogger logger) // { // _logger = logger ?? throw new ArgumentNullException(nameof(logger)); // _server = config["SchedulerRun:Server"] // ?? throw new ArgumentNullException("SchedulerRun:Server"); // _user = config["SchedulerRun:UserName"] // ?? throw new ArgumentNullException("SchedulerRun:UserName"); // _password = config["SchedulerRun:Password"] // ?? throw new ArgumentNullException("SchedulerRun:Password"); // } // private Gb4DbContext CreateDb(LoginDTO login) // { // if (login == null) // throw new ArgumentNullException(nameof(login)); // if (string.IsNullOrWhiteSpace(login.DatabaseName)) // throw new ArgumentException("DatabaseName is required"); // var connString = // $"Data Source={_server};" + // $"Initial Catalog={login.DatabaseName};" + // $"User Id={_user};" + // $"Password={_password};" + // $"TrustServerCertificate=True;" + // $"Pooling=True;" + // $"Encrypt=False;" + // $"Connection Timeout=120;"; // return new Gb4DbContext( // new DbContextOptionsBuilder() // .UseSqlServer(connString) // .UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking) // .Options // ); // } // /// // /// Quartz → Ready Queue // /// Returns ONE record per Job (Actions loaded later) // /// // public async Task> GenerateTasksAsync(LoginDTO login) // { // using var db = CreateDb(login); // var query = // from jd in db.JobDefinitions // join sc in db.SchedulerConfigs // on jd.SchedulerId equals sc.SchedulerId // where jd.Status == 1 // && sc.Status == 1 // select new SchedulerTaskDTO // { // JobId = jd.JobId, // maps correctly from JobDefineDTO // JobName = jd.JobName ?? string.Empty, // SchedulerId = sc.SchedulerId, // WebServiceId = jd.WebServiceId, // CriteriaConfigId = jd.CriteriaConfigId, // LastRunOn = jd.LastRunTime ?? DateTime.MinValue, // ensure non-null // CronExpression = string.IsNullOrWhiteSpace(sc.CronExpression) // ? DEFAULT_CRON // : sc.CronExpression, // SchedulerName = sc.SchedulerName ?? string.Empty, // TenantId = jd.TenantId, // Status = jd.Status, // // Retry defaults // RetryCount = 0, // MaxRetry = 3, // RetryDelaySeconds = 60, // // Actions populated later // Actions = new List() // }; // var result = await query // .OrderBy(x => x.LastRunOn) // .ToListAsync(); // _logger.LogInformation( // "SchedulerTaskGeneratorDAL loaded {Count} scheduler jobs from DB [{Db}]", // result.Count, // login.DatabaseName); // return result; // } // public async Task> GetActiveSchedulerTasksAsync(LoginDTO login) // { // return await GenerateTasksAsync(login); // } // } //}