using AsbCloudApp.Data.ProcessMaps.Report; using AsbCloudApp.Requests; using AsbCloudApp.Services.ProcessMaps.WellDrilling; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers.ProcessMaps; /// <summary> /// РТК отчет по бурению /// </summary> [ApiController] [Route("api/well/{idWell:int}/[controller]")] [Authorize] public class ProcessMapReportDrillingController: ControllerBase { private readonly IProcessMapReportDrillingService processMapReportDrillingService; private readonly IProcessMapReportDrillingExportService processMapReportDrillingExportService; public ProcessMapReportDrillingController( IProcessMapReportDrillingExportService processMapReportDrillingExportService, IProcessMapReportDrillingService processMapReportDrillingService) { this.processMapReportDrillingExportService = processMapReportDrillingExportService; this.processMapReportDrillingService = processMapReportDrillingService; } /// <summary> /// Получение данных для отчета РТК бурение /// </summary> /// <param name="idWell">Id</param> /// <param name="request">параметры запроса</param> /// <param name="cancellationToken"></param> /// <returns></returns> [HttpGet("report")] [ProducesResponseType(typeof(IEnumerable<ProcessMapReportDataSaubStatDto>), StatusCodes.Status200OK)] public async Task<IActionResult> GetReportAsync(int idWell, [FromQuery] DataSaubStatRequest request, CancellationToken cancellationToken) { var report = await processMapReportDrillingService.GetAsync(idWell, request, cancellationToken); return Ok(report); } /// <summary> /// Экспорт отчета РТК бурение /// </summary> /// <param name="idWell">Id скважины</param> /// <param name="request">Параметры запроса</param> /// <param name="cancellationToken"></param> /// <returns></returns> [HttpGet("report/export")] [ProducesResponseType(typeof(PhysicalFileResult), StatusCodes.Status200OK, "application/octet-stream")] [ProducesResponseType(StatusCodes.Status204NoContent)] public async Task<IActionResult> ExportReportAsync(int idWell, [FromQuery] DataSaubStatRequest request, CancellationToken cancellationToken) { var report = await processMapReportDrillingExportService.ExportAsync(idWell, request, cancellationToken); if (report is null) return NoContent(); return File(report.Value.File, "application/octet-stream", report.Value.Name); } }