using EgwCoreLib.Lux.Core.RestPayload; using EgwCoreLib.Lux.Data; using EgwCoreLib.Lux.Data.DbModel.Config; using EgwCoreLib.Lux.Data.Services; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using NLog; using System.Diagnostics; namespace Lux.API.Controllers { [Route("api/[controller]")] [ApiController] public class ProdController : ControllerBase { #region Public Constructors public ProdController(IConfiguration config, IRedisService redisService, ImageCacheService imgServ) { _config = config; _redisService = redisService; chPub = _config.GetValue("ServerConf:ChannelPub") ?? ""; } #endregion Public Constructors #region Public Methods /// /// Chiamata GET: test status alive /// GET: api/Prod/alive /// /// id oggetto /// [HttpGet("alive")] public async Task Alive() { Stopwatch sw = new Stopwatch(); sw.Start(); await Task.Delay(1); sw.Stop(); Log.Info($"Alive | {sw.Elapsed.TotalMilliseconds:N3} ms"); return Ok("OK"); } /// /// Chiamata GET: /// - elenco delle richieste di stima da eseguire /// - vengono registrate come "passate" al calcolo alla data-ora della richiesta /// GET: api/Prod/estimation /// /// [HttpGet("estimation")] public async Task>> EstimationRequestQueue() { Stopwatch sw = new Stopwatch(); sw.Start(); var listReq = new List(); // vado a recuperare da REDIS elenco degli ordini NON ancora associati ad 1/+ prod // opzione 1: restituisco TUTTI ordini NON ancora eseguiti // opzione 2: restituisco dall'inizio solo max(n) non ancora eseguiti? (es primi 5 ordini) // genero elenco degli ordini e per ogni ordine aggiungo il Dict await Task.Delay(100); // opzione 1: per tutti gli ordini ritornato registro data-ora invio e tolgo dalla coda... // opzione 2: aspetto conferma dal sistema che li ha presi in carico e registro data-ora... sw.Stop(); Log.Info($"EstimationRequestQueue | {sw.Elapsed.TotalMilliseconds:N3} ms"); return Ok(listReq); } #endregion Public Methods #region Private Fields private static Logger Log = LogManager.GetCurrentClassLogger(); private readonly IRedisService _redisService; private readonly string chPub = ""; private IConfiguration _config; #endregion Private Fields } }