using Step.Model.ConfigModels; using Step.Model.DatabaseModels; using Step.Model.DTOModels; using System; using System.Collections.Generic; using System.Linq; using static Step.Config.ServerConfig; namespace Step.Database.Controllers { public class MaintenancesController : IDisposable { private DatabaseContext dbCtx; public MaintenancesController() { // Initialize database context dbCtx = new DatabaseContext(); } public void Dispose() { // Clear database context dbCtx.Dispose(); } public List FindLastMaintenance() { List lastMaintenances = new List(); // Find last performed maintenance lastMaintenances = (from maintenances in dbCtx.PerformedMaintenances where maintenances.Date == (from m1 in dbCtx.PerformedMaintenances // Select max data of performed maintenance where m1.MaintenanceId == maintenances.MaintenanceId select m1.Date ).Max() select maintenances).ToList(); return lastMaintenances; } public List FindAll() { return dbCtx .Maintenances .ToList(); } public void CheckDifferencesFromDbAndXml() { List dbMaintenances = dbCtx .Maintenances .ToList(); // Find database rows that List toDeleteMaint = dbMaintenances.Where(x => !MaintenancesConfig.Select(y => y.Id).Contains(x.MaintenanceId) ).ToList(); // Delete database items foreach (var item in toDeleteMaint) dbCtx.Maintenances.Remove(item); dbCtx.SaveChanges(); // Find common data from List toUpdateMaint = dbMaintenances.Where(x => MaintenancesConfig.Select(y => y.Id).Contains(x.MaintenanceId) ) .ToList(); // Update rows if (toUpdateMaint != null) foreach (MaintenanceModel item in toUpdateMaint) { // find to update into db var old = dbCtx.Maintenances.Where(x => x.MaintenanceId == item.MaintenanceId).FirstOrDefault(); // Update model old = MaintenancesConfig.Where(x => x.Id == item.MaintenanceId).Select(x => { old.MaintenanceId = x.Id; old.Deadline = x.Deadline; old.Intervall = x.Intervall.TotalMinutes; old.Type = x.Type; old.CounterId = x.CouterId; return old; }).FirstOrDefault(); } dbCtx.SaveChanges(); // Get new maintenance from file List toAddMaint = MaintenancesConfig .Where(x => !toUpdateMaint.Select(y => y.MaintenanceId).Contains(x.Id)) .Select(x => new MaintenanceModel() { MaintenanceId = x.Id, Deadline = x.Deadline, Intervall = x.Intervall.TotalMinutes, Type = x.Type, CounterId = x.CouterId }) .ToList(); // Add new maintenances to database if (toAddMaint != null) { dbCtx.Maintenances.AddRange(toAddMaint); dbCtx.SaveChanges(); } } } }