using AsbCloudApp.Data; using AsbCloudApp.Requests; using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers; /// <summary> /// Справочник бурильщиков /// </summary> [Route("api/driller")] [ApiController] [Authorize] public class DrillerController : CrudController<DrillerDto, ICrudRepository<DrillerDto>> { private IScheduleRepository scheduleRepository; public DrillerController(ICrudRepository<DrillerDto> service, IScheduleRepository scheduleRepository) : base(service) { this.scheduleRepository = scheduleRepository; } /// <summary> /// Получить список бурильщиков по ключам скважин /// </summary> /// <param name="idsWells">массив ключей скважин</param> /// <param name="token">token</param> /// <returns>все записи</returns> [HttpGet("/api/drillers")] [Permission] [ProducesResponseType(typeof(IEnumerable<DrillerDto>), StatusCodes.Status200OK)] public async Task<IActionResult> GetAsync([FromQuery] IEnumerable<int> idsWells, CancellationToken token) { var request = new GetStatRequest() { IdsWells = idsWells, }; var schedulePage = await scheduleRepository.GetPageAsync(request, token); var drillers = schedulePage .Select(s => s.Driller) .Where(d => d is not null) .GroupBy(d => d!.Id) .Select(group => group.First()) .OrderBy(d => d!.Surname); return Ok(drillers); } }