Skip to content

Commit

Permalink
Performance boost
Browse files Browse the repository at this point in the history
  • Loading branch information
mathijs-bb committed May 16, 2024
1 parent 3ba0f7d commit 8c6f295
Show file tree
Hide file tree
Showing 15 changed files with 76 additions and 87 deletions.
10 changes: 5 additions & 5 deletions Apps.BWX/Actions/GlossaryActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public GlossaryActions(InvocationContext invocationContext, IFileManagementClien
public async Task<GlossaryDto> CreateGlossary(
[ActionParameter] CreateGlossaryRequest input)
{
var request = new BWXRequest($"/api/v3/glossary", Method.Post, Creds);
var request = new RestRequest($"/api/v3/glossary", Method.Post);
request.AddJsonBody(new
{
name = input.Name,
Expand All @@ -49,10 +49,10 @@ public async Task<GlossaryDto> CreateGlossary(
[Action("Export glossary", Description = "Export glossary")]
public async Task<ExportGlossaryResponse> ExportGlossary([ActionParameter] ExportGlossaryRequest input)
{
var initExportRequest = new BWXRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx", Method.Get, Creds);
var initExportRequest = new RestRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx", Method.Get);
var initExportResult = await Client.ExecuteWithErrorHandling<ExportInitDto>(initExportRequest);

var exportStatusRequest = new BWXRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx/{initExportResult.RequestUuid}/status", Method.Get, Creds);
var exportStatusRequest = new RestRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx/{initExportResult.RequestUuid}/status", Method.Get);
var exportStatusResult = await Client.ExecuteWithErrorHandling<ExportStatusDto>(exportStatusRequest);
while(exportStatusResult.Status != "COMPLETED")
{
Expand All @@ -76,15 +76,15 @@ public async Task ImportGlossary([ActionParameter] ImportGlossaryRequest input)
var fileStream = await _fileManagementClient.DownloadAsync(input.File);
var fileTBXV2Stream = await fileStream.ConvertFromTbxV3ToV2();

var initImportRequest = new BWXRequest($"/api/v3/glossary/{input.GlossaryId}/import-tbx", Method.Post, Creds);
var initImportRequest = new RestRequest($"/api/v3/glossary/{input.GlossaryId}/import-tbx", Method.Post);
initImportRequest.AddFile("tbxFile", await fileTBXV2Stream.GetByteData(), input.File.Name);

await Client.ExecuteWithErrorHandling(initImportRequest);
}

private async Task<GlossaryDto> GetGlossary([ActionParameter] ExportGlossaryRequest input)
{
var request = new BWXRequest($"/api/v3/glossary/{input.GlossaryId}", Method.Get, Creds);
var request = new RestRequest($"/api/v3/glossary/{input.GlossaryId}", Method.Get);
return await Client.ExecuteWithErrorHandling<GlossaryDto>(request);
}
}
16 changes: 8 additions & 8 deletions Apps.BWX/Actions/ProjectActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public ProjectActions(InvocationContext invocationContext, IFileManagementClient
[Action("Search projects", Description = "Search projects")]
public async Task<List<ProjectDto>> SearchProjects([ActionParameter] SearchProjectRequest searchProjects)
{
var request = new BWXRequest($"/api/v3/project", Method.Get, Creds);
var request = new RestRequest($"/api/v3/project", Method.Get);
request.AddQueryParameter("name", searchProjects?.ProjectName);
request.AddQueryParameter("organizationUuid", searchProjects?.Organization);
request.AddQueryParameter("orgUnitUuid", searchProjects?.Client);
Expand All @@ -59,14 +59,14 @@ public async Task<List<ProjectDto>> SearchProjects([ActionParameter] SearchProje
[Action("Get project", Description = "Get project")]
public async Task<ProjectDto> GetProject([ActionParameter] GetProjectRequest input)
{
var request = new BWXRequest($"/api/v3/project/{input.ProjectId}", Method.Get, Creds);
var request = new RestRequest($"/api/v3/project/{input.ProjectId}", Method.Get);
return await Client.ExecuteWithErrorHandling<ProjectDto>(request);
}

[Action("Create project", Description = "Create project")]
public async Task<ProjectDto> CreateProject([ActionParameter] CreateProjectRequest input)
{
var request = new BWXRequest($"/api/v3/project?inferDefaultSettings={input?.InferDefaultSettings?.ToString().ToLower() ?? "true"}", Method.Post, Creds);
var request = new RestRequest($"/api/v3/project?inferDefaultSettings={input?.InferDefaultSettings?.ToString().ToLower() ?? "true"}", Method.Post);
request.AddJsonBody(new
{
reference = input.Reference,
Expand All @@ -84,7 +84,7 @@ public async Task<WorkUnitDto> UploadFileToProject(
[ActionParameter] GetProjectRequest getProjectRequest,
[ActionParameter] UploadFileRequest uploadFileRequest)
{
var request = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/resource", Method.Post, Creds);
var request = new RestRequest($"/api/v3/project/{getProjectRequest.ProjectId}/resource", Method.Post);
request.AddJsonBody(new
{
name = uploadFileRequest?.FileName ?? uploadFileRequest.File.Name,
Expand All @@ -93,13 +93,13 @@ public async Task<WorkUnitDto> UploadFileToProject(
});
var projectFileInfoDto = await Client.ExecuteWithErrorHandling<ProjectFileInfoDto>(request);

var uploadRequest = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/resource/{projectFileInfoDto.Uuid}/content", Method.Put, Creds);
var uploadRequest = new RestRequest($"/api/v3/project/{getProjectRequest.ProjectId}/resource/{projectFileInfoDto.Uuid}/content", Method.Put);
var fileBytes = await (await _fileManagementClient.DownloadAsync(uploadFileRequest.File)).GetByteData();
uploadRequest.AlwaysMultipartFormData = true;
uploadRequest.AddFile("file", fileBytes, uploadFileRequest.File.Name);
await Client.ExecuteWithErrorHandling(uploadRequest);

var createWorkUnitRequest = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/work-unit?bulk=true", Method.Post, Creds);
var createWorkUnitRequest = new RestRequest($"/api/v3/project/{getProjectRequest.ProjectId}/work-unit?bulk=true", Method.Post);
createWorkUnitRequest.AddJsonBody(JsonConvert.SerializeObject(
new List<WorkUnitCreateDto>() {
new WorkUnitCreateDto()
Expand All @@ -117,7 +117,7 @@ public async Task<ProjectDto> ChangeProjectStatus(
[ActionParameter] GetProjectRequest getProjectRequest,
[ActionParameter] ChangeProjectStatusRequest changeProjectStatusRequest)
{
var request = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/status", Method.Post, Creds);
var request = new RestRequest($"/api/v3/project/{getProjectRequest.ProjectId}/status", Method.Post);
request.AddJsonBody(new
{
newStatus = changeProjectStatusRequest.ProjectStatus,
Expand All @@ -131,7 +131,7 @@ public async Task<DownloadTranslatedFilesResponse> DownloadTranslatedFiles(
[ActionParameter] GetProjectRequest getProjectRequest,
[ActionParameter] DownloadTranslatedFilesRequest downloadTranslatedFilesRequest)
{
var request = new BWXRequest($"/api/v3/project/{getProjectRequest.ProjectId}/download", Method.Get, Creds);
var request = new RestRequest($"/api/v3/project/{getProjectRequest.ProjectId}/download", Method.Get);

if (downloadTranslatedFilesRequest.Resources != null && downloadTranslatedFilesRequest.Resources.Any())
foreach (var resourceId in downloadTranslatedFilesRequest.Resources)
Expand Down
32 changes: 29 additions & 3 deletions Apps.BWX/Api/BWXClient.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,34 @@
using Apps.BWX.Constants;
using Apps.BWX.Models.Project.Responses;
using Blackbird.Applications.Sdk.Common.Authentication;
using DocumentFormat.OpenXml.Spreadsheet;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
using System.Net.Sockets;

namespace Apps.BWX.Api;

public class BWXClient : RestClient
{
public BWXClient() : base(new RestClientOptions()
protected string AuthToken { get; set; }
public BWXClient(IEnumerable<AuthenticationCredentialsProvider> creds) : base(new RestClientOptions()
{
BaseUrl = new(Urls.Api)
})
{
var token = creds.First(x => x.KeyName == "accessKey").Value;
var secret = creds.First(x => x.KeyName == "secret").Value;

var restClient = new RestClient(Urls.Api);
var restRequest = new RestRequest(Urls.TokenUrl, Method.Post);
restRequest.AddBody(new
{
accessKey = token,
secret = secret
});
var result = restClient.Execute(restRequest);
AuthToken = result.Headers.FirstOrDefault(x => x.Name == "X-AUTH-TOKEN").Value.ToString();
}

public async Task<RestResponse> ExecuteWithErrorHandling(RestRequest request)
Expand All @@ -32,19 +48,29 @@ public async Task<RestResponse> ExecuteWithErrorHandling(RestRequest request)

public async Task<T> ExecuteWithErrorHandling<T>(RestRequest request)
{
request.AddHeader("X-AUTH-TOKEN", AuthToken);
var response = await ExecuteWithErrorHandling(request);
return JsonConvert.DeserializeObject<T>(response.Content!, JsonConfig.Settings)!;
}

public async Task<IEnumerable<T>> PaginateOnce<T>(RestRequest request)
{
request.AddQueryParameter("sort", "sortingByCreateDate");
request.AddQueryParameter("size", 20);
request.AddQueryParameter("page", 0);
var response = await ExecuteWithErrorHandling<PaginationResponse<T>>(request);
return response.Content;
}

public async Task<List<T>> Paginate<T>(RestRequest request)
{
var result = new List<T>();
request.AddQueryParameter("sort", "sortingByCreateDate");
request.AddQueryParameter("size", 50);
int page = 0;
bool last = false;
do
{
request.AddQueryParameter("size", 20);
{
request.AddQueryParameter("page", page);
var response = await ExecuteWithErrorHandling<PaginationResponse<T>>(request);
result.AddRange(response.Content);
Expand Down
29 changes: 0 additions & 29 deletions Apps.BWX/Api/BWXRequest.cs

This file was deleted.

2 changes: 1 addition & 1 deletion Apps.BWX/Apps.BWX.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Product>Bureau Works</Product>
<Version>1.0.11</Version>
<Version>1.1.0</Version>
<Description>Bureau Works is cutting edge translation software that helps its users translate at greater speeds and with an increased sense of authorship.</Description>
<AssemblyName>Apps.BWX</AssemblyName>
</PropertyGroup>
Expand Down
4 changes: 2 additions & 2 deletions Apps.BWX/Connections/ConnectionPingChecker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ public class ConnectionPingChecker : IConnectionValidator
{
public ValueTask<ConnectionValidationResponse> ValidateConnection(IEnumerable<AuthenticationCredentialsProvider> authProviders, CancellationToken cancellationToken)
{
var client = new BWXClient();
var request = new BWXRequest("/api/v3/language", Method.Get, authProviders);
var client = new BWXClient(authProviders);
var request = new RestRequest("/api/v3/language", Method.Get);
try
{
var result = client.ExecuteWithErrorHandling(request).Result;
Expand Down
10 changes: 4 additions & 6 deletions Apps.BWX/DataSourceHandlers/ClientDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@ public ClientDataHandler(InvocationContext invocationContext) : base(invocationC

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v3/client", Method.Get, Creds);
var languages = await Client.Paginate<ClientDto>(request);
var request = new RestRequest($"/api/v3/client", Method.Get);
request.AddQueryParameter("name", context.SearchString);
var clients = await Client.PaginateOnce<ClientDto>(request);

return languages.Where(el =>
context.SearchString is null ||
el.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => v.Name);
return clients.ToDictionary(k => k.Uuid, v => v.Name);
}
}
10 changes: 4 additions & 6 deletions Apps.BWX/DataSourceHandlers/GlossaryDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@ public GlossaryDataHandler(InvocationContext invocationContext) : base(invocatio

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v3/glossary?name={context.SearchString}", Method.Get, Creds);
var glossaries = await Client.Paginate<GlossaryDto>(request);
var request = new RestRequest($"/api/v3/glossary", Method.Get);
request.AddQueryParameter("name", context.SearchString);
var glossaries = await Client.PaginateOnce<GlossaryDto>(request);

return glossaries.Where(el =>
context.SearchString is null ||
el.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => v.Name);
return glossaries.ToDictionary(k => k.Uuid, v => v.Name);
}
}
}
2 changes: 1 addition & 1 deletion Apps.BWX/DataSourceHandlers/LanguageDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public LanguageDataHandler(InvocationContext invocationContext) : base(invocatio

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v3/language", Method.Get, Creds);
var request = new RestRequest($"/api/v3/language", Method.Get);
var languages = await Client.ExecuteWithErrorHandling<List<LanguageDto>>(request);

return languages.Where(el =>
Expand Down
10 changes: 4 additions & 6 deletions Apps.BWX/DataSourceHandlers/OrganizationDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,10 @@ public OrganizationDataHandler(InvocationContext invocationContext) : base(invoc

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v2/organization", Method.Get, Creds);
var languages = await Client.Paginate<OrganizationDto>(request);
var request = new RestRequest($"/api/v2/organization", Method.Get);
request.AddQueryParameter("name", context.SearchString);
var organizations = await Client.PaginateOnce<OrganizationDto>(request);

return languages.Where(el =>
context.SearchString is null ||
el.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => v.Name);
return organizations.ToDictionary(k => k.Uuid, v => v.Name);
}
}
11 changes: 5 additions & 6 deletions Apps.BWX/DataSourceHandlers/ProjectDataHandler.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Apps.BWX.Models.Project.Responses;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;
Expand All @@ -15,12 +16,10 @@ public ProjectDataHandler(InvocationContext invocationContext) : base(invocation

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v3/project", Method.Get, Creds);
var projects = await Client.Paginate<ProjectDto>(request);
var request = new RestRequest($"/api/v3/project", Method.Get);
request.AddQueryParameter("reference", context.SearchString);
var projects = await Client.PaginateOnce<ProjectDto>(request);

return projects.Where(el =>
context.SearchString is null ||
el.Reference.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => $"{v.Reference} ({v.Name})");
return projects.ToDictionary(k => k.Uuid, v => $"{v.Reference} ({v.Name})");
}
}
12 changes: 6 additions & 6 deletions Apps.BWX/DataSourceHandlers/ProjectManagerDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ public ProjectManagerDataHandler(InvocationContext invocationContext) : base(inv

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v3/user?simple=true&roles=PROJECT_MANAGER", Method.Get, Creds);
var projects = await Client.Paginate<UserDto>(request);
var request = new RestRequest($"/api/v3/user", Method.Get);
request.AddQueryParameter("roles", "PROJECT_MANAGER");
request.AddQueryParameter("simple", "true");
request.AddQueryParameter("name", context.SearchString);
var users = await Client.PaginateOnce<UserDto>(request);

return projects.Where(el =>
context.SearchString is null ||
el.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => v.Name);
return users.ToDictionary(k => k.Uuid, v => v.Name);
}
}
2 changes: 1 addition & 1 deletion Apps.BWX/DataSourceHandlers/ProjectResourcesDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext con
if (string.IsNullOrEmpty(ProjectRequest?.ProjectId))
throw new ArgumentException("Please select project first!");

var request = new BWXRequest($"/api/v3/project/{ProjectRequest.ProjectId}/resource/simple", Method.Get, Creds);
var request = new RestRequest($"/api/v3/project/{ProjectRequest.ProjectId}/resource/simple", Method.Get);
var projectResources = await Client.ExecuteWithErrorHandling<List<ProjectResourceDto>>(request);

return projectResources.Where(el =>
Expand Down
11 changes: 5 additions & 6 deletions Apps.BWX/DataSourceHandlers/UserDataHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,11 @@ public UserDataHandler(InvocationContext invocationContext) : base(invocationCon

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new BWXRequest($"/api/v3/user?simple=true", Method.Get, Creds);
var projects = await Client.Paginate<UserDto>(request);
var request = new RestRequest($"/api/v3/user", Method.Get);
request.AddQueryParameter("simple", "true");
request.AddQueryParameter("name", context.SearchString);
var users = await Client.PaginateOnce<UserDto>(request);

return projects.Where(el =>
context.SearchString is null ||
el.Name.Contains(context.SearchString, StringComparison.OrdinalIgnoreCase))
.ToDictionary(k => k.Uuid, v => v.Name);
return users.ToDictionary(k => k.Uuid, v => v.Name);
}
}
2 changes: 1 addition & 1 deletion Apps.BWX/Invocables/BWXInvocable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ public class BWXInvocable : BaseInvocable

public BWXInvocable(InvocationContext invocationContext) : base(invocationContext)
{
Client = new();
Client = new(Creds);
}
}

0 comments on commit 8c6f295

Please sign in to comment.