PIbd-23_Yakobchuk_S.V._Moto.../MotorPlant/MotorPlantDatabaseImplement/Engine.cs

98 lines
3.4 KiB
C#
Raw Normal View History

2024-05-11 10:55:49 +04:00
using MotorPlantContracts.BindingModels;
using MotorPlantContracts.ViewModels;
using MotorPlantDataModels.Models;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
namespace MotorPlantDatabaseImplement.Models
{
2024-05-11 11:37:25 +04:00
public class Engine : IEngineModel
{
public int Id { get; set; }
[Required]
public string EngineName { get; set; } = string.Empty;
[Required]
public double Price { get; set; }
private Dictionary<int, (IComponentModel, int)>? _EngineComponents =
null;
[NotMapped]
public Dictionary<int, (IComponentModel, int)> EngineComponents
{
get
{
if (_EngineComponents == null)
{
_EngineComponents = Components
.ToDictionary(recPC => recPC.ComponentId, recPC =>
(recPC.Component as IComponentModel, recPC.Count));
}
return _EngineComponents;
}
}
[ForeignKey("EngineId")]
public virtual List<EngineComponent> Components { get; set; } = new();
[ForeignKey("EngineId")]
public virtual List<Order> Orders { get; set; } = new();
public static Engine Create(MotorPlantDataBase context,
EngineBindingModel model)
{
return new Engine()
{
Id = model.Id,
EngineName = model.EngineName,
Price = model.Price,
Components = model.EngineComponents.Select(x => new
EngineComponent
{
Component = context.Components.First(y => y.Id == x.Key),
Count = x.Value.Item2
}).ToList()
};
}
public void Update(EngineBindingModel model)
{
EngineName = model.EngineName;
Price = model.Price;
}
public EngineViewModel GetViewModel => new()
{
Id = Id,
EngineName = EngineName,
Price = Price,
EngineComponents = EngineComponents
};
public void UpdateComponents(MotorPlantDataBase context,
EngineBindingModel model)
{
var EngineComponents = context.EngineComponents.Where(rec =>
rec.EngineId == model.Id).ToList();
if (EngineComponents != null && EngineComponents.Count > 0)
{
context.EngineComponents.RemoveRange(EngineComponents.Where(rec
2024-05-11 10:55:49 +04:00
=> !model.EngineComponents.ContainsKey(rec.ComponentId)));
2024-05-11 11:37:25 +04:00
context.SaveChanges();
foreach (var updateComponent in EngineComponents)
{
updateComponent.Count =
model.EngineComponents[updateComponent.ComponentId].Item2;
model.EngineComponents.Remove(updateComponent.ComponentId);
}
context.SaveChanges();
}
var Engine = context.Engines.First(x => x.Id == Id);
foreach (var pc in model.EngineComponents)
{
context.EngineComponents.Add(new EngineComponent
{
Engine = Engine,
Component = context.Components.First(x => x.Id == pc.Key),
Count = pc.Value.Item2
});
context.SaveChanges();
}
_EngineComponents = null;
}
}
2024-05-11 10:55:49 +04:00
}