Coursach/Course/DatabaseImplement/Models/Workshop.cs
2024-05-27 21:03:42 +04:00

122 lines
3.6 KiB
C#

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 DateTime DateCreate { get; set; } = DateTime.Now;
[Required]
public int UserId { get; set; }
public int? ProductionId { get; set; }
public virtual Production? Production { get; set; }
private Dictionary<int, IWorkerModel>? _workerWorkshops = null;
[NotMapped]
public Dictionary<int, IWorkerModel> WorkerWorkshops
{
get
{
if(_workerWorkshops == null)
{
_workerWorkshops = Workers.ToDictionary(recDP => recDP.WorkerId, recDp => (recDp.Worker as IWorkerModel));
}
return _workerWorkshops;
}
}
[ForeignKey("WorkshopId")]
public List<WorkerWorkshop> Workers { get; set; } = new();
public static Workshop? Create(FactoryGoWorkDatabase context, WorkshopBindingModel model)
{
if(model == null)
{
return null;
}
return new Workshop
{
Id = model.Id,
Title = model.Title,
Address = model.Address,
Director = model.Director,
ProductionId = model.ProductionId,
Production = model.ProductionId.HasValue ? context.Productions.FirstOrDefault(x => x.Id == model.ProductionId) : null,
UserId = model.UserId,
Workers = model.WorkshopWorker.Select(x => new WorkerWorkshop
{
Worker = context.Workers.First(y => y.Id == x.Key),
}).ToList(),
};
}
public static Workshop Create(WorkshopViewModel model)
{
return new Workshop
{
Id = model.Id,
Title = model.Title,
Address = model.Address,
Director = model.Director,
ProductionId = model.ProductionId,
UserId = model.UserId,
};
}
public void Update(WorkshopBindingModel model)
{
if (model == null)
return;
Title = model.Title;
Address = model.Address;
Director = model.Director;
ProductionId = model.ProductionId == null ? ProductionId : model.ProductionId;
}
public WorkshopViewModel GetViewModel => new()
{
Id = Id,
Title = Title,
Address = Address,
Director = Director,
ProductionId = ProductionId,
ProductionName = Production == null ? null : Production.Name,
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)
{
if (model.WorkshopWorker.ContainsKey(upWorker.WorkerId))
{
model.WorkshopWorker.Remove(upWorker.WorkerId);
}
}
context.SaveChanges();
}
var workshop = context.Workshops.FirstOrDefault(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)
});
context.SaveChanges();
}
_workerWorkshops = null;
}
}
}