Completato primo "giro" gestione attivazioni

This commit is contained in:
Samuele Locatelli
2021-11-05 19:39:40 +01:00
parent b4baa4293f
commit dad5b611bf
5 changed files with 121 additions and 58 deletions
+14
View File
@@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Core
{
public class UserLicenseRequest
{
public string MasterKey { get; set; } = "";
public Dictionary<string, string> ParamDict { get; set; } = new Dictionary<string, string>();
}
}
+11 -12
View File
@@ -1,4 +1,5 @@
using LiMan.APi.Data;
using Core;
using LiMan.APi.Data;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NLog;
@@ -39,8 +40,7 @@ namespace LiMan.APi.Controllers
/// <summary>
/// Recupero record di sub licenza (con chiavi anonimizzate)
/// </summary>
/// <param name="id">Idx licenza MASTER</param>
/// <param name="CodImpiego">Codice univoco impiego licenza</param>
/// <param name="id">ID Licenza MASTER</param>
/// <returns></returns>
// GET api/attivazioni/5
[HttpGet("{id}")]
@@ -53,12 +53,12 @@ namespace LiMan.APi.Controllers
/// <summary>
/// Verifica recupero un record di sub licenza
/// </summary>
/// <param name="id">Idx licenza MASTER</param>
/// <param name="id">ID Licenza MASTER</param>
/// <param name="CodImpiego">Codice univoco impiego licenza</param>
/// <returns></returns>
// GET api/attivazioni/5
[HttpGet("verifica/{id}")]
public async Task<DB.DTO.AttivazioneDTO> VerificaImpiego(int id, string CodImpiego)
// POST api/attivazioni/verifica/5
[HttpPost("verifica/{id}")]
public async Task<DB.DTO.AttivazioneDTO> VerificaImpiego(int id, [FromBody] string CodImpiego)
{
var result = await _DataService.AttivazioneSearch(id, CodImpiego, false);
return result;
@@ -67,17 +67,16 @@ namespace LiMan.APi.Controllers
/// <summary>
/// Richiesta attivazione di una lista di chiavi di licenza sub
/// </summary>
/// <param name="id">Idx licenza MASTER</param>
/// <param name="ParamDict">Elenco codici impiego (key) + valori in formato dizionari</param>
/// <param name="CurrRequest">Obj Richiesta con licenza MASTER + Elenco codici impiego (key) + valori in formato dizionari</param>
// POST api/attivazioni
[HttpPost]
public async Task<List<DB.DTO.AttivazioneDTO>> Post(int id, [FromBody] Dictionary<string, string> ParamDict)
public async Task<List<DB.DTO.AttivazioneDTO>> Post([FromBody] UserLicenseRequest CurrRequest)
{
List<DB.DTO.AttivazioneDTO> currData = new List<DB.DTO.AttivazioneDTO>();
// eseguo tentativo generazione attivazioni da licenza...
bool done = await _DataService.AttivazioniTryAdd(id, ParamDict, 60);
currData = await _DataService.AttivazioniByLic(id, false);
bool done = await _DataService.AttivazioniTryAdd(CurrRequest.MasterKey, CurrRequest.ParamDict, 60);
currData = await _DataService.AttivazioniByMasterKey(CurrRequest.MasterKey, false);
return currData;
}
+32 -7
View File
@@ -80,19 +80,19 @@ namespace LiMan.APi.Data
/// <summary>
/// Effettua registrazione (se possibile) delle licenze indicate dall'elenco codici di impiego indicati
/// </summary>
/// <param name="IdxLic"></param>
/// <param name="MasterKey">Codice Licenza Master</param>
/// <param name="ParamDict">Elenco codici impiego (key) + valori in formato dizionari</param>
/// <param name="DayVeto">Numero giorni x scadenza veto modifica</param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> AttivazioniTryAdd(int IdxLic, Dictionary<string, string> ParamDict, int DayVeto)
public async Task<bool> AttivazioniTryAdd(string MasterKey, Dictionary<string, string> ParamDict, int DayVeto)
{
bool taskDone = false;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
taskDone = dbController.AttivazioniTryAdd(IdxLic, ParamDict, DayVeto);
taskDone = dbController.AttivazioniTryAdd(MasterKey, ParamDict, DayVeto);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata scrittura + rilettura da DB per AttivazioniTryAdd: {ts.TotalMilliseconds} ms");
@@ -101,9 +101,9 @@ namespace LiMan.APi.Data
}
/// <summary>
/// Elenco Attivaizoni da licenza master
/// Elenco Attivaizoni da ID Licenza master
/// </summary>
/// <param name="IdxLic">Codice Licenza Master</param>
/// <param name="IdxLic">Idx Licenza Master</param>
/// <param name="HideData">Indica se nascondere i dati sensibili</param>
/// <returns></returns>
public async Task<List<DB.DTO.AttivazioneDTO>> AttivazioniByLic(int IdxLic, bool HideData)
@@ -121,10 +121,35 @@ namespace LiMan.APi.Data
return await Task.FromResult(dbResult);
}
/// <summary>
/// Elenco Attivaizoni da valore Licenza master
/// </summary>
/// <param name="MasterKey">Licenza Master</param>
/// <param name="HideData">Indica se nascondere i dati sensibili</param>
/// <returns></returns>
public async Task<List<DB.DTO.AttivazioneDTO>> AttivazioniByMasterKey(string MasterKey, bool HideData)
{
List<DB.DTO.AttivazioneDTO> dbResult = new List<DB.DTO.AttivazioneDTO>();
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
var licenza = dbController.GetLicenza(MasterKey);
if (licenza != null)
{
dbResult = dbController.GetAttivazioniByLic(licenza.IdxLic, HideData);
}
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB per AttivazioniByLic: {ts.TotalMilliseconds} ms");
return await Task.FromResult(dbResult);
}
/// <summary>
/// Elenco licenze dato cliente
/// </summary>
/// <param name="IdxLic">Codice Licenza Master</param>
/// <param name="IdxLic">ID Licenza Master</param>
/// <param name="CodImpiego">Codice Impiego licenza</param>
/// <param name="HideData">Indica se nascondere i dati sensibili</param>
/// <returns></returns>
@@ -135,7 +160,7 @@ namespace LiMan.APi.Data
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
dbResult = dbController.GetAttivazione( IdxLic, CodImpiego, HideData);
dbResult = dbController.GetAttivazione(IdxLic, CodImpiego, HideData);
stopWatch.Stop();
TimeSpan ts = stopWatch.Elapsed;
Log.Trace($"Effettuata lettura da DB per AttivazioniSearch: {ts.TotalMilliseconds} ms");
+17 -11
View File
@@ -59,24 +59,22 @@
<summary>
Recupero record di sub licenza (con chiavi anonimizzate)
</summary>
<param name="id">Idx licenza MASTER</param>
<param name="CodImpiego">Codice univoco impiego licenza</param>
<param name="id">ID Licenza MASTER</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Controllers.AttivazioniController.VerificaImpiego(System.Int32,System.String)">
<summary>
Verifica recupero un record di sub licenza
</summary>
<param name="id">Idx licenza MASTER</param>
<param name="id">ID Licenza MASTER</param>
<param name="CodImpiego">Codice univoco impiego licenza</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Controllers.AttivazioniController.Post(System.Int32,System.Collections.Generic.Dictionary{System.String,System.String})">
<member name="M:LiMan.APi.Controllers.AttivazioniController.Post(Core.UserLicenseRequest)">
<summary>
Richiesta attivazione di una lista di chiavi di licenza sub
</summary>
<param name="id">Idx licenza MASTER</param>
<param name="ParamDict">Elenco codici impiego (key) + valori in formato dizionari</param>
<param name="CurrRequest">Obj Richiesta con licenza MASTER + Elenco codici impiego (key) + valori in formato dizionari</param>
</member>
<member name="T:LiMan.APi.Controllers.InstallazioniController">
<summary>
@@ -159,11 +157,11 @@
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniTryAdd(System.Int32,System.Collections.Generic.Dictionary{System.String,System.String},System.Int32)">
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniTryAdd(System.String,System.Collections.Generic.Dictionary{System.String,System.String},System.Int32)">
<summary>
Effettua registrazione (se possibile) delle licenze indicate dall'elenco codici di impiego indicati
</summary>
<param name="IdxLic"></param>
<param name="MasterKey">Codice Licenza Master</param>
<param name="ParamDict">Elenco codici impiego (key) + valori in formato dizionari</param>
<param name="DayVeto">Numero giorni x scadenza veto modifica</param>
<returns></returns>
@@ -171,9 +169,17 @@
</member>
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniByLic(System.Int32,System.Boolean)">
<summary>
Elenco Attivaizoni da licenza master
Elenco Attivaizoni da ID Licenza master
</summary>
<param name="IdxLic">Codice Licenza Master</param>
<param name="IdxLic">Idx Licenza Master</param>
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
</member>
<member name="M:LiMan.APi.Data.ApiDataService.AttivazioniByMasterKey(System.String,System.Boolean)">
<summary>
Elenco Attivaizoni da valore Licenza master
</summary>
<param name="MasterKey">Licenza Master</param>
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
</member>
@@ -181,7 +187,7 @@
<summary>
Elenco licenze dato cliente
</summary>
<param name="IdxLic">Codice Licenza Master</param>
<param name="IdxLic">ID Licenza Master</param>
<param name="CodImpiego">Codice Impiego licenza</param>
<param name="HideData">Indica se nascondere i dati sensibili</param>
<returns></returns>
+47 -28
View File
@@ -55,6 +55,11 @@ namespace LiMan.DB.Controllers
//Log.Info("Dispose di GWMSController");
}
/// <summary>
/// Recupero da DB le attivazioni richieste
/// </summary>
/// <param name="IdxLic">Idx Licenza</param>
/// <param name="hideData">Indica se generare rand parametri sensibili</param>
public List<AttivazioneDTO> GetAttivazioniByLic(int IdxLic, bool hideData)
{
List<AttivazioneDTO> dbResult = new List<AttivazioneDTO>();
@@ -120,49 +125,51 @@ namespace LiMan.DB.Controllers
/// <summary>
/// Cerca di aggiungere sul DB le attivazioni richieste
/// </summary>
/// <param name="idxLic">Idx Master Lic</param>
/// <param name="MasterKey">Master Lic</param>
/// <param name="ParamDict">Elenco codici impiego (key) + valori in formato dizionari</param>
/// <param name="numDayVeto">num gg di veto da impostare</param>
/// <returns></returns>
public bool AttivazioniTryAdd(int idxLic, Dictionary<string, string> ParamDict, int numDayVeto)
public bool AttivazioniTryAdd(string MasterKey, Dictionary<string, string> ParamDict, int numDayVeto)
{
bool answ = false;
// verifica se si può procedere...
var licenza = GetLicenza(idxLic);
var attivList = GetAttivazioniByLic(idxLic, false);
if (licenza.IsValid && (licenza.NumLicenze >= (attivList.Count + ParamDict.Count)))
var licenza = GetLicenza(MasterKey);
if (licenza != null)
{
DateTime vetoDate = DateTime.Today.AddDays(numDayVeto);
using (LMDbContext localDbCtx = new LMDbContext(_configuration))
var attivList = GetAttivazioniByLic(licenza.IdxLic, false);
if (licenza.IsValid && (licenza.NumLicenze >= (attivList.Count + ParamDict.Count)))
{
try
DateTime vetoDate = DateTime.Today.AddDays(numDayVeto);
using (LMDbContext localDbCtx = new LMDbContext(_configuration))
{
// genero subLicenze...
var newRec = ParamDict
.Select(x => new SubLicenzaModel()
{
IdxLic = idxLic,
CodImpiego = x.Key,
VetoUnlock = vetoDate,
Tipo = Enum.TipoLicenza.UserKey,
Chiave = x.Value
})
.ToList();
localDbCtx
.DbSetSubLicenze
.AddRange(newRec);
try
{
// genero subLicenze...
var newRec = ParamDict
.Select(x => new SubLicenzaModel()
{
IdxLic = licenza.IdxLic,
CodImpiego = x.Key,
VetoUnlock = vetoDate,
Tipo = Enum.TipoLicenza.UserKey,
Chiave = x.Value
})
.ToList();
localDbCtx
.DbSetSubLicenze
.AddRange(newRec);
localDbCtx.SaveChanges();
}
catch(Exception exc)
{
Log.Error($"Errore in AttivazioniTryAdd per IdxLic {idxLic} | #rec: {ParamDict.Count}{Environment.NewLine}{exc}");
localDbCtx.SaveChanges();
}
catch (Exception exc)
{
Log.Error($"Errore in AttivazioniTryAdd per MasterKey {MasterKey} | #rec: {ParamDict.Count}{Environment.NewLine}{exc}");
}
}
}
}
return answ;
}
@@ -363,6 +370,18 @@ namespace LiMan.DB.Controllers
}
return dbResult;
}
public LicenzaModel GetLicenza(string MasterKey)
{
LicenzaModel dbResult = new LicenzaModel();
using (LMDbContext localDbCtx = new LMDbContext(_configuration))
{
dbResult = localDbCtx
.DbSetLicenze
.Where(x => x.Chiave == MasterKey)
.FirstOrDefault();
}
return dbResult;
}
public List<LicenzaModel> GetLicenze()
{