using IoTCenter.Application.Domain; using Infrastructure.Application; using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Web.Mvc; using IoT.Shared.Areas.Admin.Controlls; using IoTCenter.Application.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System.Linq; namespace IoTCenter.Areas.Admin.Controllers { [Authorize] [Area(nameof(Admin))] public class NodeCategoryController : CrudController, EditNodeCategoryModel, EditNodeCategoryModel> { private readonly AjaxController _ajax; public NodeCategoryController(IRepository repo, AjaxController ajax) : base(repo) { this._ajax = ajax; } public override IQueryable Include(IQueryable query) { return query.Include(o => o.CategoryNodes).ThenInclude(o => o.Node); } public override void ToDisplayModel(NodeCategory entity, EditNodeCategoryModel model) { model.Nodes = entity.CategoryNodes.Select(o => o.NodeId).ToList(); entity.CategoryNodes.ForEach(o => ViewData.Add(o.NodeId, o.Node.Name)); } public override void ToEditModel(NodeCategory entity, EditNodeCategoryModel model) { if (entity != null) { model.Nodes = entity.CategoryNodes.Select(o => o.NodeId).ToList(); } this.ViewData.MultiSelectList(o => model.Nodes, () => this._ajax.GetNodeMultiSelectList(model.Nodes)); } public override void ToEntity(EditNodeCategoryModel model, NodeCategory entity) { foreach (var id in entity.CategoryNodes.Select(o => o.NodeId).ToList()) { if (!model.Nodes.Any(o => o == id)) { entity.CategoryNodes.RemoveAll(o => o.NodeId == id); } } foreach (var id in model.Nodes) { if (!entity.CategoryNodes.Any(o => o.NodeId == id)) { entity.CategoryNodes.Add(new NodeCategoryNode { NodeId = id }); } } } } }