diff --git a/AsbCloudApp/Services/IFileService.cs b/AsbCloudApp/Services/IFileService.cs index c7014309..714438b4 100644 --- a/AsbCloudApp/Services/IFileService.cs +++ b/AsbCloudApp/Services/IFileService.cs @@ -11,7 +11,7 @@ namespace AsbCloudApp.Services { string RootPath { get; } - Task GetProgramWebUrlAsync(int idFileInfo, + Task GetProgramWebUrlAsync(int idWell, CancellationToken token = default); Task PublishFileToCloudAsync(string filePath, string originalName, CancellationToken token = default); diff --git a/AsbCloudInfrastructure/Services/FileService.cs b/AsbCloudInfrastructure/Services/FileService.cs index 20446b84..8bf87821 100644 --- a/AsbCloudInfrastructure/Services/FileService.cs +++ b/AsbCloudInfrastructure/Services/FileService.cs @@ -32,10 +32,11 @@ namespace AsbCloudInfrastructure.Services this.googleDriveService = googleDriveService; } - public async Task GetProgramWebUrlAsync(int idFileInfo, + public async Task GetProgramWebUrlAsync(int idWell, CancellationToken token = default) { - var fileInfo = await db.Files.FirstOrDefaultAsync(f => f.Id == idFileInfo, token) + var fileInfo = await db.Files.FirstOrDefaultAsync(f => f.IdWell == idWell && + f.IdCategory == 14, token) .ConfigureAwait(false); return fileInfo?.WebStorageUrl; diff --git a/AsbCloudWebApi/Controllers/DrillingProgramController.cs b/AsbCloudWebApi/Controllers/DrillingProgramController.cs index 69f85b8f..436d9ab1 100644 --- a/AsbCloudWebApi/Controllers/DrillingProgramController.cs +++ b/AsbCloudWebApi/Controllers/DrillingProgramController.cs @@ -1,5 +1,4 @@ -using System; -using AsbCloudApp.Services; +using AsbCloudApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.IO; @@ -27,29 +26,44 @@ namespace AsbCloudWebApi.Controllers /// /// id скважины /// Токен отмены задачи - /// Возвращает ссылку на файл в облаке + /// Возвращает файл программы бурения [HttpGet] - [ProducesResponseType(typeof(string), (int)System.Net.HttpStatusCode.OK)] + [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 fileWebLink = await fileService.GetProgramWebUrlAsync(fileInfo.Id); - - if (!string.IsNullOrEmpty(fileWebLink)) - return Ok(fileWebLink); var relativePath = fileService.GetUrl(fileInfo); - fileWebLink = await fileService.PublishFileToCloudAsync(relativePath, - fileInfo.Name, token); - await fileService.SaveWeblinkToFileInfo(fileInfo.Id, fileWebLink, token); + // Чтоб не смешивать этот временный функционал с основным публикация на гугл диск вся вынесена сюда + // и выполняется уже после всех необходимых действий по созданию файла программы бурения. + 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); - //return PhysicalFile(Path.GetFullPath(relativePath), "application/octet-stream", fileInfo.Name); } } }