using Application.Domain.Entities; using Application.Models; using Infrastructure.Application; using Infrastructure.Data; using Infrastructure.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using System; using System.Linq; namespace IoT.Shared.Areas.Admin.Controlls { [Authorize] [Area(nameof(Admin))] public class IoTTiggerController : SharedController, EditIoTTiggerModel, EditIoTTiggerModel> { private readonly IRepository _nodeRepo; private readonly IRepository _deviceRepo; public IRepository _dataRepo { get; } private readonly AjaxController _ajax; public IoTTiggerController(IRepository nodeRepo, IRepository repo, IRepository deviceRepo, IRepository dataRepo, AjaxController ajax, IServiceProvider sp) : base(repo, sp) { this._nodeRepo = nodeRepo; this._deviceRepo = deviceRepo; this._dataRepo = dataRepo; this._ajax = ajax; } public override IQueryable Include(IQueryable query) { return query.Include(o => o.Node).Include(o => o.Data).ThenInclude(o => o.Device); } public override IQueryable Query(PagedListModel model, IQueryable query) { return query.Where(o => o.NodeId != null); } public override void ToEditModel(IoTTigger entity, EditIoTTiggerModel model) { this.ToDisplayModel(entity, model); ViewData.SelectList(o => model.NodeId, () => this._ajax.GetNodeSelectList(model.NodeId)); ViewData.SelectList(o => model.DeviceId, () => this._ajax.GetDeviceSelectList(model.NodeId.Value), model.NodeId.HasValue); ViewData.SelectList(o => model.DataId, () => this._ajax.GetDataSelectList(model.DeviceId.Value), model.DeviceId.HasValue); } public override void ToDisplayModel(IoTTigger entity, EditIoTTiggerModel model) { if (entity != null) { model.DeviceId = entity.Data.DeviceId; ViewData.Add(model.NodeId, entity.Node.Name); ViewData.Add(model.DataId, entity.Data.Name); ViewData.Add(model.DeviceId, entity.Data.Device.DisplayName); } } public override string GetNodeNumber(EditIoTTiggerModel model) { return this._nodeRepo.ReadOnlyTable().Where(o => o.Id == model.NodeId).Select(o => o.Number).FirstOrDefault(); } } }