Files
mapo-core/MP.Land/Data/SyncService.cs
T
Samuele Locatelli 76708b49fb LAND:
- ok spedizione ZIP
- ok password zip
- ok test in DEV
2024-10-18 15:10:29 +02:00

254 lines
9.0 KiB
C#

using Egw.Core;
using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using MP.AppAuth.DTO;
using MP.AppAuth.Models;
using Newtonsoft.Json;
using NLog;
using RestSharp;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using static Egw.Core.LiManObj;
using static System.Net.Mime.MediaTypeNames;
namespace MP.Land.Data
{
public class SyncService
{
#region Public Constructors
/// <summary>
/// Init classe
/// </summary>
/// <param name="configuration"></param>
public SyncService(IConfiguration configuration)
{
_configuration = configuration;
}
#endregion Public Constructors
#region Public Properties
public List<AnagKeyValueModel> AKVList { get; set; } = new List<AnagKeyValueModel>();
public string Applicazione { get; set; } = "";
/// <summary>
/// Codice cliente/installazione
/// </summary>
public string Installazione { get; set; } = "";
/// <summary>
/// Master key licenza principale
/// </summary>
public string MasterKey { get; set; } = "";
#endregion Public Properties
#region Public Methods
/// <summary>
/// Stato server gestione licenze
/// </summary>
public async Task<string> checkLimanServer()
{
string answ = "ND";
// cerco online
RestClient client = new RestClient(apiUrl);
var request = new RestRequest($"api/health", Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// verifico risposta
if (response.Content != null)
{
answ = response.Content.Replace("\"", "");
}
}
return await Task.FromResult(answ);
}
/// <summary>
/// Init della classe con variabili di base da Redis/DB
/// </summary>
public bool InitAkv()
{
bool fatto = false;
Applicazione = "MAPO";
Installazione = getAVKStr("Installazione");
MasterKey = getAVKStr(Applicazione);
fatto = !string.IsNullOrEmpty($"{Installazione}{MasterKey}");
return fatto;
}
/// <summary>
/// Lista record AnagKeyVal
/// </summary>
public async Task<List<AnagKeyValueModel>?> OnlineListAnagKeyVal()
{
List<AnagKeyValueModel>? answ = new List<AnagKeyValueModel>();
// cerco online
RestClient client = new RestClient(apiUrl);
string MKeyEnc = HttpUtility.UrlEncode(MasterKey);
var request = new RestRequest($"api/dbsync/anagkeyval/{Installazione}?CodApp={Applicazione}", Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// salvo in redis contenuto serializzato
string rawData = $"{response.Content}";
answ = JsonConvert.DeserializeObject<List<AnagKeyValueModel>?>(rawData);
}
return await Task.FromResult(answ);
}
/// <summary>
/// Lista record Config
/// </summary>
public async Task<List<ConfigModel>?> OnlineListConfig()
{
List<ConfigModel>? answ = new List<ConfigModel>();
// cerco online
RestClient client = new RestClient(apiUrl);
string MKeyEnc = HttpUtility.UrlEncode(MasterKey);
var request = new RestRequest($"api/dbsync/conf/{Installazione}?CodApp={Applicazione}", Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// salvo in redis contenuto serializzato
string rawData = $"{response.Content}";
answ = JsonConvert.DeserializeObject<List<ConfigModel>?>(rawData);
}
return await Task.FromResult(answ);
}
/// <summary>
/// Lista record Vocabolario
/// </summary>
public async Task<List<VocabolarioModel>?> OnlineListVocabolario()
{
List<VocabolarioModel>? answ = new List<VocabolarioModel>();
// cerco online
RestClient client = new RestClient(apiUrl);
string MKeyEnc = HttpUtility.UrlEncode(MasterKey);
var request = new RestRequest($"api/dbsync/vocabolario/{Installazione}?CodApp={Applicazione}", Method.Get);
var response = await client.GetAsync(request);
// controllo risposta
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// salvo in redis contenuto serializzato
string rawData = $"{response.Content}";
answ = JsonConvert.DeserializeObject<List<VocabolarioModel>?>(rawData);
}
return await Task.FromResult(answ);
}
/// <summary>
/// Invio file zip di backup al server centrale
/// </summary>
/// <param name="CodApp">Cod Applicazione</param>
/// <param name="CodInst">CLiente / Installazione</param>
/// <param name="DoUnzip">Invia richiesta UnZip</param>
/// <param name="ForceApprov">Invia richiesta Approvazione</param>
/// <param name="ZipFile">ZipFile da inviare</param>
/// <returns></returns>
public async Task<bool> SendZipFile(string CodApp, string CodInst, bool DoUnzip, bool ForceApprov, FileInfo ZipFile)
{
bool answ = false;
try
{
// client chiamate rest
var client = new RestClient(restOptStd);
// Chiamo il metodo!
var actReq = new RestRequest($"/api/filesave/zipbackup", Method.Post);
actReq.AddParameter("CodApp", $"{CodApp}");
actReq.AddParameter("CodInst", $"{CodInst}");
actReq.AddParameter("DoUnzip", $"{DoUnzip}");
actReq.AddParameter("ForceApprov", $"{ForceApprov}");
actReq.AddFile("ZipFile", ZipFile.FullName);
actReq.AddHeader("Content-Type", "multipart/form-data");
// effettuo vera chiamata
var currResp = await client.ExecuteAsync(actReq);
if (currResp.StatusCode == System.Net.HttpStatusCode.OK && currResp.Content != null)
{
// mi restituisce esito upload
var currList = JsonConvert.DeserializeObject<List<UploadResult>>(currResp.Content);
if (currList != null)
{
// se contiene anche la richiesta è ok...
var recUpd = currList.FirstOrDefault(x => x.FileName == ZipFile.Name);
if (recUpd != null)
{
answ = recUpd.Uploaded;
}
}
}
}
catch (Exception exc)
{
Log.Error($"Eccezione in fase gestione REST services SendZipFile{Environment.NewLine}{exc}");
}
return answ;
}
#endregion Public Methods
#region Protected Methods
/// <summary>
/// Cerca di recuperare valore string da elenco AKV
/// </summary>
/// <param name="varReq">Chiave AKV richiesta</param>
/// <returns></returns>
protected string getAVKStr(string varReq)
{
string answ = "";
if (AKVList != null && AKVList.Count > 0)
{
var currRec = AKVList.Where(x => x.NomeVar == varReq).FirstOrDefault();
if (currRec != null)
{
answ = $"{currRec.ValString}";
}
}
return answ;
}
#endregion Protected Methods
#region Private Fields
private static IConfiguration? _configuration;
/// <summary>
/// URL dell'API x chiamate gestione licenze
/// </summary>
#if DEBUG
private static string apiUrl = "https://localhost:5003/";
#else
private static string apiUrl = "https://liman.egalware.com/ELM.API/";
#endif
/// <summary>
/// Classe logger
/// </summary>
private static Logger Log = LogManager.GetCurrentClassLogger();
/// <summary>
/// Conf client RestSharp standard:
/// - base URI al sito
/// - timeout 1 min
/// </summary>
private static RestClientOptions restOptStd = new RestClientOptions { Timeout = TimeSpan.FromSeconds(60), BaseUrl = new Uri(apiUrl) };
#endregion Private Fields
}
}