using Microsoft.Extensions.Configuration; using NLog; using NLog.Fluent; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MongoDB.Driver; using MongoDB.Bson; using MP.Data.MgModels; using System.IO; using MP.Data.Conf; using Newtonsoft.Json; using static MP.Data.MgModels.RecipeModel; namespace MP.Data.Controllers { public class MpMongoController : IDisposable { public MpMongoController(IConfiguration configuration) { _configuration = configuration; string mongoConf = _configuration.GetConnectionString("MongoConnect"); client = new MongoClient(mongoConf); mongoDb = client.GetDatabase("MAPO"); Log.Info("Avviata classe MpMongoController"); } /// /// Database corrente MongoDB /// private IMongoDatabase mongoDb; public void Dispose() { client = null; _configuration = null; } /// /// Ricerca ricetta su MongoDB dato PODL /// /// /// public async Task RecipeGetByPODL(int idxPODL) { await Task.Delay(1); RecipeModel answ = new RecipeModel(); try { // definisco filtro var filtBuilder = Builders.Filter; var filter = filtBuilder.Eq("IdxPODL", idxPODL); var collectionData = mongoDb.GetCollection("RecipeArchive"); // recupero answ = collectionData.Find(filter).Project("{_id: 0}").FirstOrDefault(); } catch { } return answ; } /// /// Salva ricetta su MongoDB /// /// /// public async Task RecipeSetByPODL(RecipeModel currRecord) { await Task.Delay(1); bool answ = false; try { // definisco filtro var filtBuilder = Builders.Filter; var filter = filtBuilder.Eq("IdxPODL", currRecord.IdxPODL); var collectionData = mongoDb.GetCollection("RecipeArchive"); // elimino old collectionData.DeleteMany(filter); // aggiungo collectionData.InsertOne(currRecord); answ = true; } catch(Exception exc) { Log.Error($"Eccezione in RecipeSetByPODL{Environment.NewLine}{exc}"); } return answ; } /// /// Init ricetta dato PODL + conf /// /// /// public RecipeModel InitRecipe(int idxPODL, string confPath) { RecipeModel answ = new RecipeModel(); // per prima cosa leggo file di conf x inizializzare ricetta... string fullPath = RecipePath(confPath); bool fileOk = File.Exists(fullPath); if (fileOk) { string rawData = File.ReadAllText(fullPath); var currRecipe = JsonConvert.DeserializeObject(rawData); //// calcolo obj riga base (ne aggiungo1...) //var rigaBase = RecipeModel.ConvertToObj(currRecipe.RowsConf.ListKeys); // copio la mia ricetta come conf... answ = new RecipeModel() { IdxPODL = idxPODL, TemplateFile = currRecipe.TemplateFile, HeadConf = currRecipe.HeadConf, RowsConf = currRecipe.RowsConf, //HeadVal = currRecipe.HeadConf.ListKeys, HeadVal = RecipeModel.ConvertToObj(currRecipe.HeadConf.ListKeys), // aggiungo 1 riga... RowsVal = new Dictionary>() { //{ "1", rigaBase } { "1", RecipeModel.ConvertToObj(currRecipe.RowsConf.ListKeys)} } }; } return answ; } private MongoClient client = new MongoClient("mongodb://localhost:27017"); private static IConfiguration _configuration; private static Logger Log = LogManager.GetCurrentClassLogger(); public static string RecipePath(string ruleName) { return string.Format($"Recipe/{ruleName}"); } } }