PIbd-21_Anisin_R.S._CarRepa.../CarRepairShop/CarRepairShopDatabaseImplement/Models/Repair.cs

99 lines
3.6 KiB
C#
Raw Permalink Normal View History

2024-03-23 14:59:30 +04:00
using CarRepairShopContracts.BindingModels;
using CarRepairShopContracts.ViewModels;
using CarRepairShopDataModels.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace CarRepairShopDatabaseImplement.Models
{
public class Repair : IRepairModel
{
public int Id { get; set; }
[Required]
public string RepairName { get; set; } = string.Empty;
[Required]
public double Price { get; set; }
private Dictionary<int, (IComponentModel, int)>? _repairComponents = null;
2024-03-23 14:59:30 +04:00
[NotMapped]
public Dictionary<int, (IComponentModel, int)> RepairComponents
{
get
{
if (_repairComponents == null)
2024-03-23 14:59:30 +04:00
{
_repairComponents = Components
2024-03-23 14:59:30 +04:00
.ToDictionary(recPC => recPC.ComponentId, recPC => (recPC.Component as IComponentModel, recPC.Count));
}
return _repairComponents;
2024-03-23 14:59:30 +04:00
}
}
[ForeignKey("RepairId")]
public virtual List<RepairComponent> Components { get; set; } = new();
[ForeignKey("RepairId")]
public virtual List<Order> Orders { get; set; } = new();
public static Repair Create(CarRepairShopDatabase context, RepairBindingModel model)
{
return new Repair()
{
Id = model.Id,
RepairName = model.RepairName,
Price = model.Price,
Components = model.RepairComponents.Select(x => new RepairComponent
{
Component = context.Components.First(y => y.Id == x.Key),
Count = x.Value.Item2
}).ToList()
};
}
public void Update(RepairBindingModel model)
{
RepairName = model.RepairName;
Price = model.Price;
}
public RepairViewModel GetViewModel => new()
{
Id = Id,
RepairName = RepairName,
Price = Price,
RepairComponents = RepairComponents
};
public void UpdateComponents(CarRepairShopDatabase context, RepairBindingModel model)
{
var repairComponents = context.RepairComponents.Where(rec => rec.RepairId == model.Id).ToList();
if (repairComponents != null && repairComponents.Count > 0)
2024-03-23 14:59:30 +04:00
{ // удалили те, которых нет в модели
context.RepairComponents.RemoveRange(repairComponents.Where(rec => !model.RepairComponents.ContainsKey(rec.ComponentId)));
2024-03-23 14:59:30 +04:00
context.SaveChanges();
// обновили количество у существующих записей
foreach (var updateComponent in repairComponents)
2024-03-23 14:59:30 +04:00
{
updateComponent.Count = model.RepairComponents[updateComponent.ComponentId].Item2;
model.RepairComponents.Remove(updateComponent.ComponentId);
}
context.SaveChanges();
}
var repair = context.Repairs.First(x => x.Id == Id);
2024-03-23 14:59:30 +04:00
foreach (var pc in model.RepairComponents)
{
context.RepairComponents.Add(new RepairComponent
{
Repair = repair,
2024-03-23 14:59:30 +04:00
Component = context.Components.First(x => x.Id == pc.Key),
Count = pc.Value.Item2
});
context.SaveChanges();
}
_repairComponents = null;
2024-03-23 14:59:30 +04:00
}
}
}