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
}
}