using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MP.FileData.Controllers; using MP.Prog.Data; using NLog; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace MP.Prog.Controllers { [AllowAnonymous] [Route("api/[controller]")] [ApiController] public class FileChangeController : ControllerBase { #region Public Constructors /// /// Init generico /// /// public FileChangeController(FileArchDataService FileArchDService) { FADService = FileArchDService; Log.Info("Avviata classe FileChangeController"); } #endregion Public Constructors #region Public Methods /// /// Esegue controllo + approvazione modifiche x directory GET api/FileChange/approve/[id]?[numDayPrev] /// /// Directory / IdxMacchina | 0/ALL = tutte /// Verifica file modificati da numDayPrev gg /// Elenco dei file approvati [HttpGet("approve/{id}")] public async Task> Approve(string id, int numDayPrev) { List result = new List(); // verifico se una o tutte le macchine List listDir = new List(); if (id == "ALL" || id == "0") { var machList = await FADService.ArchMaccGetAll(); listDir = machList .Where(x => !string.IsNullOrEmpty(x.BasePath)) .Select(x => x.IdxMacchina).ToList(); } else { listDir.Add(id); } // ciclo su tutte le macchine e faccio approvazione... foreach (var currDir in listDir) { // eseguo singolo controllo, utente = "" (è auto-approvazione) await FADService.UpdateMachineArchive(currDir, numDayPrev, false, false, "", true); List listAppr = await ForceApproveMod(currDir, numDayPrev); result.AddRange(listAppr); } return result; } /// /// Esegue controllo + approvazione modifiche x directory GET api/FileChange/Approve/[id]?[numDayPrev] /// /// Directory / IdxMacchina | 0/ALL = tutte /// Verifica file modificati da numDayPrev gg /// Elenco dei file approvati [HttpGet("check/{id}")] public async Task> Check(string id, int numDayPrev) { List result = new List(); // verifico se una o tutte le macchine List listDir = new List(); if (id == "ALL" || id == "0") { var machList = await FADService.ArchMaccGetAll(); listDir = machList .Where(x => !string.IsNullOrEmpty(x.BasePath)) .Select(x => x.IdxMacchina).ToList(); } else { listDir.Add(id); } // ciclo su tutte le macchine e faccio verifica modificati... foreach (var currDir in listDir) { // eseguo singolo controllo, utente = "" , SENZA auto-approvazione int numCheks = await FADService.UpdateMachineArchive(currDir, numDayPrev, false, false, "", false); result.Add($"{currDir} | {numCheks} files"); } return result; } /// /// Verifica Health servizi FileChange GET api/FileChange /// /// [HttpGet] public ActionResult Get() { return "OK"; } #endregion Public Methods #region Protected Properties /// /// Dataservice x accesso DB /// protected FileArchDataService FADService { get; set; } #endregion Protected Properties #region Private Fields /// /// Classe per logging /// private static Logger Log = LogManager.GetCurrentClassLogger(); #endregion Private Fields #region Private Methods /// /// Effettua approvazione file modificati, restituendo elenco /// /// /// /// private async Task> ForceApproveMod(string currDir, int numDayPrev) { List answ = new List(); // preparo filtro SelectData currFilt = new SelectData() { IdxMacchina = currDir, OnlyActive = true, OnlyMod = true }; // recupero elenco files modificati x cartella var listChanged = await FADService.FileGetFilt(currFilt); // ciclo ogni file modificato foreach (var cFile in listChanged) { // se è modificato... if (cFile.DiskStatus == FileData.FileState.Changed) { // approvo il file modificato con utente anonimo (auto-Approve) bool fatto = await FADService.FileModApprove(cFile, ""); if (fatto) { answ.Add(cFile.Path); } } } return answ; } #endregion Private Methods } }