Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
vitalii-bezuhlyi committed Oct 8, 2024
1 parent 8c6f295 commit 3b1c2b1
Show file tree
Hide file tree
Showing 17 changed files with 163 additions and 194 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

.idea/

# Mono auto generated files
mono_crash.*

Expand Down
61 changes: 31 additions & 30 deletions Apps.BWX/Actions/GlossaryActions.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Apps.BWX.Models.Glossary.Requests;
using Apps.BWX.Models.Glossary.Responses;
using Apps.BWX.Models.Project.Requests;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Actions;
using Blackbird.Applications.Sdk.Common.Invocation;
Expand All @@ -16,49 +14,48 @@
namespace Apps.BWX.Actions;

[ActionList]
public class GlossaryActions : BWXInvocable
public class GlossaryActions(InvocationContext invocationContext, IFileManagementClient fileManagementClient)
: BWXInvocable(invocationContext)
{
private readonly IFileManagementClient _fileManagementClient;

public GlossaryActions(InvocationContext invocationContext, IFileManagementClient fileManagementClient) : base(invocationContext)
{
_fileManagementClient = fileManagementClient;
}

[Action("Create glossary", Description = "Create new glossary")]
public async Task<GlossaryDto> CreateGlossary(
[ActionParameter] CreateGlossaryRequest input)
{
var request = new RestRequest($"/api/v3/glossary", Method.Post);
request.AddJsonBody(new
{
name = input.Name,
languages = input.Languages,
organization = new
var request = new RestRequest($"/api/v3/glossary", Method.Post)
.AddJsonBody(new
{
uuid = input.Organization
},
note = input.Note,
domain = input.Domain,
subDomain = input.Subdomain,
orgUnits = input.OrgUnitUUIDs != null ? input.OrgUnitUUIDs.Select(x => new UuidDto(){ Uuid = x}).ToArray() : new UuidDto[] { }
});
name = input.Name,
languages = input.Languages,
organization = new
{
uuid = input.Organization
},
note = input.Note,
domain = input.Domain,
subDomain = input.Subdomain,
orgUnits = input.OrgUnitUUIDs != null
? input.OrgUnitUUIDs.Select(x => new UuidDto { Uuid = x }).ToArray()
: []
});

return await Client.ExecuteWithErrorHandling<GlossaryDto>(request);
}

[Action("Export glossary", Description = "Export glossary")]
public async Task<ExportGlossaryResponse> ExportGlossary([ActionParameter] ExportGlossaryRequest input)
{
var initExportRequest = new RestRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx", Method.Get);
var initExportRequest = new RestRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx");
var initExportResult = await Client.ExecuteWithErrorHandling<ExportInitDto>(initExportRequest);

var exportStatusRequest = new RestRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx/{initExportResult.RequestUuid}/status", Method.Get);
var exportStatusRequest =
new RestRequest($"/api/v3/glossary/export/{input.GlossaryId}/tbx/{initExportResult.RequestUuid}/status");
var exportStatusResult = await Client.ExecuteWithErrorHandling<ExportStatusDto>(exportStatusRequest);
while(exportStatusResult.Status != "COMPLETED")
while (exportStatusResult.Status != "COMPLETED")
{
Thread.Sleep(1000);
exportStatusResult = await Client.ExecuteWithErrorHandling<ExportStatusDto>(exportStatusRequest);
}

var downloadTbxRequest = new RestRequest(exportStatusResult.DownloadUrl, Method.Get);
var downloadTbxResult = await new RestClient().ExecuteAsync(downloadTbxRequest);

Expand All @@ -67,13 +64,17 @@ public async Task<ExportGlossaryResponse> ExportGlossary([ActionParameter] Expor
using var streamGlossaryData = new MemoryStream(downloadTbxResult.RawBytes);

using var resultStream = await streamGlossaryData.ConvertFromTbxV2ToV3(glossaryInfo.Name);
return new ExportGlossaryResponse() { File = await _fileManagementClient.UploadAsync(resultStream, MediaTypeNames.Application.Xml, $"{glossaryInfo.Name}.tbx") };
return new ExportGlossaryResponse()
{
File = await fileManagementClient.UploadAsync(resultStream, MediaTypeNames.Application.Xml,
$"{glossaryInfo.Name}.tbx")
};
}

[Action("Import glossary", Description = "Import glossary")]
public async Task ImportGlossary([ActionParameter] ImportGlossaryRequest input)
{
var fileStream = await _fileManagementClient.DownloadAsync(input.File);
var fileStream = await fileManagementClient.DownloadAsync(input.File);
var fileTBXV2Stream = await fileStream.ConvertFromTbxV3ToV2();

var initImportRequest = new RestRequest($"/api/v3/glossary/{input.GlossaryId}/import-tbx", Method.Post);
Expand All @@ -87,4 +88,4 @@ private async Task<GlossaryDto> GetGlossary([ActionParameter] ExportGlossaryRequ
var request = new RestRequest($"/api/v3/glossary/{input.GlossaryId}", Method.Get);
return await Client.ExecuteWithErrorHandling<GlossaryDto>(request);
}
}
}
21 changes: 8 additions & 13 deletions Apps.BWX/Actions/ProjectActions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Blackbird.Applications.Sdk.Common;
using Blackbird.Applications.Sdk.Common.Actions;
Expand All @@ -14,15 +13,9 @@
namespace Apps.BWX.Actions;

