Coursach/Course/DatabaseImplement/Models/Workshop.cs

101 lines
3.0 KiB
C#
Raw Normal View History

using Contracts.BindingModels;
using Contracts.ViewModels;
using DataModels.Models;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
namespace DatabaseImplement.Models
{
public class Workshop : IWorkshopModel
{
public int Id { get; set; }
[Required]
public string Title { get; set; } = string.Empty;
[Required]
public string Address { get; set; } = string.Empty;
[Required]
public string Director { get; set; } = string.Empty;
[Required]
public int UserId { get; set; }
[Required]
public int ProductionId { get; set; }
public virtual Production Production { get; set; }
private Dictionary<int, (IWorkerModel, int)>? _workerWorkshops = null;
[NotMapped]
public Dictionary<int, (IWorkerModel, int)>? WorkerWorkshops
{
get
{
if(_workerWorkshops == null)
{
_workerWorkshops = Workers.ToDictionary(recDP => recDP.WorkerId, recDp => (recDp.Worker as IWorkerModel, recDp.Count));
}
return _workerWorkshops;
}
}
[ForeignKey("WorkshopId")]
public List<WorkerWorkshop> Workers { get; set; } = new();
public virtual Guarantor Guarantor { get; set; }
public static Workshop Create(FactoryGoWorkDatabase context, WorkshopBindingModel model)
{
return new Workshop()
{
Id = model.Id,
Title = model.Title,
Address = model.Address,
Director = model.Director,
ProductionId = model.ProductionId,
Production = context.Productions.FirstOrDefault(x => x.Id == model.ProductionId)!,
UserId = model.UserId,
Workers = model.WorkshopWorker.Select(x => new WorkerWorkshop
{
Worker = context.Workers.First(y => y.Id == x.Key),
}).ToList(),
};
}
public void Update(WorkshopBindingModel model)
{
Title = model.Title;
Address = model.Address;
Director = model.Director;
}
public WorkshopViewModel GetViewModel => new()
{
Id = Id,
Title = Title,
Address = Address,
Director = Director,
ProductionId= ProductionId,
UserId = UserId,
WorkerWorkshops = WorkerWorkshops
};
public void UpdateWorkers(FactoryGoWorkDatabase context, WorkshopBindingModel model)
{
var workshopWorkers = context.WorkerWorkshops.Where(rec => rec.WorkshopId == model.Id).ToList();
if (workshopWorkers != null && workshopWorkers.Count > 0)
{
context.WorkerWorkshops.RemoveRange(workshopWorkers.Where(rec => !model.WorkshopWorker.ContainsKey(rec.WorkerId)));
context.SaveChanges();
foreach (var upWorker in workshopWorkers)
{
upWorker.Count = model.WorkshopWorker[upWorker.WorkerId].Item2;
model.WorkshopWorker.Remove(upWorker.WorkerId);
}
context.SaveChanges();
}
var workshop = context.Workshops.First(x => x.Id == model.Id);
foreach (var dp in model.WorkshopWorker)
{
context.WorkerWorkshops.Add(new WorkerWorkshop
{
Workshop = workshop,
Worker = context.Workers.First(x => x.Id == dp.Key),
Count = dp.Value.Item2
});
context.SaveChanges();
}
_workerWorkshops = null;
}
}
}