From 3b1c2b1a3b872482b977c926c0c1e58b14eb8ba2 Mon Sep 17 00:00:00 2001 From: vitalii-bezuhlyi Date: Tue, 8 Oct 2024 09:47:29 +0300 Subject: [PATCH] Refactoring --- .gitignore | 2 + Apps.BWX/Actions/GlossaryActions.cs | 61 +++++----- Apps.BWX/Actions/ProjectActions.cs | 21 ++-- Apps.BWX/Apps.BWX.csproj | 8 +- Apps.BWX/Connections/ConnectionDefinition.cs | 11 +- Apps.BWX/Constants/CredNames.cs | 8 ++ .../DataSourceHandlers/ClientDataHandler.cs | 19 +-- .../DataSourceHandlers/GlossaryDataHandler.cs | 16 +-- .../DataSourceHandlers/LanguageDataHandler.cs | 10 +- .../OrganizationDataHandler.cs | 17 +-- .../DataSourceHandlers/ProjectDataHandler.cs | 11 +- .../ProjectManagerDataHandler.cs | 10 +- .../ProjectResourcesDataHandler.cs | 24 ++-- .../DataSourceHandlers/UserDataHandler.cs | 17 +-- Apps.BWX/Dtos/ProjectDto.cs | 113 +++++++++++------- .../Requests/ExportGlossaryRequest.cs | 3 +- .../Project/Requests/SearchProjectRequest.cs | 6 +- 17 files changed, 163 insertions(+), 194 deletions(-) create mode 100644 Apps.BWX/Constants/CredNames.cs diff --git a/.gitignore b/.gitignore index ef04567..4079f46 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs +.idea/ + # Mono auto generated files mono_crash.* diff --git a/Apps.BWX/Actions/GlossaryActions.cs b/Apps.BWX/Actions/GlossaryActions.cs index 0072962..a5b9953 100644 --- a/Apps.BWX/Actions/GlossaryActions.cs +++ b/Apps.BWX/Actions/GlossaryActions.cs @@ -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; @@ -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 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(request); } [Action("Export glossary", Description = "Export glossary")] public async Task 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(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(exportStatusRequest); - while(exportStatusResult.Status != "COMPLETED") + while (exportStatusResult.Status != "COMPLETED") { Thread.Sleep(1000); exportStatusResult = await Client.ExecuteWithErrorHandling(exportStatusRequest); } + var downloadTbxRequest = new RestRequest(exportStatusResult.DownloadUrl, Method.Get); var downloadTbxResult = await new RestClient().ExecuteAsync(downloadTbxRequest); @@ -67,13 +64,17 @@ public async Task 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); @@ -87,4 +88,4 @@ private async Task GetGlossary([ActionParameter] ExportGlossaryRequ var request = new RestRequest($"/api/v3/glossary/{input.GlossaryId}", Method.Get); return await Client.ExecuteWithErrorHandling(request); } -} +} \ No newline at end of file diff --git a/Apps.BWX/Actions/ProjectActions.cs b/Apps.BWX/Actions/ProjectActions.cs index 06a934b..b606295 100644 --- a/Apps.BWX/Actions/ProjectActions.cs +++ b/Apps.BWX/Actions/ProjectActions.cs @@ -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; @@ -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 @@ -33,7 +26,7 @@ public ProjectActions(InvocationContext invocationContext, IFileManagementClient [Action("Search projects", Description = "Search projects")] public async Task> 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); @@ -45,6 +38,8 @@ public async Task> 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) @@ -94,7 +89,7 @@ public async Task UploadFileToProject( var projectFileInfoDto = await Client.ExecuteWithErrorHandling(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); @@ -148,7 +143,7 @@ public async Task 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; diff --git a/Apps.BWX/Apps.BWX.csproj b/Apps.BWX/Apps.BWX.csproj index 0dda11c..5ff326b 100644 --- a/Apps.BWX/Apps.BWX.csproj +++ b/Apps.BWX/Apps.BWX.csproj @@ -5,7 +5,7 @@ enable enable Bureau Works - 1.1.0 + 1.1.1 Bureau Works is cutting edge translation software that helps its users translate at greater speeds and with an increased sense of authorship. Apps.BWX @@ -21,4 +21,10 @@ + + + + README.md + + diff --git a/Apps.BWX/Connections/ConnectionDefinition.cs b/Apps.BWX/Connections/ConnectionDefinition.cs index 1272938..5adafcf 100644 --- a/Apps.BWX/Connections/ConnectionDefinition.cs +++ b/Apps.BWX/Connections/ConnectionDefinition.cs @@ -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; @@ -14,11 +15,11 @@ public class ConnectionDefinition : IConnectionDefinition ConnectionUsage = ConnectionUsage.Actions, ConnectionProperties = new List() { - new ConnectionProperty("accessKey") + new(CredNames.AccessKey) { DisplayName = "Access key", }, - new ConnectionProperty("secret") + new(CredNames.Secret) { DisplayName = "Secret", } @@ -31,12 +32,12 @@ public IEnumerable CreateAuthorizationCredent { yield return new AuthenticationCredentialsProvider( AuthenticationCredentialsRequestLocation.None, - "accessKey", + CredNames.AccessKey, values["accessKey"] ); yield return new AuthenticationCredentialsProvider( AuthenticationCredentialsRequestLocation.None, - "secret", + CredNames.Secret, values["secret"] ); } diff --git a/Apps.BWX/Constants/CredNames.cs b/Apps.BWX/Constants/CredNames.cs new file mode 100644 index 0000000..3ef2024 --- /dev/null +++ b/Apps.BWX/Constants/CredNames.cs @@ -0,0 +1,8 @@ +namespace Apps.BWX.Constants; + +public static class CredNames +{ + public const string AccessKey = "accessKey"; + + public const string Secret = "secret"; +} \ No newline at end of file diff --git a/Apps.BWX/DataSourceHandlers/ClientDataHandler.cs b/Apps.BWX/DataSourceHandlers/ClientDataHandler.cs index 2cc07c0..674b04b 100644 --- a/Apps.BWX/DataSourceHandlers/ClientDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/ClientDataHandler.cs @@ -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> 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(request); diff --git a/Apps.BWX/DataSourceHandlers/GlossaryDataHandler.cs b/Apps.BWX/DataSourceHandlers/GlossaryDataHandler.cs index 574a453..4e34ede 100644 --- a/Apps.BWX/DataSourceHandlers/GlossaryDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/GlossaryDataHandler.cs @@ -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> GetDataAsync(DataSourceContext context, CancellationToken token) { var request = new RestRequest($"/api/v3/glossary", Method.Get); diff --git a/Apps.BWX/DataSourceHandlers/LanguageDataHandler.cs b/Apps.BWX/DataSourceHandlers/LanguageDataHandler.cs index 541a003..1a211fd 100644 --- a/Apps.BWX/DataSourceHandlers/LanguageDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/LanguageDataHandler.cs @@ -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.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; @@ -7,12 +6,9 @@ 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> GetDataAsync(DataSourceContext context, CancellationToken token) { var request = new RestRequest($"/api/v3/language", Method.Get); diff --git a/Apps.BWX/DataSourceHandlers/OrganizationDataHandler.cs b/Apps.BWX/DataSourceHandlers/OrganizationDataHandler.cs index 9b7c951..bde750b 100644 --- a/Apps.BWX/DataSourceHandlers/OrganizationDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/OrganizationDataHandler.cs @@ -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> GetDataAsync(DataSourceContext context, CancellationToken token) { var request = new RestRequest($"/api/v2/organization", Method.Get); diff --git a/Apps.BWX/DataSourceHandlers/ProjectDataHandler.cs b/Apps.BWX/DataSourceHandlers/ProjectDataHandler.cs index e5b84cd..52e6492 100644 --- a/Apps.BWX/DataSourceHandlers/ProjectDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/ProjectDataHandler.cs @@ -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> GetDataAsync(DataSourceContext context, CancellationToken token) { var request = new RestRequest($"/api/v3/project", Method.Get); diff --git a/Apps.BWX/DataSourceHandlers/ProjectManagerDataHandler.cs b/Apps.BWX/DataSourceHandlers/ProjectManagerDataHandler.cs index 36041d3..05e87f7 100644 --- a/Apps.BWX/DataSourceHandlers/ProjectManagerDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/ProjectManagerDataHandler.cs @@ -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.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; @@ -14,12 +13,9 @@ namespace Apps.BWX.DataSourceHandlers; -public class ProjectManagerDataHandler : BWXInvocable, IAsyncDataSourceHandler +public class ProjectManagerDataHandler(InvocationContext invocationContext) + : BWXInvocable(invocationContext), IAsyncDataSourceHandler { - public ProjectManagerDataHandler(InvocationContext invocationContext) : base(invocationContext) - { - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken token) { var request = new RestRequest($"/api/v3/user", Method.Get); diff --git a/Apps.BWX/DataSourceHandlers/ProjectResourcesDataHandler.cs b/Apps.BWX/DataSourceHandlers/ProjectResourcesDataHandler.cs index 7f53ce5..a4ab490 100644 --- a/Apps.BWX/DataSourceHandlers/ProjectResourcesDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/ProjectResourcesDataHandler.cs @@ -1,34 +1,24 @@ -using Apps.BWX.Api; -using Apps.BWX.Dtos; +using Apps.BWX.Dtos; using Apps.BWX.Invocables; using Apps.BWX.Models.Project.Requests; using Blackbird.Applications.Sdk.Common; using Blackbird.Applications.Sdk.Common.Dynamic; using Blackbird.Applications.Sdk.Common.Invocation; using RestSharp; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Apps.BWX.DataSourceHandlers { - public class ProjectResourcesDataHandler : BWXInvocable, IAsyncDataSourceHandler + public class ProjectResourcesDataHandler( + InvocationContext invocationContext, + [ActionParameter] GetProjectRequest projectRequest) + : BWXInvocable(invocationContext), IAsyncDataSourceHandler { - public GetProjectRequest ProjectRequest { get; set; } - - public ProjectResourcesDataHandler(InvocationContext invocationContext, [ActionParameter] GetProjectRequest projectRequest) : base(invocationContext) - { - ProjectRequest = projectRequest; - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken token) { - if (string.IsNullOrEmpty(ProjectRequest?.ProjectId)) + if (string.IsNullOrEmpty(projectRequest?.ProjectId)) throw new ArgumentException("Please select project first!"); - var request = new RestRequest($"/api/v3/project/{ProjectRequest.ProjectId}/resource/simple", Method.Get); + var request = new RestRequest($"/api/v3/project/{projectRequest.ProjectId}/resource/simple", Method.Get); var projectResources = await Client.ExecuteWithErrorHandling>(request); return projectResources.Where(el => diff --git a/Apps.BWX/DataSourceHandlers/UserDataHandler.cs b/Apps.BWX/DataSourceHandlers/UserDataHandler.cs index 33963ea..5c0a490 100644 --- a/Apps.BWX/DataSourceHandlers/UserDataHandler.cs +++ b/Apps.BWX/DataSourceHandlers/UserDataHandler.cs @@ -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 UserDataHandler : BWXInvocable, IAsyncDataSourceHandler +public class UserDataHandler(InvocationContext invocationContext) + : BWXInvocable(invocationContext), IAsyncDataSourceHandler { - public UserDataHandler(InvocationContext invocationContext) : base(invocationContext) - { - } - public async Task> GetDataAsync(DataSourceContext context, CancellationToken token) { var request = new RestRequest($"/api/v3/user", Method.Get); diff --git a/Apps.BWX/Dtos/ProjectDto.cs b/Apps.BWX/Dtos/ProjectDto.cs index 8ab0aaa..9f97658 100644 --- a/Apps.BWX/Dtos/ProjectDto.cs +++ b/Apps.BWX/Dtos/ProjectDto.cs @@ -5,19 +5,20 @@ namespace Apps.BWX.Dtos; public class ProjectDto { [Display("Project ID")] - public string Uuid { get; set; } - public string Name { get; set; } - public string Reference { get; set; } + public string Uuid { get; set; } = default!; + public string Name { get; set; } = default!; + public string Reference { get; set; } = default!; [Display("Genesis ID")] - public string GenesisId { get; set; } - public string Currency { get; set; } + public string GenesisId { get; set; } = default!; + + public string Currency { get; set; } = default!; [Display("Source locale")] public string SourceLocale { get; set; } [Display("Target locales")] - public List TargetLocales { get; set; } + public List TargetLocales { get; set; } = default!; [Display("Is continuous?")] public bool IsContinuous { get; set; } @@ -27,59 +28,71 @@ public class ProjectDto //[Display("Due date")] //public long DueDate { get; set; } - public string Status { get; set; } - public Client Client { get; set; } - public Contact Contact { get; set; } - public Creator Creator { get; set; } - public List Tags { get; set; } - public List Costs { get; set; } + public string Status { get; set; } = default!; + + public Client Client { get; set; } = default!; + + public Contact Contact { get; set; } = default!; + + public Creator Creator { get; set; } = default!; + + public List Tags { get; set; } = default!; + + public List Costs { get; set; } = default!; [Display("Reference files")] - public List ReferenceFiles { get; set; } + public List ReferenceFiles { get; set; } = default!; [Display("Drop files")] - public List DropFiles { get; set; } + public List DropFiles { get; set; } = default!; [Display("Costs log file ID")] - public string CostsLogfileId { get; set; } + public string CostsLogfileId { get; set; } = default!; [Display("Costs status")] - public string CostsStatus { get; set; } + public string CostsStatus { get; set; } = default!; [Display("Costs calculated at")] - public long CostsCalculatedAt { get; set; } + public long CostsCalculatedAt { get; set; } = default!; [Display("Total work units")] - public int TotalWorkUnits { get; set; } - public double Progress { get; set; } - public bool AutomationEnabled { get; set; } + public int TotalWorkUnits { get; set; } = default!; + + public double Progress { get; set; } = default!; + + [Display("Automation enabled")] + public bool AutomationEnabled { get; set; } = default!; [Display("Automation status")] - public string AutomationStatus { get; set; } + public string AutomationStatus { get; set; } = default!; } public class Client { [Display("Client ID")] - public string Uuid { get; set; } - public OrganizationDto Organization { get; set; } - public string Name { get; set; } + public string Uuid { get; set; } = default!; + + public OrganizationDto Organization { get; set; } = default!; + + public string Name { get; set; } = default!; [Display("Source language")] - public string SourceLanguage { get; set; } + public string SourceLanguage { get; set; } = default!; [Display("Target languages")] - public List TargetLanguages { get; set; } + public List TargetLanguages { get; set; } = default!; } public class Contact { [Display("Contact ID")] - public string Uuid { get; set; } + public string Uuid { get; set; } = default!; - public string Email { get; set; } - public string Name { get; set; } - public string Status { get; set; } + public string Email { get; set; } = default!; + + public string Name { get; set; } = default!; + + public string Status { get; set; } = default!; [Display("Tasks completed count")] public int TasksCompletedCount { get; set; } @@ -92,19 +105,23 @@ public class Cost //public int Id { get; set; } [Display("Cost ID")] - public string Uuid { get; set; } - public string Description { get; set; } + public string Uuid { get; set; } = default!; + + public string Description { get; set; } = default!; [Display("Source language")] - public string SourceLanguage { get; set; } + public string SourceLanguage { get; set; } = default!; [Display("Target language")] - public string TargetLanguage { get; set; } - public string Filename { get; set; } - public string Reason { get; set; } + public string TargetLanguage { get; set; } = default!; + + [Display("File name")] + public string Filename { get; set; } = default!; + + public string Reason { get; set; } = default!; [Display("Costs log file ID")] - public string CostsLogfileId { get; set; } + public string CostsLogfileId { get; set; } = default!; //[Display("Creation timestamp")] //public long CreationTimestamp { get; set; } @@ -116,32 +133,36 @@ public class Cost public int MatchEnd { get; set; } [Display("Display order")] - public string DisplayOrder { get; set; } + public string DisplayOrder { get; set; } = default!; [Display("Unit type")] - public string UnitType { get; set; } + public string UnitType { get; set; } = default!; + public int Units { get; set; } [Display("Cost per unit")] public double CostPerUnit { get; set; } + public double Total { get; set; } [Display("Rate type")] - public string RateType { get; set; } + public string RateType { get; set; } = default!; [Display("Cost type")] - public string CostType { get; set; } + public string CostType { get; set; } = default!; } public class Creator { [Display("Creator ID")] - public string Uuid { get; set; } - public string Email { get; set; } - public string Name { get; set; } - public string Status { get; set; } + public string Uuid { get; set; } = default!; + + public string Email { get; set; } = default!; + + public string Name { get; set; } = default!; + + public string Status { get; set; } = default!; [Display("Tasks completed count")] public int TasksCompletedCount { get; set; } - } \ No newline at end of file diff --git a/Apps.BWX/Models/Glossary/Requests/ExportGlossaryRequest.cs b/Apps.BWX/Models/Glossary/Requests/ExportGlossaryRequest.cs index 0c8566a..50cbb14 100644 --- a/Apps.BWX/Models/Glossary/Requests/ExportGlossaryRequest.cs +++ b/Apps.BWX/Models/Glossary/Requests/ExportGlossaryRequest.cs @@ -11,8 +11,7 @@ namespace Apps.BWX.Models.Glossary.Requests { public class ExportGlossaryRequest { - [Display("Glossary ID")] - [DataSource(typeof(GlossaryDataHandler))] + [Display("Glossary ID"), DataSource(typeof(GlossaryDataHandler))] public string GlossaryId { get; set; } } } diff --git a/Apps.BWX/Models/Project/Requests/SearchProjectRequest.cs b/Apps.BWX/Models/Project/Requests/SearchProjectRequest.cs index 6945222..f16b25d 100644 --- a/Apps.BWX/Models/Project/Requests/SearchProjectRequest.cs +++ b/Apps.BWX/Models/Project/Requests/SearchProjectRequest.cs @@ -15,8 +15,7 @@ public class SearchProjectRequest [DataSource(typeof(OrganizationDataHandler))] public string? Organization { get; set; } - [Display("Organization unit")] - [DataSource(typeof(ClientDataHandler))] + [Display("Organization unit"), DataSource(typeof(ClientDataHandler))] public string? Client { get; set; } [Display("Project manager")] @@ -48,4 +47,7 @@ public class SearchProjectRequest [Display("Tags")] public List? Tags { get; set; } + + [Display("File name", Description = "Optional. It's the name of the file.")] + public string? FileName { get; set; } } \ No newline at end of file