[ActionList]
public class ProjectActions : BWXInvocable
public class ProjectActions(InvocationContext invocationContext, IFileManagementClient fileManagementClient)
: BWXInvocable(invocationContext)
{
private readonly IFileManagementClient _fileManagementClient;

public ProjectActions(InvocationContext invocationContext, IFileManagementClient fileManagementClient) : base(invocationContext)
{
_fileManagementClient = fileManagementClient;
}

/**
* !!!Warning!!!
* Since BWX API is the same API their web platform uses
Expand All @@ -33,7 +26,7 @@ public ProjectActions(InvocationContext invocationContext, IFileManagementClient
[Action("Search projects", Description = "Search projects")]
public async Task<List<ProjectDto>> SearchProjects([ActionParameter] SearchProjectRequest searchProjects)
{
var request = new RestRequest($"/api/v3/project", Method.Get);
var request = new RestRequest($"/api/v3/project");
request.AddQueryParameter("name", searchProjects?.ProjectName);
request.AddQueryParameter("organizationUuid", searchProjects?.Organization);
request.AddQueryParameter("orgUnitUuid", searchProjects?.Client);
Expand All @@ -45,6 +38,8 @@ public async Task<List<ProjectDto>> SearchProjects([ActionParameter] SearchProje
request.AddQueryParameter("endCreateDate", searchProjects.CreationDateEnd?.ToString("yyyy-MM-dd"));
request.AddQueryParameter("startDueDate", searchProjects.DueDateStart?.ToString("yyyy-MM-dd"));
request.AddQueryParameter("endDueDate", searchProjects.DueDateEnd?.ToString("yyyy-MM-dd"));

request.AddQueryParameter("fileName", searchProjects?.FileName);

if (searchProjects.ProjectStatuses != null && searchProjects.ProjectStatuses.Any())
foreach(var status in searchProjects.ProjectStatuses)
Expand Down Expand Up @@ -94,7 +89,7 @@ public async Task<WorkUnitDto> UploadFileToProject(
var projectFileInfoDto = await Client.ExecuteWithErrorHandling<ProjectFileInfoDto>(request);

var uploadRequest = new RestRequest($"/api/v3/project/{getProjectRequest.ProjectId}/resource/{projectFileInfoDto.Uuid}/content", Method.Put);
var fileBytes = await (await _fileManagementClient.DownloadAsync(uploadFileRequest.File)).GetByteData();
var fileBytes = await (await fileManagementClient.DownloadAsync(uploadFileRequest.File)).GetByteData();
uploadRequest.AlwaysMultipartFormData = true;
uploadRequest.AddFile("file", fileBytes, uploadFileRequest.File.Name);
await Client.ExecuteWithErrorHandling(uploadRequest);
Expand Down Expand Up @@ -148,7 +143,7 @@ public async Task<DownloadTranslatedFilesResponse> DownloadTranslatedFiles(
var translatedFiles = new DownloadTranslatedFilesResponse();
foreach(var file in files)
{
var uploadedFile = await _fileManagementClient.UploadAsync(file.FileStream, MimeMapping.MimeUtility.GetMimeMapping(file.UploadName), file.UploadName);
var uploadedFile = await fileManagementClient.UploadAsync(file.FileStream, MimeMapping.MimeUtility.GetMimeMapping(file.UploadName), file.UploadName);
translatedFiles.TranslatedFiles.Add(uploadedFile);
}
return translatedFiles;
Expand Down
8 changes: 7 additions & 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.1.0</Version>
<Version>1.1.1</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 All @@ -21,4 +21,10 @@
<ItemGroup>
<EmbeddedResource CopyToOutputDirectory="Always" Include="image\icon.png"></EmbeddedResource>
</ItemGroup>

<ItemGroup>
<Content Include="..\README.md">
<Link>README.md</Link>
</Content>
</ItemGroup>
</Project>
11 changes: 6 additions & 5 deletions Apps.BWX/Connections/ConnectionDefinition.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Blackbird.Applications.Sdk.Common.Authentication;
using Apps.BWX.Constants;
using Blackbird.Applications.Sdk.Common.Authentication;
using Blackbird.Applications.Sdk.Common.Connections;

namespace Apps.BWX.Connections;
Expand All @@ -14,11 +15,11 @@ public class ConnectionDefinition : IConnectionDefinition
ConnectionUsage = ConnectionUsage.Actions,
ConnectionProperties = new List<ConnectionProperty>()
{
new ConnectionProperty("accessKey")
new(CredNames.AccessKey)
{
DisplayName = "Access key",
},
new ConnectionProperty("secret")
new(CredNames.Secret)
{
DisplayName = "Secret",
}
Expand All @@ -31,12 +32,12 @@ public IEnumerable<AuthenticationCredentialsProvider> CreateAuthorizationCredent
{
yield return new AuthenticationCredentialsProvider(
AuthenticationCredentialsRequestLocation.None,
"accessKey",
CredNames.AccessKey,
values["accessKey"]
);
yield return new AuthenticationCredentialsProvider(
AuthenticationCredentialsRequestLocation.None,
"secret",
CredNames.Secret,
values["secret"]
);
}
Expand Down
8 changes: 8 additions & 0 deletions Apps.BWX/Constants/CredNames.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Apps.BWX.Constants;

public static class CredNames
{
public const string AccessKey = "accessKey";

public const string Secret = "secret";
}
19 changes: 4 additions & 15 deletions Apps.BWX/DataSourceHandlers/ClientDataHandler.cs
Original file line number Diff line number Diff line change
@@ -1,28 +1,17 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;

/** !!!Warning!!!
* Since BWX API is the same API their web platform uses
* and many endpoints are not described or irrelevant in BWX API documentation -
* some parts of code are based on the endpoints which are used by BWX web platform. (It could be both v3 or v2 endpoints)
* Next method is based on web platform calls
**/

namespace Apps.BWX.DataSourceHandlers;

public class ClientDataHandler : BWXInvocable, IAsyncDataSourceHandler
public class ClientDataHandler(InvocationContext invocationContext)
: BWXInvocable(invocationContext), IAsyncDataSourceHandler
{
public ClientDataHandler(InvocationContext invocationContext) : base(invocationContext)
{
}

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

Expand Down
16 changes: 3 additions & 13 deletions Apps.BWX/DataSourceHandlers/GlossaryDataHandler.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,14 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using DocumentFormat.OpenXml.Drawing;
using RestSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Apps.BWX.DataSourceHandlers
{
public class GlossaryDataHandler : BWXInvocable, IAsyncDataSourceHandler
public class GlossaryDataHandler(InvocationContext invocationContext)
: BWXInvocable(invocationContext), IAsyncDataSourceHandler
{
public GlossaryDataHandler(InvocationContext invocationContext) : base(invocationContext)
{
}

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new RestRequest($"/api/v3/glossary", Method.Get);
Expand Down
10 changes: 3 additions & 7 deletions Apps.BWX/DataSourceHandlers/LanguageDataHandler.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;

namespace Apps.BWX.DataSourceHandlers;

public class LanguageDataHandler : BWXInvocable, IAsyncDataSourceHandler
public class LanguageDataHandler(InvocationContext invocationContext)
: BWXInvocable(invocationContext), IAsyncDataSourceHandler
{
public LanguageDataHandler(InvocationContext invocationContext) : base(invocationContext)
{
}

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new RestRequest($"/api/v3/language", Method.Get);
Expand Down
17 changes: 3 additions & 14 deletions Apps.BWX/DataSourceHandlers/OrganizationDataHandler.cs
Original file line number Diff line number Diff line change
@@ -1,25 +1,14 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
using Apps.BWX.Dtos;
using Apps.BWX.Invocables;
using Blackbird.Applications.Sdk.Common.Dynamic;
using Blackbird.Applications.Sdk.Common.Invocation;
using RestSharp;

/** !!!Warning!!!
* Since BWX API is the same API their web platform uses
* and many endpoints are not described or irrelevant in BWX API documentation -
* some parts of code are based on the endpoints which are used by BWX web platform. (It could be both v3 or v2 endpoints)
* Next method is based on web platform calls
**/

namespace Apps.BWX.DataSourceHandlers;

public class OrganizationDataHandler : BWXInvocable, IAsyncDataSourceHandler
public class OrganizationDataHandler(InvocationContext invocationContext)
: BWXInvocable(invocationContext), IAsyncDataSourceHandler
{
public OrganizationDataHandler(InvocationContext invocationContext) : base(invocationContext)
{
}

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new RestRequest($"/api/v2/organization", Method.Get);
Expand Down
11 changes: 3 additions & 8 deletions Apps.BWX/DataSourceHandlers/ProjectDataHandler.cs
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
using Apps.BWX.Api;
using Apps.BWX.Dtos;
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;

namespace Apps.BWX.DataSourceHandlers;

public class ProjectDataHandler : BWXInvocable, IAsyncDataSourceHandler
public class ProjectDataHandler(InvocationContext invocationContext)
: BWXInvocable(invocationContext), IAsyncDataSourceHandler
{
public ProjectDataHandler(InvocationContext invocationContext) : base(invocationContext)
{
}

public async Task<Dictionary<string, string>> GetDataAsync(DataSourceContext context, CancellationToken token)
{
var request = new RestRequest($"/api/v3/project", Method.Get);
Expand Down
Loading

0 comments on commit 3b1c2b1

Please sign in to comment.