Files
magman/MagMan.UI/Controllers/ResourcesController.cs
T
2024-02-29 18:54:10 +01:00

153 lines
6.3 KiB
C#

using k8s.Models;
using MagMan.Core;
using MagMan.Core.DTO;
using MagMan.Data.Admin.DbModels;
using MagMan.Data.Admin.Services;
using MagMan.Data.Tenant.DbModels;
using MagMan.Data.Tenant.Services;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using NLog;
namespace MagMan.UI.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ResourcesController : ControllerBase
{
/// <summary>
/// Classe per logging
/// </summary>
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
private MTAdminService MTAdmService { get; set; } = null!;
private static JsonSerializerSettings? JSSettings;
private TenantService TService { get; set; } = null!;
public ResourcesController(MTAdminService MTDataService, TenantService TDataService)
{
MTAdmService = MTDataService;
TService = TDataService;
// json serializer... FIX errore loop circolare https://www.ryadel.com/en/jsonserializationexception-self-referencing-loop-detected-error-fix-entity-framework-asp-net-core/
JSSettings = new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
Log.Info("Avviata classe ResourcesController");
}
/// <summary>
/// Controllo status Alive
/// GET: api/Resources/alive
/// </summary>
/// <returns></returns>
[HttpGet("alive")]
public string alive()
{
//Log.Debug("Chiamata alive");
return $"OK";
}
// GET api/Resources/5
[HttpGet]
public async Task<List<ResourceModel>> Get()
{
// se non ho chaive --> vuoto!
List<ResourceModel> ListRecords = new List<ResourceModel>();
await Task.Delay(100);
return ListRecords;
}
/// <summary>
/// Elenco Macchine dato RestToken
/// </summary>
/// <param name="id">Rest Token cliente</param>
/// <param name="projDbId">ID progetto</param>
/// <param name="isEstim">true = ultima stima attiva / false = consumi effettivi</param>
/// <returns></returns>
// GET api/Resources/2cba60c7-7be4-40b1-aa0d-52e7c71fc1a7
[HttpGet("{id}")]
public async Task<List<ResourceExpDTO>> Get(string id, int projDbId, bool isEstim)
{
List<ResourceExpDTO> ListRecords = new List<ResourceExpDTO>();
// verifico ci sia valore
if (!string.IsNullOrEmpty(id))
{
// in primis recupero codice chiave da token...
int nKey = await MTAdmService.MainKeyByToken(id);
//ListRecords = await TService.ResourcesGetByProject(nKey, projDbId, isEstim, false);
ListRecords = await TService.ResourcesExpGetByProject(nKey, projDbId, isEstim, false);
}
return ListRecords;
}
/// <summary>
/// Processa una chiamata POST per l'invio di un oggetto di TRACKING risorse progetto (RestPayload.Resources)
/// PUT: api/Resources/track/00000000-0000-0000-0000-000000000000
/// </summary>
/// <param name="id">token comunicazione</param>
/// <returns></returns>
[HttpPost("track/{id}")]
public async Task<string> track(string id, [FromBody] RestPayload.Resources projectData)
{
string answ = "ND";
bool fatto = false;
// verifico ci sia valore
if (!string.IsNullOrEmpty(id) && projectData != null)
{
// in primis recupero codice chiave da token...
int nKey = await MTAdmService.MainKeyByToken(id);
if (nKey > 0)
{
// nel projData ho le info x gestire aggiornamento PER INTERO
int ProjCloudId = projectData.ProjCloudId;
// proseguo solo se ho un Id valido
if (ProjCloudId > 0)
{
// recupero info del progetto con cui registrare le note
var projRec = await TService.ProjectGetById(nKey, ProjCloudId);
// in primis registro il record RequestPlan...
var recPlan = new RequestPlanModel()
{
DtRequest = DateTime.Now,
IsActive = true,
ReqState = projectData.ReqState,
ProjDbId = ProjCloudId
};
// registro richiesta prima dei movimenti...
int RequestPlanId = await TService.ReqPlanUpdate(nKey, recPlan);
// per ogni riga risorsa registro le info relative...
if (projectData.ResourceList != null)
{
List<ResourceModel> listRes = projectData.ResourceList.Select(x => TService.ResourceFromDto(x, RequestPlanId)).ToList();
try
{
string prDesc = $"K{nKey}";
if (projRec != null)
{
prDesc += $" | P.{ProjCloudId} | {projRec.ProjDescription} ({projRec.Machine})";
}
// rivedere SIA consumi che gestione stime...
await TService.ResourceUpdate(nKey, RequestPlanId, projectData.ResourceList, projectData.ReqState, prDesc);
fatto = true;
}
catch (Exception exc)
{
Log.Error($"ResourceController.upsert | Errore in fase salvataggio ResourceDto{Environment.NewLine}{exc}");
fatto = false;
}
}
// resetto cache redis
await MTAdmService.FlushRedisCache();
}
}
}
answ = fatto ? "OK" : "NO";
return answ;
}
}
}