using Application.Domain.Entities; using Infrastructure.Application.Services.Settings; using Infrastructure.Data; using Infrastructure.Extensions; using IoTCenter.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; using Microsoft.Extensions.Logging; using System; using System.ComponentModel.DataAnnotations; using System.Linq; namespace IoTCenter.Api.Controllers { [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]/[action]")] [ApiController] public class OrganController : ControllerBase { private readonly ILogger _logger; private readonly ISettingService _settingService; private readonly IRepository _organRepo; private readonly IRepository _productRepo; private readonly IRepository _organNodeRepo; private readonly IRepository _deviceRepo; private readonly IHubContext _hub; public OrganController( ILogger logger, ISettingService settingService, IRepository organRepo, IRepository productRepo, IRepository organNodeRepo, IRepository deviceRepo, IHubContext hub) { this._logger = logger; this._settingService = settingService; this._organRepo = organRepo; this._productRepo = productRepo; this._organNodeRepo = organNodeRepo; this._deviceRepo = deviceRepo; this._hub = hub; } [HttpPost] public ActionResult GetOrgans() { try { var model = this._organRepo.ReadOnlyTable() .OrderBy(o => o.Name) .ToList(); return Ok(model); } catch (Exception ex) { ex.PrintStack(); return Problem(ex.Message); } } [HttpPost] public ActionResult GetProducts([Required(ErrorMessage = nameof(RequiredAttribute))] string number) { try { var organ = this._organRepo.ReadOnlyTable().FirstOrDefault(o => o.Number == number); var model = new { organ.Name, organ.Number, organ.Image, Products = this._productRepo.ReadOnlyTable().Select(o => new { o.Id, o.Name, o.Number, o.Image, o.DisplayOrder, Count = _deviceRepo.ReadOnlyTable() .Count(d => d.ProductId == o.Id) }) }; return Ok(model); } catch (Exception ex) { ex.PrintStack(); return Problem(ex.Message); } } } }