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.DAL.Models.Unit; using PARR.DAL.Services.Interfaces.Unit; using PARR.Domain.Common.Pagination; using PARR.Domain.Common.Roles; namespace PARR.API.Controllers.V1 { /// /// Управление значениями атрибутов /// [Authorize(Roles = ParrRoles.Administrator.Role)] public class UnitFieldValueController : BaseApiController { private readonly IMapper mapper; private readonly IUnitFieldValueService unitFieldValueService; private readonly IUnitInValueService unitInValueService; public UnitFieldValueController( IMapper mapper, IUnitFieldValueService unitFieldValueService, IUnitInValueService unitInValueService ) { this.mapper = mapper; this.unitFieldValueService = unitFieldValueService; this.unitInValueService = unitInValueService; } /// /// Список доступных значений аттрибутов /// /// /// [HttpGet(ApiRoutes.UnitField.GetAllValues)] public async Task GetAll([FromRoute] Guid fieldId, [FromQuery] PaginationQuery paginationQuery, [FromQuery] UnitFieldValueQuery filter) { var paginationFilter = mapper.Map(paginationQuery); //IQueryable query = unitFieldValueService.Get() // .Where(t => t.UnitInValues.Any(t => t.FieldId == fieldId)) // .OrderBy(t => t.Value); IQueryable query = unitInValueService.Get() .Where(t => t.FieldId == fieldId) .Select(t => t.Value) .Distinct() .OrderBy(t => t!.Value); if (!string.IsNullOrEmpty(filter.Mask)) query = query.Where(t => EF.Functions.Like(t.Value!.ToLower(), SqlHelpers.RegexToLike(filter.Mask))); var fieldValuesQuery = unitFieldValueService.GetPage(query, paginationFilter); var fieldValues = await fieldValuesQuery.ToListAsync(); if (!fieldValues.Any()) return NoContent(); var fielsValuesResponse = mapper.Map>(fieldValues); var paginationResponse = new PagedResponse(fielsValuesResponse, true).GetPaginatedProps(paginationFilter, query); return Ok(paginationResponse); } } }