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 { /// /// Init generico /// /// public AppTaskController(ApiDataService DataService) { dataService = DataService; Log.Info("Avviata classe TaskController"); } #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 /// /// Richiede elenco di task da eseguire x il dev richiedente /// /// dev richiedente /// Cod Auth applicativo /// CodImp del dev [HttpGet("pend/{dev}")] public async Task> Task2ExePending(string dev, [FromHeader] string AppKey, [FromHeader] string CodImp) //public async Task>> Task2ExeRequest(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 in esecuzione itask richiesti al device /// /// dev richiedente /// Obj AuthDataDTO con chiavi (master o app) [HttpPost("running/{dev}")] public async Task Task2ExeRunning(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.TaskRunning(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/running/ | {CurrRequest.MastKey} | {CurrRequest.CodImp}"); } return result; } /// /// Registra risultato esecuzione task richiesti al device /// /// dev richiedente /// Obj AuthDataDTO con chiavi (master o app) [HttpPost("done/{dev}")] public async Task Task2ExeResult(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.TaskDoneAdd(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; } /// /// Classe per logging /// private static Logger Log = LogManager.GetCurrentClassLogger(); /// /// Dataservice x accesso DB /// protected ApiDataService dataService { get; set; } = null!; } }