From 5d18889742c865caa749e0e8db860e25eaaa2285 Mon Sep 17 00:00:00 2001 From: vitalii-bezuhlyi Date: Fri, 15 Mar 2024 16:01:33 +0200 Subject: [PATCH] Added retrieve file action --- Apps.Lionbridge/Actions/RequestActions.cs | 4 +- Apps.Lionbridge/Actions/SourceFileActions.cs | 39 +++++++++++++++++++ Apps.Lionbridge/Apps.Lionbridge.csproj | 4 ++ Apps.Lionbridge/Constants/ApiEndpoints.cs | 1 + Apps.Lionbridge/LionbridgeInvocable.cs | 9 +++++ Apps.Lionbridge/Models/Dtos/RequestDto.cs | 12 ++++++ .../Requests/File/AddSourceFileRequest.cs | 6 --- .../SourceFile/RetrieveFileResponse.cs | 8 ++++ 8 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 Apps.Lionbridge/Actions/SourceFileActions.cs create mode 100644 Apps.Lionbridge/Models/Responses/SourceFile/RetrieveFileResponse.cs diff --git a/Apps.Lionbridge/Actions/RequestActions.cs b/Apps.Lionbridge/Actions/RequestActions.cs index 6ed2521..0ba8256 100644 --- a/Apps.Lionbridge/Actions/RequestActions.cs +++ b/Apps.Lionbridge/Actions/RequestActions.cs @@ -96,9 +96,7 @@ public async Task CreateFileRequest([ActionParameter] GetJobRequest [Action("Get request", Description = "Get a translation request.")] public async Task GetRequest([ActionParameter] GetRequest request) { - var apiRequest = new LionbridgeRequest($"{ApiEndpoints.Jobs}/{request.JobId}" + - $"{ApiEndpoints.Requests}/{request.RequestId}"); - return await Client.ExecuteWithErrorHandling(apiRequest); + return await GetRequest(request.JobId, request.RequestId); } [Action("Delete request", Description = "Delete a translation request.")] diff --git a/Apps.Lionbridge/Actions/SourceFileActions.cs b/Apps.Lionbridge/Actions/SourceFileActions.cs new file mode 100644 index 0000000..1d69ba3 --- /dev/null +++ b/Apps.Lionbridge/Actions/SourceFileActions.cs @@ -0,0 +1,39 @@ +using Apps.Lionbridge.Api; +using Apps.Lionbridge.Constants; +using Apps.Lionbridge.Models.Requests.Request; +using Apps.Lionbridge.Models.Responses.SourceFile; +using Blackbird.Applications.Sdk.Common; +using Blackbird.Applications.Sdk.Common.Actions; +using Blackbird.Applications.Sdk.Common.Invocation; +using Blackbird.Applications.SDK.Extensions.FileManagement.Interfaces; + +namespace Apps.Lionbridge.Actions; + +[ActionList] +public class SourceFileActions(InvocationContext invocationContext, IFileManagementClient fileManagementClient) + : LionbridgeInvocable(invocationContext) +{ + [Action("Retrieve file", Description = "Retrieve a file from specific request")] + public async Task RetrieveFile([ActionParameter] GetRequest request) + { + string endpoint = $"{ApiEndpoints.Jobs}/{request.JobId}{ApiEndpoints.Requests}/{request.RequestId}{ApiEndpoints.RetrieveFile}"; + var apiRequest = new LionbridgeRequest(endpoint); + + var response = await Client.ExecuteWithErrorHandling(apiRequest); + var bytes = response.RawBytes; + + if(bytes == null || bytes.Length == 0) + { + throw new Exception("Uploaded file is empty"); + } + + var requestModel = await GetRequest(request.JobId, request.RequestId); + + var memoryStream = new MemoryStream(bytes); + string fileName = requestModel.FileName; + string contentType = response.ContentType ?? MimeTypes.GetMimeType(fileName); + var fileReference = await fileManagementClient.UploadAsync(memoryStream, contentType, fileName); + + return new RetrieveFileResponse { File = fileReference }; + } +} \ No newline at end of file diff --git a/Apps.Lionbridge/Apps.Lionbridge.csproj b/Apps.Lionbridge/Apps.Lionbridge.csproj index 345119d..052717c 100644 --- a/Apps.Lionbridge/Apps.Lionbridge.csproj +++ b/Apps.Lionbridge/Apps.Lionbridge.csproj @@ -11,6 +11,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/Apps.Lionbridge/Constants/ApiEndpoints.cs b/Apps.Lionbridge/Constants/ApiEndpoints.cs index 09b38e8..e809f51 100644 --- a/Apps.Lionbridge/Constants/ApiEndpoints.cs +++ b/Apps.Lionbridge/Constants/ApiEndpoints.cs @@ -12,4 +12,5 @@ public static class ApiEndpoints public const string UpdateFileContent = "/updatefilecontent"; public const string SourceContent = "/sourcecontent"; public const string SourceFiles = "/sourcefiles"; + public const string RetrieveFile = "/retrievefile"; } \ No newline at end of file diff --git a/Apps.Lionbridge/LionbridgeInvocable.cs b/Apps.Lionbridge/LionbridgeInvocable.cs index eae08cc..3715c54 100644 --- a/Apps.Lionbridge/LionbridgeInvocable.cs +++ b/Apps.Lionbridge/LionbridgeInvocable.cs @@ -1,4 +1,6 @@ using Apps.Lionbridge.Api; +using Apps.Lionbridge.Constants; +using Apps.Lionbridge.Models.Dtos; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Invocation; @@ -12,4 +14,11 @@ protected LionbridgeInvocable(InvocationContext invocationContext) : base(invoca { Client = new(InvocationContext.AuthenticationCredentialsProviders); } + + protected async Task GetRequest(string jobId, string requestId) + { + var apiRequest = new LionbridgeRequest($"{ApiEndpoints.Jobs}/{jobId}" + + $"{ApiEndpoints.Requests}/{requestId}"); + return await Client.ExecuteWithErrorHandling(apiRequest); + } } \ No newline at end of file diff --git a/Apps.Lionbridge/Models/Dtos/RequestDto.cs b/Apps.Lionbridge/Models/Dtos/RequestDto.cs index 6d1b1cc..32225f2 100644 --- a/Apps.Lionbridge/Models/Dtos/RequestDto.cs +++ b/Apps.Lionbridge/Models/Dtos/RequestDto.cs @@ -36,4 +36,16 @@ public class RequestDto [Display("Source native language")] public string SourceNativeLanguageCode { get; set; } + + [Display("File name")] + public string FileName { get; set; } + + [Display("File type")] + public string FileType { get; set; } + + [Display("File ID")] + public string FileId { get; set; } + + [Display("Source content ID")] + public string SourceContentId { get; set; } } \ No newline at end of file diff --git a/Apps.Lionbridge/Models/Requests/File/AddSourceFileRequest.cs b/Apps.Lionbridge/Models/Requests/File/AddSourceFileRequest.cs index 6daa751..f830586 100644 --- a/Apps.Lionbridge/Models/Requests/File/AddSourceFileRequest.cs +++ b/Apps.Lionbridge/Models/Requests/File/AddSourceFileRequest.cs @@ -13,10 +13,4 @@ public class AddSourceFileRequest : AddRequestBaseModel [Display("Target native language")] public string TargetNativeLanguage { get; set; } - - [Display("Fields keys", Description = "Fields keys to be added to the request.")] - public IEnumerable FieldsKeys { get; set; } - - [Display("Fields values", Description = "Fields values to be added to the request.")] - public IEnumerable FieldsValues { get; set; } } \ No newline at end of file diff --git a/Apps.Lionbridge/Models/Responses/SourceFile/RetrieveFileResponse.cs b/Apps.Lionbridge/Models/Responses/SourceFile/RetrieveFileResponse.cs new file mode 100644 index 0000000..e93bf0f --- /dev/null +++ b/Apps.Lionbridge/Models/Responses/SourceFile/RetrieveFileResponse.cs @@ -0,0 +1,8 @@ +using Blackbird.Applications.Sdk.Common.Files; + +namespace Apps.Lionbridge.Models.Responses.SourceFile; + +public class RetrieveFileResponse +{ + public FileReference File { get; set; } +} \ No newline at end of file