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.Unit; namespace PARR.API.Controllers.V1 { [Authorize(Roles = ParrRoles.Administrator.Role)] public class UnitController : BaseApiController { private readonly IMapper mapper; private readonly IUnitService unitService; public UnitController( IMapper mapper, IUnitService unitService ) { this.mapper = mapper; this.unitService = unitService; } /// /// Получить список ЭК постранично /// /// /// [HttpGet(ApiRoutes.Unit.GetAll)] public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] HostQuery request) { var paginationFilter = mapper.Map(paginationQuery); 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) .Include(p => p.ParentUnits).ThenInclude(t=>t.ParentUnit) .Include(c => c.ChildUnits).ThenInclude(t=>t.ChildUnit); 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); var unitResponse = mapper.Map>(units); var paginationResponse = new PagedResponse(unitResponse, true).GetPaginatedProps(paginationFilter, query); return Ok(paginationResponse); } /// /// Получить ЭК по id /// /// /// [HttpGet(ApiRoutes.Unit.Get)] public async Task GetById([FromRoute] Guid id) { var unit = await unitService.Get() .Include(t => t.UnitValues) .ThenInclude(uv => uv.Value) .Include(tf => tf.UnitValues) .ThenInclude(uv => uv.Field) .Include(p => p.ParentUnits).ThenInclude(t => t.ParentUnit) .Include(c => c.ChildUnits).ThenInclude(t => t.ChildUnit) .FirstOrDefaultAsync(t => t.Id == id); if (unit == null) return NotFound(); //var response = mapper.Map(unit); //return Ok(new Response(response, true)); var response = mapper.Map(unit); return Ok(new Response(response, true)); } } }