Files
limanapp/LiMan.Api/Controllers/AppTaskController.cs
T
2025-01-17 18:01:54 +01:00

172 lines
6.5 KiB
C#

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
/// <summary>
/// Init generico
/// </summary>
/// <param name="DataService"></param>
public AppTaskController(ApiDataService DataService)
{
dataService = DataService;
Log.Info("Avviata classe TaskController");
}
#endregion Public Constructors
#if false
[HttpGet]
public ActionResult<string> Get([FromHeader] string codOne = "pippo", [FromQuery] bool showAll = false)
{
string answ = $"CodOne: {codOne} | showAll: {showAll}";
return answ;
}
[HttpGet("alt-get")]
public async Task<string> 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
/// <summary>
/// Elimina tutte le registrazioni req/run/done x device
/// </summary>
/// <param name="dev">dev richiedente</param>
/// <param name="CurrRequest">Obj AuthDataDTO con chiavi (master o app)</param>
[HttpDelete("cleanup/{dev}")]
public async Task<Dictionary<string, string>> TaskClearAll(string dev, [FromBody] TaskResultDTO CurrRequest)
{
Dictionary<string, string> result = new Dictionary<string, string>();
// 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;
}
/// <summary>
/// Richiede elenco di task da eseguire x il dev richiedente
/// </summary>
/// <param name="dev">dev richiedente</param>
/// <param name="AppKey">Cod Auth applicativo</param>
/// <param name="CodImp">CodImp del dev</param>
[HttpGet("pend/{dev}")]
public async Task<Dictionary<string, string>> TaskGetPending(string dev, [FromHeader] string AppKey, [FromHeader] string CodImp)
//public async Task<ActionResult<Dictionary<string, string>>> TaskGetPending(string dev, [FromHeader] string AppKey, [FromHeader] string CodImp)
{
Dictionary<string, string> result = new Dictionary<string, string>();
// 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;
}
/// <summary>
/// Registra risultato esecuzione task richiesti al device
/// </summary>
/// <param name="dev">dev richiedente</param>
/// <param name="CurrRequest">Obj AuthDataDTO con chiavi (master o app)</param>
[HttpPost("done/{dev}")]
public async Task<string> 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;
}
/// <summary>
/// Registra in esecuzione itask richiesti al device
/// </summary>
/// <param name="dev">dev richiedente</param>
/// <param name="CurrRequest">Obj AuthDataDTO con chiavi (master o app)</param>
[HttpPost("running/{dev}")]
public async Task<string> 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
/// <summary>
/// Dataservice x accesso DB
/// </summary>
protected ApiDataService dataService { get; set; } = null!;
#endregion Protected Properties
#region Private Fields
/// <summary>
/// Classe per logging
/// </summary>
private static Logger Log = LogManager.GetCurrentClassLogger();
#endregion Private Fields
}
}