CS2-106: Added .GetFileWebLinkAsync() in DrillingProgramController.cs

This commit is contained in:
cult 2021-10-28 16:59:00 +05:00
parent c3be8bceea
commit e8ad17bc1d
3 changed files with 32 additions and 17 deletions

View File

@ -11,7 +11,7 @@ namespace AsbCloudApp.Services
{ {
string RootPath { get; } string RootPath { get; }
Task<string> GetProgramWebUrlAsync(int idFileInfo, Task<string> GetProgramWebUrlAsync(int idWell,
CancellationToken token = default); CancellationToken token = default);
Task<string> PublishFileToCloudAsync(string filePath, string originalName, Task<string> PublishFileToCloudAsync(string filePath, string originalName,
CancellationToken token = default); CancellationToken token = default);

View File

@ -32,10 +32,11 @@ namespace AsbCloudInfrastructure.Services
this.googleDriveService = googleDriveService; this.googleDriveService = googleDriveService;
} }
public async Task<string> GetProgramWebUrlAsync(int idFileInfo, public async Task<string> GetProgramWebUrlAsync(int idWell,
CancellationToken token = default) 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); .ConfigureAwait(false);
return fileInfo?.WebStorageUrl; return fileInfo?.WebStorageUrl;

View File

@ -1,5 +1,4 @@
using System; using AsbCloudApp.Services;
using AsbCloudApp.Services;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.IO; using System.IO;
@ -27,29 +26,44 @@ namespace AsbCloudWebApi.Controllers
/// </summary> /// </summary>
/// <param name="idWell"> id скважины </param> /// <param name="idWell"> id скважины </param>
/// <param name="token"> Токен отмены задачи </param> /// <param name="token"> Токен отмены задачи </param>
/// <returns> Возвращает ссылку на файл в облаке </returns> /// <returns> Возвращает файл программы бурения </returns>
[HttpGet] [HttpGet]
[ProducesResponseType(typeof(string), (int)System.Net.HttpStatusCode.OK)] [ProducesResponseType(typeof(FileResult), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetAsync(int idWell, CancellationToken token = default) public async Task<IActionResult> GetAsync(int idWell, CancellationToken token = default)
{ {
var fileInfo = await drillingProgramService.GetAsync(idWell, token) var fileInfo = await drillingProgramService.GetAsync(idWell, token)
.ConfigureAwait(false); .ConfigureAwait(false);
if (fileInfo is null) if (fileInfo is null)
return NoContent(); return NoContent();
// Чтоб не смешивать этот временный функционал с основным публикация на гугл диск вся вынесена сюда
// и выполняется уже после всех необходимых действий по созданию файла программы бурения.
var fileWebLink = await fileService.GetProgramWebUrlAsync(fileInfo.Id);
if (!string.IsNullOrEmpty(fileWebLink))
return Ok(fileWebLink);
var relativePath = fileService.GetUrl(fileInfo); 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);
}
/// <summary>
/// Возвращает ссылку на файл программы бурения в облаке
/// </summary>
/// <param name="idWell"> id скважины </param>
/// <param name="token"> Токен отмены задачи </param>
/// <returns> Возвращает ссылку на файл программы бурения в облаке </returns>
[HttpGet("webUrl")]
[ProducesResponseType(typeof(string), (int)System.Net.HttpStatusCode.OK)]
public async Task<IActionResult> GetFileWebLinkAsync(int idWell, CancellationToken token = default)
{
var fileWebLink = await fileService.GetProgramWebUrlAsync(idWell, token);
return Ok(fileWebLink); return Ok(fileWebLink);
//return PhysicalFile(Path.GetFullPath(relativePath), "application/octet-stream", fileInfo.Name);
} }
} }
} }