using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//
// This is here so CodeMaid doesn't reorganize this document
//
namespace LiMan.DB.DBModels
{
[Table("EnrollRequest")]
public partial class EnrollRequestModel
{
///
/// ID univoco
///
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int IdReq { get; set; }
///
/// Passcode usato per autorizzare (un valore random NON DUPLICATO con quelli attivi al momento della richiesta)
///
public int Passcode { get; set; } = 0;
///
/// Payload richiesta, ovvero la serializzazione json di un Dict[string,string] delle info ricevute
///
public string ReqPayload { get; set; } = "";
///
/// DataOra richiesta enroll
///
public DateTime DtReq { get; set; } = DateTime.Now;
///
/// DataOra approvazione
///
public DateTime? DtAppr { get; set; } = null;
///
/// Username approvatore
///
public string UserAppr { get; set; } = "";
///
/// Licenza fornita in risposta alla richiesta
///
public int IdxLic { get; set; } = 0;
///
/// Indica Scaduta se non approvata e richiesta da oltre 15 minuti
///
[NotMapped]
public bool IsScaduta
{
get => DtAppr == null && DateTime.Now.Subtract(DtReq).TotalMinutes > minScad;
}
///
/// DataOra Scadenza richiesta (periodo indicato - 10 sec)
///
[NotMapped]
public DateTime DtScadenza
{
get => DtReq.AddSeconds(minScad * 60 - 10);
}
[NotMapped]
public Dictionary DictAttrib
{
get
{
Dictionary answ = new Dictionary();
if (!string.IsNullOrEmpty(ReqPayload))
{
try
{
answ = JsonConvert.DeserializeObject>(ReqPayload);
}
catch { }
}
return answ;
}
}
public int DictNumKVP()
{
return DictAttrib.Count;
}
public Dictionary DictAttribShort(int numMax)
{
Dictionary answ = DictAttrib;
if (answ.Count > numMax)
{
answ = answ.Take(numMax).ToDictionary(x => x.Key, x => x.Value);
}
return answ;
}
///
/// Scadenza massima (in minuti) per la richiesta
///
private const int minScad = 15;
}
}