using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests.Queries; using PARR.API.Contracts.V1.Responses; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.API.Extensions; using PARR.BLL.Helpers; using PARR.Constants; using PARR.DAL.DomainModels; using PARR.DAL.Models.Unit; using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.Unit; namespace PARR.API.Controllers.V1 { [Authorize(Roles = ParrRoles.Administrator.Role)] public class HostController : BaseApiController { private readonly IMapper mapper; private readonly IHostService hostService; private readonly IUnitService unitService; public HostController( IMapper mapper, IHostService hostService, IUnitService unitService ) { this.mapper = mapper; this.hostService = hostService; this.unitService = unitService; } /// /// Получить список хостов постранично /// /// /// [HttpGet(ApiRoutes.Host.GetAll)] public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] HostQuery request) { var paginationFilter = mapper.Map(paginationQuery); //IQueryable query = hostService.Get() // .Include(t=>t.WorkGroup).ThenInclude(t=>t!.ResponseArea) // .Include(s => s.EkStatus) // .Include(s => s.ResponseArea) // .Include(t => t.ApplicationsInHosts).ThenInclude(t => t.Application).ThenInclude(t => t!.ApplicationType) // .OrderBy(t => t.Ek); //if (!string.IsNullOrEmpty(request.Mask)) // query = query.Where(t => EF.Functions.Like(t.Ek.ToLower(), SqlHelpers.RegexToLike(request.Mask))); //var hosts = await hostService.GetPage(query, paginationFilter).ToListAsync(); //if (!hosts.Any()) // return NoContent(); //var hostResponse = mapper.Map>(hosts); //var paginationResponse = new PagedResponse(hostResponse, true).GetPaginatedProps(paginationFilter, query); IQueryable query = unitService.Get() .OrderBy(t => t.Name); if (!string.IsNullOrEmpty(request.Mask)) query = query.Where(t => EF.Functions.Like(t.Name.ToLower(), SqlHelpers.RegexToLike(request.Mask))); if (request.IsFull) query = query .Include(t => t.UnitValues) .ThenInclude(uv => uv.Value) .Include(tf => tf.UnitValues) .ThenInclude(uv => uv.Field); var units = await unitService.GetPage(query, paginationFilter).ToListAsync(); if (!units.Any()) return NoContent(); var unitResponse = mapper.Map>(units); var paginationResponse = new PagedResponse(unitResponse, true).GetPaginatedProps(paginationFilter, query); return Ok(paginationResponse); } /// /// Получить хост по id /// /// /// [HttpGet(ApiRoutes.Host.Get)] public async Task GetById([FromRoute] Guid id) { //var host = await hostService.Get() // .Include(t => t.WorkGroup).ThenInclude(t => t!.ResponseArea) // .Include(s => s.EkStatus) // .Include(s => s.ResponseArea) // .Include(t => t.ApplicationsInHosts).ThenInclude(t => t.Application).ThenInclude(t => t!.ApplicationType) // .FirstOrDefaultAsync(t => t.Id == id); //if (host == null) // return NotFound(); //var response = mapper.Map(host); var unit = await unitService.Get() .Include(t => t.UnitValues) .ThenInclude(uv => uv.Value) .Include(tf => tf.UnitValues) .ThenInclude(uv => uv.Field) .FirstOrDefaultAsync(t => t.Id == id); if (unit == null) return NotFound(); var response = mapper.Map(unit); return Ok(new Response(response, true)); } } }