using Core.DTO; using LiMan.APi.Data; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using NLog; using System.Collections.Generic; using System.Threading.Tasks; namespace LiMan.APi.Controllers { [Route("api/apptask")] [ApiController] public class AppTaskController : ControllerBase { #region Public Constructors /// /// Init generico /// /// public AppTaskController(ApiDataService DataService) { dataService = DataService; Log.Info("Avviata classe TaskController"); } #endregion Public Constructors #if false [HttpGet] public ActionResult Get([FromHeader] string codOne = "pippo", [FromQuery] bool showAll = false) { string answ = $"CodOne: {codOne} | showAll: {showAll}"; return answ; } [HttpGet("alt-get")] public async Task GetAlt([FromHeader] string codOne = "pippo", [FromQuery] bool showAll = false) { await Task.Delay(1); string answ = $"CodOne: {codOne} | showAll: {showAll}"; return answ; } #endif #region Public Methods /// /// Elimina tutte le registrazioni req/run/done x device /// /// dev richiedente /// Obj AuthDataDTO con chiavi (master o app) [HttpDelete("cleanup/{dev}")] public async Task> TaskClearAll(string dev, [FromBody] TaskResultDTO CurrRequest) { Dictionary result = new Dictionary(); // verifica validità richiesta... if (CurrRequest.IsValid) { // FixMe ToDo !!! effettuare verifica valori chiavi/imp/device... // elimina tutte le richieste x la macchina... var rawData = dataService.TaskListReset(CurrRequest.CodImp); if (rawData != null) { result = rawData; } // salva in redis e toglie dai task da eseguire la richiesta relativa... // registro infine chiamata await dataService.recordCall(dev, CurrRequest.CodImp, $"POST:api/apptask/clear/ | {CurrRequest.MastKey} | {CurrRequest.CodImp}"); } return result; } /// /// Richiede elenco di task da eseguire x il dev richiedente /// /// dev richiedente /// Cod Auth applicativo /// CodImp del dev [HttpGet("pend/{dev}")] public async Task> TaskGetPending(string dev, [FromHeader] string AppKey, [FromHeader] string CodImp) //public async Task>> TaskGetPending(string dev, [FromHeader] string AppKey, [FromHeader] string CodImp) { Dictionary result = new Dictionary(); // verifica validità richiesta... if (!string.IsNullOrEmpty(AppKey) && !string.IsNullOrEmpty(CodImp)) { // FixMe ToDo !!! effettuare verifica valori chiavi/imp/device... // recupero da REDIS le richieste pending x la macchina... result = dataService.TaskListGet(CodImp); // registro infine chiamata await dataService.recordCall(dev, CodImp, $"POST:api/apptask/pending/ | {dev} | {CodImp} | {AppKey}"); } return result; } /// /// Registra risultato esecuzione task richiesti al device /// /// dev richiedente /// Obj AuthDataDTO con chiavi (master o app) [HttpPost("done/{dev}")] public async Task TaskSetDone(string dev, [FromBody] TaskResultDTO CurrRequest) { string result = "NA"; // verifica validità richiesta... if (CurrRequest.IsValid) { // FixMe ToDo !!! effettuare verifica valori chiavi/imp/device... // recupero da REDIS le richieste pending x la macchina... int numDone = dataService.TaskSetDone(CurrRequest.CodImp, CurrRequest.DataPayload); result = $"saved {numDone}/{CurrRequest.DataPayload.Count}"; // salva in redis e toglie dai task da eseguire la richiesta relativa... // registro infine chiamata await dataService.recordCall(CurrRequest.CodImp, CurrRequest.CodImp, $"POST:api/apptask/done/ | {CurrRequest.MastKey} | {CurrRequest.CodImp}"); } return result; } /// /// Registra in esecuzione itask richiesti al device /// /// dev richiedente /// Obj AuthDataDTO con chiavi (master o app) [HttpPost("running/{dev}")] public async Task TaskSetRunning(string dev, [FromBody] TaskResultDTO CurrRequest) { string result = "NA"; // verifica validità richiesta... if (CurrRequest.IsValid) { // FixMe ToDo !!! effettuare verifica valori chiavi/imp/device... // recupero da REDIS le richieste pending x la macchina... int numDone = dataService.TaskSetRunning(CurrRequest.CodImp, CurrRequest.DataPayload); result = $"saved {numDone}/{CurrRequest.DataPayload.Count}"; // salva in redis e toglie dai task da eseguire la richiesta relativa... // registro infine chiamata await dataService.recordCall(dev, CurrRequest.CodImp, $"POST:api/apptask/running/ | {CurrRequest.MastKey} | {CurrRequest.CodImp}"); } return result; } #endregion Public Methods #region Protected Properties /// /// Dataservice x accesso DB /// protected ApiDataService dataService { get; set; } = null!; #endregion Protected Properties #region Private Fields /// /// Classe per logging /// private static Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields } }