using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.IO; using System.Threading; using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { [Route("api/well/{idWell}/drillingProgram")] [ApiController] [Authorize] public class DrillingProgramController : ControllerBase { private readonly IDrillingProgramService drillingProgramService; private readonly IFileService fileService; public DrillingProgramController(IDrillingProgramService drillingProgramService, IFileService fileService) { this.drillingProgramService = drillingProgramService; this.fileService = fileService; } /// /// Создает программу бурения /// /// id скважины /// Токен отмены задачи /// Возвращает файл программы бурения [HttpGet] [ProducesResponseType(typeof(FileResult), (int)System.Net.HttpStatusCode.OK)] public async Task GetAsync(int idWell, CancellationToken token = default) { var fileInfo = await drillingProgramService.GetAsync(idWell, token) .ConfigureAwait(false); if (fileInfo is null) return NoContent(); var relativePath = fileService.GetUrl(fileInfo); // Чтоб не смешивать этот временный функционал с основным публикация на гугл диск вся вынесена сюда // и выполняется уже после всех необходимых действий по созданию файла программы бурения. var fileWebLink = await fileService.GetProgramWebUrlAsync(idWell, token); if (string.IsNullOrEmpty(fileWebLink)) { fileWebLink = await fileService.PublishFileToCloudAsync(relativePath, fileInfo.Name, token); await fileService.SaveWeblinkToFileInfo(fileInfo.Id, fileWebLink, token); } return PhysicalFile(Path.GetFullPath(relativePath), "application/octet-stream", fileInfo.Name); } /// /// Возвращает ссылку на файл программы бурения в облаке /// /// id скважины /// Токен отмены задачи /// Возвращает ссылку на файл программы бурения в облаке [HttpGet("webUrl")] [ProducesResponseType(typeof(string), (int)System.Net.HttpStatusCode.OK)] public async Task GetFileWebLinkAsync(int idWell, CancellationToken token = default) { var fileWebLink = await fileService.GetProgramWebUrlAsync(idWell, token); return Ok(fileWebLink); } } }