PIbd-21_BatylkinaAO_MusoevD.../Canteen/CanteenDatabaseImplement/Models/Product.cs

186 lines
6.2 KiB
C#
Raw Normal View History

2023-04-07 10:55:40 +04:00
using CanteenContracts.BindingModels;
using CanteenContracts.View;
using CanteenDataModels.Models;
2023-04-09 00:34:25 +04:00
using FluentNHibernate.Conventions.Inspections;
using Microsoft.EntityFrameworkCore;
2023-04-07 10:55:40 +04:00
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace CanteenDatabaseImplement.Models
{
2023-04-07 23:35:33 +04:00
//public class Product : IProductModel
//{
// public int Id { get; private set; }
// [Required]
// public string ProductName { get; private set; } = string.Empty;
// [Required]
// public double Cost { get; private set; }
// [Required]
// public int ManagerId { get; private set; }
// private Dictionary<int, ICookModel>? _productCooks = null;
// [NotMapped]
// public Dictionary<int, ICookModel> ProductCooks
// {
// get
// {
// if (_productCooks == null)
// {
// _productCooks = Cooks.ToDictionary(record => record.CookId, record => record.Cook as ICookModel);
// }
// return _productCooks;
// }
// }
// [ForeignKey("ProductId")]
// public virtual List<ProductCook> Cooks { get; set; } = new();
// [ForeignKey("ProductId")]
// public virtual List<DishProduct> Dishes { get; set; } = new();
// public static Product? Create(CanteenDatabase context, ProductBindingModel model)
// {
// return new Product()
// {
// Id = model.Id,
// ProductName = model.ProductName,
// Cost = model.Cost,
// Cooks = model.ProductCooks.Select(x => new ProductCook
// {
// Cook = context.Cooks.First(y => y.Id == x.Key)
// }).ToList()
// };
// }
// public void Update(ProductBindingModel model)
// {
// ProductName = model.ProductName;
// Cost = model.Cost;
// }
// public ProductViewModel GetViewModel => new()
// {
// Id = Id,
// ProductName = ProductName,
// Cost = Cost,
// ProductCooks = ProductCooks,
// ManagerId = ManagerId
// };
// public void UpdateCooks(CanteenDatabase context, ProductBindingModel model)
// {
// var productCooks = context.ProductCooks.Where(record => record.ProductId == model.Id).ToList();
// if (productCooks != null && productCooks.Count > 0)
// {
// context.ProductCooks.RemoveRange(productCooks.Where(record => !model.ProductCooks.ContainsKey(record.CookId)));
// context.SaveChanges();
// }
// var product = context.Products.First(x => x.Id == Id);
// foreach (var pc in model.ProductCooks)
// {
// context.ProductCooks.Add(new ProductCook
// {
// Product = product,
// Cook = context.Cooks.First(x => x.Id == pc.Key),
// });
// context.SaveChanges();
// }
// _productCooks = null;
// }
//}
2023-04-07 10:55:40 +04:00
public class Product : IProductModel
{
2023-04-07 23:35:33 +04:00
public int Id { get; set; }
2023-04-07 10:55:40 +04:00
[Required]
2023-04-07 23:35:33 +04:00
public string ProductName { get; set; } = string.Empty;
2023-04-07 10:55:40 +04:00
[Required]
2023-04-07 23:35:33 +04:00
public double Price { get; set; }
2023-04-07 10:55:40 +04:00
[Required]
2023-04-07 23:35:33 +04:00
public int ManagerId { get; set; }
2023-04-07 10:55:40 +04:00
private Dictionary<int, ICookModel>? _productCooks = null;
2023-04-07 23:35:33 +04:00
2023-04-07 10:55:40 +04:00
[NotMapped]
public Dictionary<int, ICookModel> ProductCooks
{
get
{
if (_productCooks == null)
{
2023-04-07 23:35:33 +04:00
_productCooks = Cooks
.ToDictionary(recPC => recPC.CookId, recPC => (recPC.Cook as ICookModel));
2023-04-07 10:55:40 +04:00
}
return _productCooks;
}
}
2023-04-07 23:35:33 +04:00
2023-04-07 10:55:40 +04:00
[ForeignKey("ProductId")]
public virtual List<ProductCook> Cooks { get; set; } = new();
2023-04-09 00:34:25 +04:00
[ForeignKey("ProductId")]
public virtual List<LunchProduct> Lunches { get; set; } = new();
[ForeignKey("ProductId")]
public virtual List<DishProduct> Dishes { get; set; } = new();
public virtual Manager Manager { get; set; }
2023-04-07 23:35:33 +04:00
public static Product Create(CanteenDatabase context, ProductBindingModel model)
2023-04-07 10:55:40 +04:00
{
2023-04-07 23:35:33 +04:00
return new Product
2023-04-07 10:55:40 +04:00
{
Id = model.Id,
ProductName = model.ProductName,
2023-04-07 23:35:33 +04:00
Price = model.Price,
ManagerId = model.ManagerId,
2023-04-07 10:55:40 +04:00
Cooks = model.ProductCooks.Select(x => new ProductCook
{
2023-04-07 23:35:33 +04:00
Cook = context.Cooks.First(y => y.Id == x.Key),
2023-04-07 10:55:40 +04:00
}).ToList()
};
}
public void Update(ProductBindingModel model)
{
ProductName = model.ProductName;
2023-04-07 23:35:33 +04:00
Price = model.Price;
ManagerId = model.ManagerId;
2023-04-07 10:55:40 +04:00
}
public ProductViewModel GetViewModel => new()
{
Id = Id,
ProductName = ProductName,
2023-04-07 23:35:33 +04:00
Price = Price,
ManagerId = ManagerId,
ProductCooks = ProductCooks
2023-04-07 10:55:40 +04:00
};
2023-04-07 23:35:33 +04:00
public void UpdateProductCooks(CanteenDatabase context, ProductBindingModel model)
2023-04-07 10:55:40 +04:00
{
2023-04-07 23:35:33 +04:00
var productCookers = context.ProductCook.Where(rec => rec.ProductId == model.Id).ToList();
if (productCookers != null && (productCookers.Count() > 0))
2023-04-07 10:55:40 +04:00
{
2023-04-07 23:35:33 +04:00
context.ProductCook.RemoveRange(productCookers.Where(rec => !model.ProductCooks.ContainsKey(rec.CookId)));
2023-04-07 10:55:40 +04:00
context.SaveChanges();
}
2023-04-09 00:34:25 +04:00
foreach (var updateCook in productCookers)
{
model.ProductCooks.Remove(updateCook.CookId);
}
context.SaveChanges();
2023-04-07 10:55:40 +04:00
var product = context.Products.First(x => x.Id == Id);
2023-04-07 23:35:33 +04:00
2023-04-07 10:55:40 +04:00
foreach (var pc in model.ProductCooks)
{
2023-04-07 23:35:33 +04:00
context.ProductCook.Add(new ProductCook
2023-04-07 10:55:40 +04:00
{
Product = product,
2023-04-07 23:35:33 +04:00
Cook = context.Cooks.First(x => x.Id == pc.Key)
2023-04-07 10:55:40 +04:00
});
context.SaveChanges();
}
_productCooks = null;
}
}
}