From 0ef7c58b98f79e8c73989f96294c352fb9ea4cc0 Mon Sep 17 00:00:00 2001 From: Bram1903 <70259613+Bram1903@users.noreply.github.com> Date: Tue, 19 Dec 2023 11:55:33 +0100 Subject: [PATCH 1/7] Fix grammatical error in UserLoginState.razor file A simple change has been made to correct a minor grammatical mistake in the UserLoginState.razor file within Components/Identity. --- src/Server.UI/Components/Identity/UserLoginState.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Server.UI/Components/Identity/UserLoginState.razor b/src/Server.UI/Components/Identity/UserLoginState.razor index 4cdbab88c..32f7ef3b9 100644 --- a/src/Server.UI/Components/Identity/UserLoginState.razor +++ b/src/Server.UI/Components/Identity/UserLoginState.razor @@ -1,4 +1,4 @@ -@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity +@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity @using CleanArchitecture.Blazor.Server.UI.Hubs @using CleanArchitecture.Blazor.Server.UI.Models @using Microsoft.AspNetCore.Components.Authorization From 7267aa723a456cf831c89de11ce4c3c1ad49da31 Mon Sep 17 00:00:00 2001 From: Bram1903 <70259613+Bram1903@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:21:04 +0100 Subject: [PATCH 2/7] Completely reformatted the entire project. --- .editorconfig | 362 ---------------- CleanArchitecture.Blazor.nuspec | 60 +-- README.md | 23 +- docker-compose.dcproj | 38 +- docker-compose.yml | 4 +- src/Application/Application.csproj | 36 +- .../EventHandlers/CreatedEventHandler.cs | 1 + .../EventHandlers/DeletedEventHandler.cs | 1 + .../EventHandlers/UpdatedEventHandler.cs | 1 + .../ExceptionHandlers/ConflictException.cs | 7 +- .../ExceptionHandlers/DbExceptionHandler.cs | 2 - .../ForbiddenAccessException.cs | 8 +- .../InternalServerException.cs | 3 +- .../ExceptionHandlers/NotFoundException.cs | 13 +- .../ExceptionHandlers/ServerException.cs | 11 +- .../ServerExceptionHandler.cs | 15 +- .../UnauthorizedException.cs | 8 +- .../ValidationExceptionHandler.cs | 15 +- .../Common/Extensions/DataRowExtensions.cs | 36 +- .../DescriptionAttributeExtensions.cs | 31 +- .../Common/Extensions/QueryableExtensions.cs | 31 +- .../Common/Extensions/StringExtensions.cs | 12 +- .../Common/Extensions/ValidationExtensions.cs | 7 +- .../Caching/ICacheInvalidatorRequest.cs | 4 +- .../Interfaces/Caching/ICacheableRequest.cs | 4 +- .../Interfaces/IApplicationDbContext.cs | 3 +- .../Interfaces/IApplicationHubWrapper.cs | 2 +- .../Common/Interfaces/IApplicationSettings.cs | 3 +- .../Common/Interfaces/ICurrentUserService.cs | 5 +- .../Common/Interfaces/IDateTime.cs | 2 +- .../Common/Interfaces/IDictionaryService.cs | 2 +- .../Common/Interfaces/IDocumentOcrJob.cs | 2 +- .../Common/Interfaces/IExcelService.cs | 5 +- .../Common/Interfaces/IMailService.cs | 2 +- .../Common/Interfaces/IPDFService.cs | 3 +- .../Common/Interfaces/IPicklistService.cs | 5 +- src/Application/Common/Interfaces/IResult.cs | 3 +- src/Application/Common/Interfaces/IService.cs | 2 +- .../Common/Interfaces/IUploadService.cs | 2 +- .../Common/Interfaces/IValidationService.cs | 13 +- .../Identity/DTOs/RefreshTokenRequest.cs | 5 +- .../Interfaces/Identity/DTOs/TokenRequest.cs | 2 +- .../Interfaces/Identity/DTOs/TokenResponse.cs | 2 +- .../Interfaces/Identity/IIdentityService.cs | 2 +- .../Interfaces/Identity/IIdentitySettings.cs | 17 +- .../Interfaces/Identity/IUserDataProvider.cs | 5 +- .../Identity/IUsersStateContainer.cs | 3 +- .../Interfaces/MultiTenant/ITenantService.cs | 3 +- .../DefaultJsonSerializerOptions.cs | 5 +- .../Interfaces/Serialization/ISerializer.cs | 3 +- .../Common/Mappings/MappingExtensions.cs | 27 +- src/Application/Common/Models/MailRequest.cs | 2 +- .../Common/Models/PaginatedData.cs | 18 +- .../Common/Models/PaginatedList.cs | 12 +- .../Common/Models/PaginationFilter.cs | 12 +- .../Common/Models/PaginationRequest.cs | 8 +- src/Application/Common/Models/Result.cs | 20 +- .../Common/Models/UploadRequest.cs | 6 +- src/Application/Common/Models/UserProfile.cs | 7 +- .../ParallelNoWaitPublisher.cs | 8 +- .../Common/Security/LoginFormModel.cs | 4 - .../Common/Security/RegisterFormModel.cs | 19 +- .../RegisterFormModelFluentValidator.cs | 25 +- .../Security/RequestAuthorizeAttribute.cs | 16 +- src/Application/DependencyInjection.cs | 3 +- .../AuditTrails/DTOs/AuditTrailDto.cs | 3 +- .../AuditTrailsWithPaginationQuery.cs | 13 +- .../AuditTrailAdvancedFilter.cs | 9 +- .../AuditTrailAdvancedSpecification.cs | 14 +- .../Customers/Caching/CustomerCacheKey.cs | 42 +- .../AddEdit/AddEditCustomerCommand.cs | 92 ++-- .../AddEditCustomerCommandValidator.cs | 13 +- .../Commands/Create/CreateCustomerCommand.cs | 77 ++-- .../Create/CreateCustomerCommandValidator.cs | 18 +- .../Commands/Delete/DeleteCustomerCommand.cs | 69 +-- .../Delete/DeleteCustomerCommandValidator.cs | 14 +- .../Commands/Import/ImportCustomersCommand.cs | 151 +++---- .../Import/ImportCustomersCommandValidator.cs | 17 +- .../Commands/Update/UpdateCustomerCommand.cs | 77 ++-- .../Update/UpdateCustomerCommandValidator.cs | 15 +- .../Features/Customers/DTOs/CustomerDto.cs | 15 +- .../CustomerCreatedEventHandler.cs | 27 +- .../CustomerDeletedEventHandler.cs | 27 +- .../CustomerUpdatedEventHandler.cs | 27 +- .../Queries/Export/ExportCustomersQuery.cs | 80 ++-- .../Queries/GetAll/GetAllCustomersQuery.cs | 25 +- .../Queries/GetById/GetCustomerByIdQuery.cs | 21 +- .../Pagination/CustomersPaginationQuery.cs | 53 +-- .../Specifications/CustomerAdvancedFilter.cs | 12 +- .../CustomerAdvancedSpecification.cs | 15 +- .../CustomerByIdSpecification.cs | 2 +- .../AddEdit/AddEditDocumentCommand.cs | 1 - .../AddEditDocumentCommandValidator.cs | 2 - .../Commands/Upload/UploadDocumentCommand.cs | 4 +- .../Features/Documents/DTOs/DocumentDto.cs | 2 +- .../GetFileStream/GetFileStreamQuery.cs | 10 +- .../DocumentsWithPaginationQuery.cs | 14 +- .../Specifications/AdvancedDocumentsFilter.cs | 7 +- .../AdvancedDocumentsSpecification.cs | 21 +- .../ResetPassword/ResetPasswordCommand.cs | 14 +- .../AddEdit/AddEditKeyValueCommand.cs | 2 +- .../AddEditKeyValueCommandValidator.cs | 2 - .../Commands/Import/ImportKeyValuesCommand.cs | 2 +- .../KeyValuesWithPaginationQuery.cs | 10 +- .../Specifications/KeyValueAdvancedFilter.cs | 5 +- .../KeyValueAdvancedSpecification.cs | 7 +- .../Features/Loggers/DTOs/LogDto.cs | 2 - .../LogsWithPaginationQuery.cs | 17 +- .../Specifications/LoggerAdvancedFilter.cs | 4 +- .../LoggerAdvancedSpecification.cs | 12 +- .../Products/Caching/ProductCacheKey.cs | 16 +- .../Commands/AddEdit/AddEditProductCommand.cs | 2 +- .../Commands/Delete/DeleteProductCommand.cs | 2 +- .../Queries/Export/ExportProductsQuery.cs | 5 +- .../Queries/GetAll/GetAllProductsQuery.cs | 7 +- .../Pagination/ProductsPaginationQuery.cs | 11 +- .../Specifications/ProductAdvancedFilter.cs | 11 +- .../ProductAdvancedSpecification.cs | 25 +- .../Specifications/ProductListView.cs | 6 +- .../Commands/AddEdit/AddEditTenantCommand.cs | 7 +- .../AddEdit/AddEditTenantCommandValidator.cs | 2 - .../Commands/Delete/DeleteTenantCommand.cs | 7 +- .../Features/Tenants/DTOs/TenantDto.cs | 2 - .../Pagination/TenantsPaginationQuery.cs | 9 +- .../Pipeline/AuthorizationBehaviour.cs | 37 +- .../Pipeline/CacheInvalidationBehaviour.cs | 15 +- .../Pipeline/MemoryCacheBehaviour.cs | 10 +- .../PreProcessors/LoggingPreProcessor.cs | 5 +- .../PreProcessors/ValidationPreProcessor.cs | 7 +- .../Pipeline/UnhandledExceptionBehaviour.cs | 13 +- ...egisterFormModelFluentValidator.ca-ES.resx | 249 +++++------ ...egisterFormModelFluentValidator.de-DE.resx | 249 +++++------ .../RegisterFormModelFluentValidator.en.resx | 249 +++++------ ...egisterFormModelFluentValidator.es-ES.resx | 249 +++++------ ...egisterFormModelFluentValidator.fr-FR.resx | 249 +++++------ ...egisterFormModelFluentValidator.ja-JP.resx | 249 +++++------ ...egisterFormModelFluentValidator.km-KH.resx | 249 +++++------ .../RegisterFormModelFluentValidator.resx | 263 ++++++------ .../RegisterFormModelFluentValidator.ru.resx | 249 +++++------ ...egisterFormModelFluentValidator.zh-CN.resx | 249 +++++------ .../Export/ExportAuditTrailsQuery.ca-ES.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.de-DE.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.en.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.es-ES.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.fr-FR.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.ja-JP.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.km-KH.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.ru.resx | 247 +++++------ .../Export/ExportAuditTrailsQuery.zh-CN.resx | 247 +++++------ ...portDocumentTypesCommandHandler.ca-ES.resx | 241 +++++------ ...portDocumentTypesCommandHandler.de-DE.resx | 241 +++++------ .../ImportDocumentTypesCommandHandler.en.resx | 241 +++++------ ...portDocumentTypesCommandHandler.es-ES.resx | 241 +++++------ ...portDocumentTypesCommandHandler.fr-FR.resx | 241 +++++------ ...portDocumentTypesCommandHandler.ja-JP.resx | 241 +++++------ ...portDocumentTypesCommandHandler.km-KH.resx | 241 +++++------ .../ImportDocumentTypesCommandHandler.resx | 241 +++++------ .../ImportDocumentTypesCommandHandler.ru.resx | 241 +++++------ ...portDocumentTypesCommandHandler.zh-CN.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.ca-ES.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.de-DE.resx | 241 +++++------ .../ExportDocumentTypesQueryHandler.en.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.es-ES.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.fr-FR.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.ja-JP.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.km-KH.resx | 241 +++++------ .../ExportDocumentTypesQueryHandler.resx | 241 +++++------ .../ExportDocumentTypesQueryHandler.ru.resx | 241 +++++------ ...ExportDocumentTypesQueryHandler.zh-CN.resx | 241 +++++------ .../ExportDocumentsQueryHandler.ca-ES.resx | 245 +++++------ .../ExportDocumentsQueryHandler.de-DE.resx | 245 +++++------ .../ExportDocumentsQueryHandler.en.resx | 245 +++++------ .../ExportDocumentsQueryHandler.es-ES.resx | 245 +++++------ .../ExportDocumentsQueryHandler.fr-FR.resx | 245 +++++------ .../ExportDocumentsQueryHandler.ja-JP.resx | 245 +++++------ .../ExportDocumentsQueryHandler.km-KH.resx | 245 +++++------ .../Export/ExportDocumentsQueryHandler.resx | 245 +++++------ .../ExportDocumentsQueryHandler.ru.resx | 245 +++++------ .../ExportDocumentsQueryHandler.zh-CN.resx | 245 +++++------ .../ResetPasswordCommandHandler.ca-ES.resx | 241 +++++------ .../ResetPasswordCommandHandler.de-DE.resx | 241 +++++------ .../ResetPasswordCommandHandler.en.resx | 241 +++++------ .../ResetPasswordCommandHandler.es-ES.resx | 241 +++++------ .../ResetPasswordCommandHandler.fr-FR.resx | 241 +++++------ .../ResetPasswordCommandHandler.ja-JP.resx | 241 +++++------ .../ResetPasswordCommandHandler.km-KH.resx | 241 +++++------ .../ResetPasswordCommandHandler.resx | 241 +++++------ .../ResetPasswordCommandHandler.ru.resx | 241 +++++------ .../ResetPasswordCommandHandler.zh-CN.resx | 241 +++++------ .../ImportKeyValuesCommandHandler.ca-ES.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.de-DE.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.en.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.es-ES.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.fr-FR.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.ja-JP.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.km-KH.resx | 245 +++++------ .../Import/ImportKeyValuesCommandHandler.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.ru.resx | 245 +++++------ .../ImportKeyValuesCommandHandler.zh-CN.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.ca-ES.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.de-DE.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.en.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.es-ES.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.fr-FR.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.ja-JP.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.km-KH.resx | 245 +++++------ .../Export/ExportKeyValuesQueryHandler.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.ru.resx | 245 +++++------ .../ExportKeyValuesQueryHandler.zh-CN.resx | 245 +++++------ .../Export/ExportLogsQueryHandler.ca-ES.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.de-DE.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.en.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.es-ES.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.fr-FR.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.ja-JP.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.km-KH.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.ru.resx | 251 +++++------ .../Export/ExportLogsQueryHandler.zh-CN.resx | 251 +++++------ .../ImportProductsCommandHandler.ca-ES.resx | 249 +++++------ .../ImportProductsCommandHandler.de-DE.resx | 249 +++++------ .../ImportProductsCommandHandler.en.resx | 249 +++++------ .../ImportProductsCommandHandler.es-ES.resx | 249 +++++------ .../ImportProductsCommandHandler.fr-FR.resx | 249 +++++------ .../ImportProductsCommandHandler.ja-JP.resx | 249 +++++------ .../ImportProductsCommandHandler.km-KH.resx | 249 +++++------ .../Import/ImportProductsCommandHandler.resx | 249 +++++------ .../ImportProductsCommandHandler.ru.resx | 249 +++++------ .../ImportProductsCommandHandler.zh-CN.resx | 249 +++++------ .../ExportProductsQueryHandler.ca-ES.resx | 249 +++++------ .../ExportProductsQueryHandler.de-DE.resx | 249 +++++------ .../Export/ExportProductsQueryHandler.en.resx | 249 +++++------ .../ExportProductsQueryHandler.es-ES.resx | 249 +++++------ .../ExportProductsQueryHandler.fr-FR.resx | 249 +++++------ .../ExportProductsQueryHandler.ja-JP.resx | 249 +++++------ .../ExportProductsQueryHandler.km-KH.resx | 249 +++++------ .../Export/ExportProductsQueryHandler.resx | 249 +++++------ .../Export/ExportProductsQueryHandler.ru.resx | 249 +++++------ .../ExportProductsQueryHandler.zh-CN.resx | 249 +++++------ src/Application/_Imports.cs | 2 +- src/Domain/Common/DomainEvent.cs | 5 +- .../Common/Entities/BaseAuditableEntity.cs | 2 +- .../Entities/BaseAuditableSoftDeleteEntity.cs | 3 +- src/Domain/Common/Entities/BaseEntity.cs | 8 +- src/Domain/Common/Entities/IAuditTrial.cs | 2 +- src/Domain/Common/Entities/IEntity.cs | 4 +- src/Domain/Common/Entities/IMustHaveTenant.cs | 4 +- src/Domain/Common/Entities/ISoftDelete.cs | 2 +- .../Common/Entities/OwnerPropertyEntity.cs | 9 +- src/Domain/Common/Enums/ExportType.cs | 1 + src/Domain/Common/Enums/JobStatus.cs | 3 +- src/Domain/Common/Enums/PartnerType.cs | 2 +- src/Domain/Common/Enums/TrackingState.cs | 5 +- src/Domain/Common/Enums/UploadType.cs | 11 +- src/Domain/Common/Events/CreatedEvent.cs | 3 +- src/Domain/Common/Events/DeletedEvent.cs | 3 +- src/Domain/Common/Events/UpdatedEvent.cs | 3 +- .../Exceptions/UnsupportedColourException.cs | 2 +- src/Domain/Common/ValueObject.cs | 14 +- src/Domain/Domain.csproj | 26 +- src/Domain/Entities/AuditTrail.cs | 2 +- src/Domain/Entities/Customer.cs | 4 +- src/Domain/Entities/Document.cs | 4 +- src/Domain/Entities/KeyValue.cs | 14 +- src/Domain/Entities/Logger.cs | 2 +- src/Domain/Entities/Product.cs | 4 +- src/Domain/Entities/Tenant.cs | 5 +- src/Domain/Events/CustomerCreatedEvent.cs | 14 +- src/Domain/Events/CustomerDeletedEvent.cs | 13 +- src/Domain/Events/CustomerUpdatedEvent.cs | 14 +- src/Domain/Identity/ApplicationRole.cs | 11 +- src/Domain/Identity/ApplicationRoleClaim.cs | 1 + src/Domain/Identity/ApplicationUser.cs | 26 +- src/Domain/Identity/ApplicationUserClaim.cs | 2 +- src/Domain/Identity/ApplicationUserLogin.cs | 2 +- src/Domain/Identity/ApplicationUserRole.cs | 3 +- src/Domain/Identity/ApplicationUserToken.cs | 2 +- src/Domain/ValueObjects/Colour.cs | 57 ++- src/Domain/_Imports.cs | 2 +- .../Configurations/DashbordSettings.cs | 32 +- .../Configurations/DatabaseSettings.cs | 6 +- .../Configurations/IdentitySettings.cs | 14 +- .../ClaimTypes/ApplicationClaimTypes.cs | 2 +- .../Constants/ConstantString.cs | 30 +- .../Constants/Database/DbProviderKeys.cs | 3 +- .../Constants/GlobalVariable.cs | 3 +- .../Constants/LocalStorage/LocalStorage.cs | 3 +- .../Localization/LocalizationConstants.cs | 108 ++--- .../Constants/Permission/PermissionModules.cs | 44 +- .../Constants/Permission/Permissions.cs | 45 +- .../Constants/Role/RoleNameConstants.cs | 7 +- .../Constants/User/UserNameConstants.cs | 2 +- src/Infrastructure/DependencyInjection.cs | 67 ++- ...ionProvidersServiceCollectionExtensions.cs | 36 +- .../Extensions/ClaimsPrincipalExtensions.cs | 72 +++- .../Extensions/IdentityResultExtensions.cs | 2 +- .../Extensions/SerilogExtensions.cs | 1 - src/Infrastructure/Infrastructure.csproj | 46 +- .../Persistence/ApplicationDbContext.cs | 7 +- .../ApplicationDbContextInitializer.cs | 116 +++-- .../Persistence/BlazorContextFactory.cs | 9 +- .../Configurations/AuditTrailConfiguration.cs | 11 +- .../Configurations/CustomerConfiguration.cs | 4 +- .../Configurations/DocumentConfiguration.cs | 14 +- .../IdentityUserConfiguration.cs | 46 +- .../Configurations/KeyValueConfiguration.cs | 2 +- .../Configurations/TenantConfiguration.cs | 3 +- .../Conversions/ValueConversionExtensions.cs | 36 +- .../Extensions/ModelBuilderExtensions.cs | 5 +- .../AuditableEntityInterceptor.cs | 86 ++-- .../DispatchDomainEventsInterceptor.cs | 15 +- .../Constants/ConstantString.ca-ES.resx | 347 +++++++-------- .../Constants/ConstantString.de-DE.resx | 347 +++++++-------- .../Constants/ConstantString.en.resx | 351 +++++++-------- .../Constants/ConstantString.es-ES.resx | 347 +++++++-------- .../Constants/ConstantString.fr-FR.resx | 347 +++++++-------- .../Constants/ConstantString.ja-JP.resx | 347 +++++++-------- .../Constants/ConstantString.km-KH.resx | 347 +++++++-------- .../Resources/Constants/ConstantString.resx | 351 +++++++-------- .../Constants/ConstantString.ru.resx | 347 +++++++-------- .../Constants/ConstantString.zh-CN.resx | 351 +++++++-------- .../ApplicationUserClaimsPrincipalFactory.cs | 35 +- .../ConfigureCookieAuthenticationOptions.cs | 6 +- .../Services/CurrentUserService.cs | 2 +- .../Services/DateTimeService.cs | 2 +- src/Infrastructure/Services/ExcelService.cs | 51 +-- .../Services/Identity/IdentityService.cs | 77 ++-- .../Services/Identity/UserDataProvider.cs | 24 +- .../Services/Identity/UsersStateContainer.cs | 15 +- .../Services/InMemoryTicketStore.cs | 23 +- .../Services/JWT/AccessTokenGenerator.cs | 5 +- .../Services/JWT/AccessTokenProvider.cs | 84 ++-- .../Services/JWT/AccessTokenValidator.cs | 16 +- src/Infrastructure/Services/JWT/AuthStore.cs | 11 +- .../Services/JWT/AuthenticatedUserResponse.cs | 5 +- .../Services/JWT/BaseAuthStore.cs | 15 +- .../Services/JWT/DefaultAuthenticator.cs | 45 +- .../Services/JWT/DefaultClaimsProvider.cs | 20 +- .../Services/JWT/IAccessTokenGenerator.cs | 2 +- .../Services/JWT/IAccessTokenValidator.cs | 3 +- .../Services/JWT/IAuthenticator.cs | 3 +- .../Services/JWT/IClaimsProvider.cs | 9 +- .../Services/JWT/ILoginService.cs | 3 +- .../Services/JWT/IRefreshTokenGenerator.cs | 3 +- .../Services/JWT/IRefreshTokenValidator.cs | 3 +- .../Services/JWT/ITokenGeneratorService.cs | 2 +- .../Services/JWT/JwtLoginService.cs | 14 +- .../Services/JWT/JwtSigningOptions.cs | 22 +- .../Services/JWT/RefreshTokenGenerator.cs | 4 +- .../JWT/RefreshTokenNotFoundException.cs | 3 +- .../Services/JWT/RefreshTokenValidator.cs | 16 +- .../Services/JWT/SimpleJwtOptions.cs | 22 +- .../Services/JWT/TokenGeneratorService.cs | 5 +- src/Infrastructure/Services/MailService.cs | 48 +-- .../Services/MultiTenant/TenantProvider.cs | 16 +- src/Infrastructure/Services/PDFService.cs | 173 ++++---- .../Services/PaddleOCR/DocumentOcrJob.cs | 55 +-- .../Serialization/SystemTextJsonSerializer.cs | 23 +- src/Infrastructure/Services/UploadService.cs | 20 +- .../Services/ValidationService.cs | 27 +- src/Infrastructure/_Imports.cs | 2 +- .../Migrators.MSSQL/Migrators.MSSQL.csproj | 22 +- .../Migrators.PostgreSQL.csproj | 22 +- .../Migrators.SqLite/Migrators.SqLite.csproj | 22 +- src/Server.UI/Components/App.razor | 48 +-- .../MultiTenantAutocomplete.razor.cs | 11 +- .../PickSuperiorIdAutocomplete.razor.cs | 7 +- .../PickUserAutocomplete.razor.cs | 30 +- .../PicklistAutocomplete.razor.cs | 10 +- .../Dialogs/ConfirmationDialog.razor | 13 +- .../Dialogs/DeleteConfirmation.razor | 26 +- .../Dialogs/LogoutConfirmation.razor | 21 +- .../Components/Identity/UserLoginState.razor | 40 +- .../Localization/LanguageSelector.razor | 8 +- .../OptionSelect/MudEnumSelect.razor | 13 +- .../Redirections/RedirectToHome.razor | 7 +- .../Redirections/RedirectToLogin.razor | 7 +- src/Server.UI/Components/Routes.razor | 62 ++- .../Components/Shared/CustomError.razor | 18 +- .../Shared/CustomValidation.razor.cs | 14 +- .../Components/Shared/ErrorHandler.razor | 8 +- .../Components/Shared/Layout/HeaderMenu.razor | 45 +- .../Shared/Layout/LoadingScreen.razor | 12 +- .../Components/Shared/Layout/MainLayout.razor | 49 ++- .../Shared/Layout/MudBlazorLogo.razor | 6 +- .../Shared/Layout/NavigationMenu.razor | 20 +- .../Shared/Layout/NotificationMenu.razor | 48 +-- .../Shared/Layout/SearchDialog.razor | 8 +- .../Components/Shared/Layout/UserMenu.razor | 25 +- .../Shared/Themes/ThemesButton.razor | 5 +- .../Components/Shared/Themes/ThemesMenu.razor | 106 +++-- .../Components/Shared/WorldMap.razor | 342 ++++++++++++++- src/Server.UI/Constants/Theme.cs | 76 ++-- src/Server.UI/DependencyInjection.cs | 16 +- .../Extensions/DataGridExtensions.cs | 23 +- src/Server.UI/Extensions/NumericExtensions.cs | 2 +- src/Server.UI/Hubs/HubClient.cs | 29 +- src/Server.UI/Models/DiscordInvite.cs | 2 +- src/Server.UI/Models/GitHubRepository.cs | 5 +- .../Models/Identity/ChangePasswordModel.cs | 2 +- src/Server.UI/Models/Identity/OrgItem.cs | 2 +- .../Models/Identity/PermissionsModel.cs | 2 +- .../Models/Notification/NotificationModel.cs | 2 +- .../Models/Notification/NotificationTypes.cs | 2 +- src/Server.UI/Models/NugetPackage.cs | 72 ++-- src/Server.UI/Models/SharedResource.cs | 2 +- .../Components/CustomerFormDialog.razor | 46 +- .../CustomersAdvancedSearchComponent.razor | 10 +- src/Server.UI/Pages/Customers/Customers.razor | 327 +++++++------- .../Dashboard/Components/LandingSection.razor | 27 +- src/Server.UI/Pages/Dashboard/Dashboard.razor | 400 +++++++++--------- .../Components/DocumentFormDialog.razor | 38 +- .../Components/UploadFilesFormDialog.razor | 71 ++-- src/Server.UI/Pages/Documents/Documents.razor | 216 +++++----- .../Pages/Documents/Documents.razor.js | 1 + .../Identity/Authentication/Forgot.razor | 61 +-- .../Pages/Identity/Authentication/Login.razor | 99 ++--- .../Identity/Authentication/Register.razor | 75 ++-- .../Pages/Identity/Authentication/Reset.razor | 6 +- .../Roles/Components/PermissionsDrawer.razor | 24 +- .../Roles/Components/RoleFormDialog.razor | 14 +- .../Pages/Identity/Roles/Roles.razor | 123 +++--- .../Components/ResetPasswordDialog.razor | 41 +- .../Identity/Users/Components/UserForm.razor | 64 ++- .../Users/Components/UserFormDialog.razor | 18 +- .../Pages/Identity/Users/Profile.razor | 95 +++-- .../Pages/Identity/Users/Users.razor | 315 +++++++------- .../Components/AdvancedSearchProducts.razor | 39 +- .../Components/ProductFormDialog.razor | 46 +- src/Server.UI/Pages/Products/Products.razor | 257 +++++------ .../Pages/SystemManagement/AuditTrails.razor | 146 +++---- .../Components/CreatePicklistDialog.razor | 31 +- .../Components/LogsLineCharts.razor | 80 ++-- .../Pages/SystemManagement/Dictionaries.razor | 218 +++++----- .../Pages/SystemManagement/Logs.razor | 69 ++- .../Pages/Tenants/TenantFormDialog.razor | 31 +- src/Server.UI/Pages/Tenants/Tenants.razor | 99 +++-- src/Server.UI/Program.cs | 4 - .../Localization/LanguageSelector.ar-iq.resx | 251 +++++------ .../Localization/LanguageSelector.ca-ES.resx | 251 +++++------ .../Localization/LanguageSelector.de-DE.resx | 251 +++++------ .../Localization/LanguageSelector.en.resx | 251 +++++------ .../Localization/LanguageSelector.es-ES.resx | 251 +++++------ .../Localization/LanguageSelector.fr-FR.resx | 251 +++++------ .../Localization/LanguageSelector.ja-JP.resx | 251 +++++------ .../Localization/LanguageSelector.km-KH.resx | 251 +++++------ .../Localization/LanguageSelector.resx | 251 +++++------ .../Localization/LanguageSelector.ru.resx | 251 +++++------ .../Localization/LanguageSelector.zh-CN.resx | 251 +++++------ .../Components/Shared/SideMenu.ar-IQ.resx | 279 ++++++------ .../Components/Shared/SideMenu.ca-ES.resx | 279 ++++++------ .../Components/Shared/SideMenu.de-DE.resx | 279 ++++++------ .../Components/Shared/SideMenu.en.resx | 279 ++++++------ .../Components/Shared/SideMenu.es-ES.resx | 279 ++++++------ .../Components/Shared/SideMenu.fr-FR.resx | 279 ++++++------ .../Components/Shared/SideMenu.ja-JP.resx | 279 ++++++------ .../Components/Shared/SideMenu.km-KH.resx | 279 ++++++------ .../Resources/Components/Shared/SideMenu.resx | 279 ++++++------ .../Components/Shared/SideMenu.ru.resx | 279 ++++++------ .../Components/Shared/SideMenu.zh-CN.resx | 279 ++++++------ .../EmailTemplates/_recoverypassword.cshtml | 16 +- .../Resources/EmailTemplates/_welcome.cshtml | 14 +- .../Pages/Authentication/Forgot.ar-IQ.resx | 267 ++++++------ .../Pages/Authentication/Forgot.ca-ES.resx | 270 ++++++------ .../Pages/Authentication/Forgot.de-DE.resx | 270 ++++++------ .../Pages/Authentication/Forgot.en.resx | 270 ++++++------ .../Pages/Authentication/Forgot.es-ES.resx | 270 ++++++------ .../Pages/Authentication/Forgot.fr-FR.resx | 270 ++++++------ .../Pages/Authentication/Forgot.ja-JP.resx | 270 ++++++------ .../Pages/Authentication/Forgot.km-KH.resx | 270 ++++++------ .../Pages/Authentication/Forgot.resx | 269 ++++++------ .../Pages/Authentication/Forgot.ru.resx | 270 ++++++------ .../Pages/Authentication/Forgot.zh-CN.resx | 270 ++++++------ .../Pages/Authentication/Login.ar-IQ.resx | 278 ++++++------ .../Pages/Authentication/Login.ca-ES.resx | 278 ++++++------ .../Pages/Authentication/Login.de-DE.resx | 278 ++++++------ .../Pages/Authentication/Login.en.resx | 278 ++++++------ .../Pages/Authentication/Login.es-ES.resx | 278 ++++++------ .../Pages/Authentication/Login.fr-FR.resx | 278 ++++++------ .../Pages/Authentication/Login.ja-JP.resx | 278 ++++++------ .../Pages/Authentication/Login.km-KH.resx | 278 ++++++------ .../Resources/Pages/Authentication/Login.resx | 278 ++++++------ .../Pages/Authentication/Login.ru.resx | 278 ++++++------ .../Pages/Authentication/Login.zh-CN.resx | 278 ++++++------ .../Pages/Authentication/Register.ar-IQ.resx | 261 ++++++------ .../Pages/Authentication/Register.ca-ES.resx | 261 ++++++------ .../Pages/Authentication/Register.de-DE.resx | 261 ++++++------ .../Pages/Authentication/Register.en.resx | 261 ++++++------ .../Pages/Authentication/Register.es-ES.resx | 261 ++++++------ .../Pages/Authentication/Register.fr-FR.resx | 261 ++++++------ .../Pages/Authentication/Register.ja-JP.resx | 261 ++++++------ .../Pages/Authentication/Register.km-KH.resx | 261 ++++++------ .../Pages/Authentication/Register.resx | 261 ++++++------ .../Pages/Authentication/Register.ru.resx | 261 ++++++------ .../Pages/Authentication/Register.zh-CN.resx | 261 ++++++------ .../Pages/Authentication/Reset.ar-IQ.resx | 239 ++++++----- .../Pages/Authentication/Reset.ca-ES.resx | 239 ++++++----- .../Pages/Authentication/Reset.de-DE.resx | 239 ++++++----- .../Pages/Authentication/Reset.en.resx | 239 ++++++----- .../Pages/Authentication/Reset.es-ES.resx | 239 ++++++----- .../Pages/Authentication/Reset.fr-FR.resx | 239 ++++++----- .../Pages/Authentication/Reset.ja-JP.resx | 239 ++++++----- .../Pages/Authentication/Reset.km-KH.resx | 239 ++++++----- .../Resources/Pages/Authentication/Reset.resx | 239 ++++++----- .../Pages/Authentication/Reset.ru.resx | 239 ++++++----- .../Pages/Authentication/Reset.zh-CN.resx | 239 ++++++----- .../Pages/Documents/Documents.ar-IQ.resx | 277 ++++++------ .../Pages/Documents/Documents.ca-ES.resx | 277 ++++++------ .../Pages/Documents/Documents.de-DE.resx | 277 ++++++------ .../Pages/Documents/Documents.en.resx | 277 ++++++------ .../Pages/Documents/Documents.es-ES.resx | 277 ++++++------ .../Pages/Documents/Documents.fr-FR.resx | 277 ++++++------ .../Pages/Documents/Documents.ja-JP.resx | 277 ++++++------ .../Pages/Documents/Documents.km-KH.resx | 277 ++++++------ .../Resources/Pages/Documents/Documents.resx | 277 ++++++------ .../Pages/Documents/Documents.ru.resx | 277 ++++++------ .../Pages/Documents/Documents.zh-CN.resx | 277 ++++++------ .../Pages/Identity/Roles/Roles.ar-IQ.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.ca-ES.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.de-DE.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.en.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.es-ES.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.fr-FR.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.ja-JP.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.km-KH.resx | 263 ++++++------ .../Resources/Pages/Identity/Roles/Roles.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.ru.resx | 263 ++++++------ .../Pages/Identity/Roles/Roles.zh-CN.resx | 263 ++++++------ .../Pages/Identity/Users/Profile.ar-IQ.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.ca-ES.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.de-DE.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.en.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.es-ES.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.fr-FR.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.ja-JP.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.km-KH.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.ru.resx | 271 ++++++------ .../Pages/Identity/Users/Profile.zh-CN.resx | 271 ++++++------ .../Pages/Identity/Users/Users.ar-IQ.resx | 309 +++++++------- .../Pages/Identity/Users/Users.ca-ES.resx | 309 +++++++------- .../Pages/Identity/Users/Users.de-DE.resx | 309 +++++++------- .../Pages/Identity/Users/Users.en.resx | 309 +++++++------- .../Pages/Identity/Users/Users.es-ES.resx | 309 +++++++------- .../Pages/Identity/Users/Users.fr-FR.resx | 309 +++++++------- .../Pages/Identity/Users/Users.ja-JP.resx | 309 +++++++------- .../Pages/Identity/Users/Users.km-KH.resx | 309 +++++++------- .../Resources/Pages/Identity/Users/Users.resx | 309 +++++++------- .../Pages/Identity/Users/Users.ru.resx | 309 +++++++------- .../Pages/Identity/Users/Users.zh-CN.resx | 309 +++++++------- .../Pages/Products/Products.ar-IQ.resx | 269 ++++++------ .../Pages/Products/Products.ca-ES.resx | 269 ++++++------ .../Pages/Products/Products.de-DE.resx | 269 ++++++------ .../Resources/Pages/Products/Products.en.resx | 269 ++++++------ .../Pages/Products/Products.es-ES.resx | 269 ++++++------ .../Pages/Products/Products.fr-FR.resx | 269 ++++++------ .../Pages/Products/Products.ja-JP.resx | 269 ++++++------ .../Pages/Products/Products.km-KH.resx | 269 ++++++------ .../Resources/Pages/Products/Products.resx | 269 ++++++------ .../Resources/Pages/Products/Products.ru.resx | 269 ++++++------ .../Pages/Products/Products.zh-CN.resx | 269 ++++++------ .../SystemManagement/AuditTrails.ar-IQ.resx | 251 +++++------ .../SystemManagement/AuditTrails.ca-ES.resx | 251 +++++------ .../SystemManagement/AuditTrails.de-DE.resx | 251 +++++------ .../SystemManagement/AuditTrails.en.resx | 251 +++++------ .../SystemManagement/AuditTrails.es-ES.resx | 251 +++++------ .../SystemManagement/AuditTrails.fr-FR.resx | 251 +++++------ .../SystemManagement/AuditTrails.ja-JP.resx | 251 +++++------ .../SystemManagement/AuditTrails.km-KH.resx | 251 +++++------ .../Pages/SystemManagement/AuditTrails.resx | 251 +++++------ .../SystemManagement/AuditTrails.ru.resx | 251 +++++------ .../SystemManagement/AuditTrails.zh-CN.resx | 251 +++++------ .../SystemManagement/Dictionaries.ar-IQ.resx | 251 +++++------ .../SystemManagement/Dictionaries.ca-ES.resx | 251 +++++------ .../SystemManagement/Dictionaries.de-DE.resx | 251 +++++------ .../SystemManagement/Dictionaries.en.resx | 251 +++++------ .../SystemManagement/Dictionaries.es-ES.resx | 251 +++++------ .../SystemManagement/Dictionaries.fr-FR.resx | 251 +++++------ .../SystemManagement/Dictionaries.ja-JP.resx | 251 +++++------ .../SystemManagement/Dictionaries.km-KH.resx | 251 +++++------ .../Pages/SystemManagement/Dictionaries.resx | 251 +++++------ .../SystemManagement/Dictionaries.ru.resx | 251 +++++------ .../SystemManagement/Dictionaries.zh-CN.resx | 251 +++++------ .../Pages/SystemManagement/Logs.ar-IQ.resx | 249 +++++------ .../Pages/SystemManagement/Logs.ca-ES.resx | 249 +++++------ .../Pages/SystemManagement/Logs.de-DE.resx | 249 +++++------ .../Pages/SystemManagement/Logs.en.resx | 249 +++++------ .../Pages/SystemManagement/Logs.es-ES.resx | 249 +++++------ .../Pages/SystemManagement/Logs.fr-FR.resx | 249 +++++------ .../Pages/SystemManagement/Logs.ja-JP.resx | 249 +++++------ .../Pages/SystemManagement/Logs.km-KH.resx | 249 +++++------ .../Pages/SystemManagement/Logs.resx | 249 +++++------ .../Pages/SystemManagement/Logs.ru.resx | 249 +++++------ .../Pages/SystemManagement/Logs.zh-CN.resx | 249 +++++------ .../Pages/Tenants/Tenants.ar-IQ.resx | 253 +++++------ .../Pages/Tenants/Tenants.ca-ES.resx | 253 +++++------ .../Pages/Tenants/Tenants.de-DE.resx | 253 +++++------ .../Resources/Pages/Tenants/Tenants.en.resx | 253 +++++------ .../Pages/Tenants/Tenants.es-ES.resx | 253 +++++------ .../Pages/Tenants/Tenants.fr-FR.resx | 253 +++++------ .../Pages/Tenants/Tenants.ja-JP.resx | 253 +++++------ .../Pages/Tenants/Tenants.km-KH.resx | 253 +++++------ .../Resources/Pages/Tenants/Tenants.resx | 253 +++++------ .../Resources/Pages/Tenants/Tenants.ru.resx | 253 +++++------ .../Pages/Tenants/Tenants.zh-CN.resx | 253 +++++------ .../Shared/SharedResource.ar-IQ.resx | 288 +++++++------ .../Shared/SharedResource.ca-ES.resx | 288 +++++++------ .../Shared/SharedResource.de-DE.resx | 288 +++++++------ .../Resources/Shared/SharedResource.en.resx | 288 +++++++------ .../Shared/SharedResource.es-ES.resx | 288 +++++++------ .../Shared/SharedResource.fr-FR.resx | 288 +++++++------ .../Shared/SharedResource.ja-JP.resx | 288 +++++++------ .../Shared/SharedResource.km-KH.resx | 288 +++++++------ .../Resources/Shared/SharedResource.resx | 288 +++++++------ .../Resources/Shared/SharedResource.ru.resx | 288 +++++++------ .../Shared/SharedResource.zh-CN.resx | 288 +++++++------ src/Server.UI/Server.UI.csproj | 14 +- .../BlazorAuthenticationStateProvider.cs | 12 +- src/Server.UI/Services/JsInterop/Fancybox.cs | 9 +- .../Services/JsInterop/InputClear.cs | 8 +- .../Services/JsInterop/JSInteropConstants.cs | 4 +- .../Services/JsInterop/OpenSeadragon.cs | 7 +- src/Server.UI/Services/JsInterop/OrgChart.cs | 5 +- .../Services/Layout/LayoutService.cs | 97 +++-- .../Services/Navigation/IMenuService.cs | 2 +- .../Notifications/INotificationsService.cs | 1 - .../InMemoryNotificationService.cs | 54 ++- .../Notifications/NotificationMessages.cs | 10 +- .../UserPreferences/UserPreferences.cs | 36 +- .../UserPreferences/UserPreferencesService.cs | 15 +- src/Server.UI/_Imports.cs | 2 +- src/Server.UI/_Imports.razor | 5 +- src/Server.UI/appsettings.json | 2 +- src/Server.UI/wwwroot/js/appInterop.js | 16 +- src/Server.UI/wwwroot/js/fancybox.js | 8 +- src/Server.UI/wwwroot/js/msal/authConfig.js | 2 +- src/Server.UI/wwwroot/js/openseadragon.js | 2 +- src/Server.UI/wwwroot/js/orgchart.js | 14 +- src/Server/Common/Interfaces/ISignalRHub.cs | 1 + src/Server/DependencyInjection.cs | 10 +- src/Server/EndPoints/AuthController.cs | 38 +- .../ExceptionHandlingMiddleware.cs | 23 +- .../HangfireDashboardAuthorizationFilter.cs | 3 +- .../LocalizationCookiesMiddleware.cs | 10 +- .../Middlewares/LocalizationMiddleware.cs | 9 +- src/Server/Server.csproj | 34 +- src/Server/Services/ServerHubWrapper.cs | 3 +- src/Server/_Imports.cs | 2 +- .../Application.IntegrationTests.csproj | 70 +-- .../Commands/AddEditKeyValueCommandTests.cs | 19 +- .../KeyValues/Commands/DeleteKeyValueTests.cs | 56 ++- .../Queries/ExportKeyValuesQueryTests.cs | 8 +- .../KeyValues/Queries/KeyValuesQueryTests.cs | 24 +- .../KeyValuesWithPaginationQueryTests.cs | 26 +- .../Commands/AddEditProductCommandTests.cs | 31 +- .../Commands/DeleteProductCommandTests.cs | 27 +- .../Commands/ImportProductsCommandTests.cs | 7 +- .../Queries/ExportProductsQueryTests.cs | 13 +- .../Queries/GetAllProductsQueryTests.cs | 18 +- .../Queries/ProductsPaginationQueryTests.cs | 20 +- .../Services/PicklistServiceTests.cs | 18 +- .../Services/TenantsServiceTests.cs | 15 +- .../Application.IntegrationTests/TestBase.cs | 19 +- tests/Application.IntegrationTests/Testing.cs | 15 +- .../Application.UnitTests.csproj | 42 +- .../Common/Behaviours/RequestLoggerTests.cs | 12 +- .../Exceptions/ValidationExceptionTests.cs | 32 +- .../Common/Mappings/MappingTests.cs | 12 +- .../Constants/ConstantStringTests.cs | 4 +- .../Domain.UnitTests/Domain.UnitTests.csproj | 38 +- .../ValueObjects/ColourTests.cs | 79 ++-- 672 files changed, 44499 insertions(+), 42741 deletions(-) delete mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index f91d7643c..000000000 --- a/.editorconfig +++ /dev/null @@ -1,362 +0,0 @@ -root = true - -# All files -[*] -indent_style = space - -# Xml files -[*.xml] -indent_size = 2 - -# C# files -[*.cs] - -#### Core EditorConfig Options #### - -# Indentation and spacing -indent_size = 4 -tab_width = 4 - -# New line preferences -end_of_line = crlf -insert_final_newline = false - -#### .NET Coding Conventions #### -[*.{cs,vb}] - -# Organize usings -dotnet_separate_import_directive_groups = false -dotnet_sort_system_directives_first = true -file_header_template = unset - -# this. and Me. preferences -dotnet_style_qualification_for_event = false:silent -dotnet_style_qualification_for_field = false:silent -dotnet_style_qualification_for_method = false:silent -dotnet_style_qualification_for_property = false:silent - -# Language keywords vs BCL types preferences -dotnet_style_predefined_type_for_locals_parameters_members = true:silent -dotnet_style_predefined_type_for_member_access = true:silent - -# Parentheses preferences -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent - -# Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent - -# Expression-level preferences -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_null_propagation = true:suggestion -dotnet_style_object_initializer = true:suggestion -dotnet_style_operator_placement_when_wrapping = beginning_of_line -dotnet_style_prefer_auto_properties = true:suggestion -dotnet_style_prefer_compound_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:suggestion -dotnet_style_prefer_conditional_expression_over_return = true:suggestion -dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion -dotnet_style_prefer_inferred_tuple_names = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion -dotnet_style_prefer_simplified_boolean_expressions = true:suggestion -dotnet_style_prefer_simplified_interpolation = true:suggestion - -# Field preferences -dotnet_style_readonly_field = true:warning - -# Parameter preferences -dotnet_code_quality_unused_parameters = all:suggestion - -# Suppression preferences -dotnet_remove_unnecessary_suppression_exclusions = none - -#### C# Coding Conventions #### -[*.cs] - -# var preferences -csharp_style_var_elsewhere = false:silent -csharp_style_var_for_built_in_types = false:silent -csharp_style_var_when_type_is_apparent = false:silent - -# Expression-bodied members -csharp_style_expression_bodied_accessors = true:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_lambdas = true:suggestion -csharp_style_expression_bodied_local_functions = false:silent -csharp_style_expression_bodied_methods = false:silent -csharp_style_expression_bodied_operators = false:silent -csharp_style_expression_bodied_properties = true:silent - -# Pattern matching preferences -csharp_style_pattern_matching_over_as_with_null_check = true:suggestion -csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion -csharp_style_prefer_not_pattern = true:suggestion -csharp_style_prefer_pattern_matching = true:silent -csharp_style_prefer_switch_expression = true:suggestion - -# Null-checking preferences -csharp_style_conditional_delegate_call = true:suggestion - -# Modifier preferences -csharp_prefer_static_local_function = true:warning -csharp_preferred_modifier_order = public, private, protected, internal, static, extern, new, virtual, abstract, sealed, override, readonly, unsafe, volatile, async:silent - -# Code-block preferences -csharp_prefer_braces = true:silent -csharp_prefer_simple_using_statement = true:suggestion - -# Expression-level preferences -csharp_prefer_simple_default_expression = true:suggestion -csharp_style_deconstructed_variable_declaration = true:suggestion -csharp_style_inlined_variable_declaration = true:suggestion -csharp_style_pattern_local_over_anonymous_function = true:suggestion -csharp_style_prefer_index_operator = true:suggestion -csharp_style_prefer_range_operator = true:suggestion -csharp_style_throw_expression = true:suggestion -csharp_style_unused_value_assignment_preference = discard_variable:suggestion -csharp_style_unused_value_expression_statement_preference = discard_variable:silent - -# 'using' directive preferences -csharp_using_directive_placement = outside_namespace:silent - -#### C# Formatting Rules #### - -# Namespace preferences -csharp_style_namespace_declarations = file_scoped:warning - -# New line preferences -csharp_new_line_before_catch = true -csharp_new_line_before_else = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_open_brace = all -csharp_new_line_between_query_expression_clauses = true - -# Indentation preferences -csharp_indent_block_contents = true -csharp_indent_braces = false -csharp_indent_case_contents = true -csharp_indent_case_contents_when_block = true -csharp_indent_labels = one_less_than_current -csharp_indent_switch_labels = true - -# Space preferences -csharp_space_after_cast = false -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_after_comma = true -csharp_space_after_dot = false -csharp_space_after_keywords_in_control_flow_statements = true -csharp_space_after_semicolon_in_for_statement = true -csharp_space_around_binary_operators = before_and_after -csharp_space_around_declaration_statements = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_before_comma = false -csharp_space_before_dot = false -csharp_space_before_open_square_brackets = false -csharp_space_before_semicolon_in_for_statement = false -csharp_space_between_empty_square_brackets = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_parameter_list_parentheses = false -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_declaration_name_and_open_parenthesis = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = false -csharp_space_between_square_brackets = false - -# Wrapping preferences -csharp_preserve_single_line_blocks = true -csharp_preserve_single_line_statements = true - -#### Naming styles #### -[*.{cs,vb}] - -# Naming rules - -dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.symbols = types_and_namespaces -dotnet_naming_rule.types_and_namespaces_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.interfaces_should_be_ipascalcase.severity = suggestion -dotnet_naming_rule.interfaces_should_be_ipascalcase.symbols = interfaces -dotnet_naming_rule.interfaces_should_be_ipascalcase.style = ipascalcase - -dotnet_naming_rule.type_parameters_should_be_tpascalcase.severity = suggestion -dotnet_naming_rule.type_parameters_should_be_tpascalcase.symbols = type_parameters -dotnet_naming_rule.type_parameters_should_be_tpascalcase.style = tpascalcase - -dotnet_naming_rule.methods_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.methods_should_be_pascalcase.symbols = methods -dotnet_naming_rule.methods_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.properties_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.properties_should_be_pascalcase.symbols = properties -dotnet_naming_rule.properties_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.events_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.events_should_be_pascalcase.symbols = events -dotnet_naming_rule.events_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.local_variables_should_be_camelcase.severity = suggestion -dotnet_naming_rule.local_variables_should_be_camelcase.symbols = local_variables -dotnet_naming_rule.local_variables_should_be_camelcase.style = camelcase - -dotnet_naming_rule.local_constants_should_be_camelcase.severity = suggestion -dotnet_naming_rule.local_constants_should_be_camelcase.symbols = local_constants -dotnet_naming_rule.local_constants_should_be_camelcase.style = camelcase - -dotnet_naming_rule.parameters_should_be_camelcase.severity = suggestion -dotnet_naming_rule.parameters_should_be_camelcase.symbols = parameters -dotnet_naming_rule.parameters_should_be_camelcase.style = camelcase - -dotnet_naming_rule.public_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.public_fields_should_be_pascalcase.symbols = public_fields -dotnet_naming_rule.public_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.private_fields_should_be__camelcase.severity = suggestion -dotnet_naming_rule.private_fields_should_be__camelcase.symbols = private_fields -dotnet_naming_rule.private_fields_should_be__camelcase.style = _camelcase - -dotnet_naming_rule.public_constant_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.public_constant_fields_should_be_pascalcase.symbols = public_constant_fields -dotnet_naming_rule.public_constant_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.private_constant_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.private_constant_fields_should_be_pascalcase.symbols = private_constant_fields -dotnet_naming_rule.private_constant_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.symbols = public_static_readonly_fields -dotnet_naming_rule.public_static_readonly_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.symbols = private_static_readonly_fields -dotnet_naming_rule.private_static_readonly_fields_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.enums_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.enums_should_be_pascalcase.symbols = enums -dotnet_naming_rule.enums_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.local_functions_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.local_functions_should_be_pascalcase.symbols = local_functions -dotnet_naming_rule.local_functions_should_be_pascalcase.style = pascalcase - -dotnet_naming_rule.non_field_members_should_be_pascalcase.severity = suggestion -dotnet_naming_rule.non_field_members_should_be_pascalcase.symbols = non_field_members -dotnet_naming_rule.non_field_members_should_be_pascalcase.style = pascalcase - -# Symbol specifications - -dotnet_naming_symbols.interfaces.applicable_kinds = interface -dotnet_naming_symbols.interfaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.interfaces.required_modifiers = - -dotnet_naming_symbols.enums.applicable_kinds = enum -dotnet_naming_symbols.enums.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.enums.required_modifiers = - -dotnet_naming_symbols.events.applicable_kinds = event -dotnet_naming_symbols.events.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.events.required_modifiers = - -dotnet_naming_symbols.methods.applicable_kinds = method -dotnet_naming_symbols.methods.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.methods.required_modifiers = - -dotnet_naming_symbols.properties.applicable_kinds = property -dotnet_naming_symbols.properties.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.properties.required_modifiers = - -dotnet_naming_symbols.public_fields.applicable_kinds = field -dotnet_naming_symbols.public_fields.applicable_accessibilities = public, internal -dotnet_naming_symbols.public_fields.required_modifiers = - -dotnet_naming_symbols.private_fields.applicable_kinds = field -dotnet_naming_symbols.private_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_fields.required_modifiers = - -dotnet_naming_symbols.private_static_fields.applicable_kinds = field -dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_static_fields.required_modifiers = static - -dotnet_naming_symbols.types_and_namespaces.applicable_kinds = namespace, class, struct, interface, enum -dotnet_naming_symbols.types_and_namespaces.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.types_and_namespaces.required_modifiers = - -dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method -dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected -dotnet_naming_symbols.non_field_members.required_modifiers = - -dotnet_naming_symbols.type_parameters.applicable_kinds = namespace -dotnet_naming_symbols.type_parameters.applicable_accessibilities = * -dotnet_naming_symbols.type_parameters.required_modifiers = - -dotnet_naming_symbols.private_constant_fields.applicable_kinds = field -dotnet_naming_symbols.private_constant_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_constant_fields.required_modifiers = const - -dotnet_naming_symbols.local_variables.applicable_kinds = local -dotnet_naming_symbols.local_variables.applicable_accessibilities = local -dotnet_naming_symbols.local_variables.required_modifiers = - -dotnet_naming_symbols.local_constants.applicable_kinds = local -dotnet_naming_symbols.local_constants.applicable_accessibilities = local -dotnet_naming_symbols.local_constants.required_modifiers = const - -dotnet_naming_symbols.parameters.applicable_kinds = parameter -dotnet_naming_symbols.parameters.applicable_accessibilities = * -dotnet_naming_symbols.parameters.required_modifiers = - -dotnet_naming_symbols.public_constant_fields.applicable_kinds = field -dotnet_naming_symbols.public_constant_fields.applicable_accessibilities = public, internal -dotnet_naming_symbols.public_constant_fields.required_modifiers = const - -dotnet_naming_symbols.public_static_readonly_fields.applicable_kinds = field -dotnet_naming_symbols.public_static_readonly_fields.applicable_accessibilities = public, internal -dotnet_naming_symbols.public_static_readonly_fields.required_modifiers = readonly, static - -dotnet_naming_symbols.private_static_readonly_fields.applicable_kinds = field -dotnet_naming_symbols.private_static_readonly_fields.applicable_accessibilities = private, protected, protected_internal, private_protected -dotnet_naming_symbols.private_static_readonly_fields.required_modifiers = readonly, static - -dotnet_naming_symbols.local_functions.applicable_kinds = local_function -dotnet_naming_symbols.local_functions.applicable_accessibilities = * -dotnet_naming_symbols.local_functions.required_modifiers = - -# Naming styles - -dotnet_naming_style.pascalcase.required_prefix = -dotnet_naming_style.pascalcase.required_suffix = -dotnet_naming_style.pascalcase.word_separator = -dotnet_naming_style.pascalcase.capitalization = pascal_case - -dotnet_naming_style.ipascalcase.required_prefix = I -dotnet_naming_style.ipascalcase.required_suffix = -dotnet_naming_style.ipascalcase.word_separator = -dotnet_naming_style.ipascalcase.capitalization = pascal_case - -dotnet_naming_style.tpascalcase.required_prefix = T -dotnet_naming_style.tpascalcase.required_suffix = -dotnet_naming_style.tpascalcase.word_separator = -dotnet_naming_style.tpascalcase.capitalization = pascal_case - -dotnet_naming_style._camelcase.required_prefix = _ -dotnet_naming_style._camelcase.required_suffix = -dotnet_naming_style._camelcase.word_separator = -dotnet_naming_style._camelcase.capitalization = camel_case - -dotnet_naming_style.camelcase.required_prefix = -dotnet_naming_style.camelcase.required_suffix = -dotnet_naming_style.camelcase.word_separator = -dotnet_naming_style.camelcase.capitalization = camel_case - -dotnet_naming_style.s_camelcase.required_prefix = s_ -dotnet_naming_style.s_camelcase.required_suffix = -dotnet_naming_style.s_camelcase.word_separator = -dotnet_naming_style.s_camelcase.capitalization = camel_case diff --git a/CleanArchitecture.Blazor.nuspec b/CleanArchitecture.Blazor.nuspec index 95bad9fa4..50a1cb967 100644 --- a/CleanArchitecture.Blazor.nuspec +++ b/CleanArchitecture.Blazor.nuspec @@ -1,37 +1,39 @@  - - CleanArchitecture.Blazor.Solution.Template - 1.0.0-preview.17 - Clean Architecture Blazor Solution Template - hl.z - Clean Architecture Blazor Solution Template for .NET 8. - - A Clean Architecture Blazor Server Solution Template for creating a Single-Page Application (SPA) with ASP.NET Core. - - - 1.0.0-preview.17 - - 🌈 support.net 8 - + + CleanArchitecture.Blazor.Solution.Template + 1.0.0-preview.17 + Clean Architecture Blazor Solution Template + hl.z + Clean Architecture Blazor Solution Template for .NET 8. + + A Clean Architecture Blazor Server Solution Template for creating a Single-Page Application (SPA) with + ASP.NET Core. + + + 1.0.0-preview.17 + - 🌈 support.net 8 + - https://github.com/neozhu/CleanArchitectureWithBlazorServer - + https://github.com/neozhu/CleanArchitectureWithBlazorServer + - MIT - false - clean-architecture blazor server application project template csharp - icon.png - README.md + MIT + false + clean-architecture blazor server application project template csharp + icon.png + README.md - - - - + + + + - - - - - + + + + + diff --git a/README.md b/README.md index 2dfd22580..918db647d 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,8 @@ Blazor technology. ## Docker compose https deployment - Create self-signed development certificates for the project - - cmd: `dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\CleanArchitecture.Blazor.Server.UI.pfx -p Password@123` + - + cmd: `dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\CleanArchitecture.Blazor.Server.UI.pfx -p Password@123` - cmd: `dotnet dev-certs https --trust` - Manage User secrets to save the password - cmd: `dotnet user-secrets init` @@ -52,24 +53,26 @@ Blazor technology.
### Install CleanArchitecture CodeGenerator For Blazor App + - Open Manage Extensions Search with `CleanArchitecture CodeGenerator For Blaozr App` -![image](https://github.com/neozhu/CleanArchitectureWithBlazorServer/assets/1549611/555d274c-8f62-438b-ac7a-6d327e4c23c8) + ![image](https://github.com/neozhu/CleanArchitectureWithBlazorServer/assets/1549611/555d274c-8f62-438b-ac7a-6d327e4c23c8) - Download to Install ### CleanArchitecture CodeGenerator For Blazor App Repo + - https://github.com/neozhu/CleanArchitectureCodeGenerator - The code generator can automatically generate the standard code - Application Layer Code - + - ![image](https://user-images.githubusercontent.com/1549611/181414766-84850a90-3a21-47ed-afcf-1b5cdd602edf.png) - Domain Event - + - ![image](https://user-images.githubusercontent.com/1549611/183537303-058d6f49-fc45-4b77-8924-cc2e8266cad7.png) - Blazor UI Layer Code - + - ![image](https://user-images.githubusercontent.com/1549611/181414818-5c1c2dfc-5560-4ab2-8773-dc7c816730d4.png) - Task List - + - ![image](https://user-images.githubusercontent.com/1549611/183537444-3d1b2980-b131-4e9d-bfe1-7b475f760b57.png) ## How to install solution templates @@ -77,7 +80,7 @@ Blazor technology. - install the project template - run CLI: `dotnet new install ./` - run CLI: `dotnet new list` - + image - create a solution with the template @@ -90,12 +93,10 @@ Blazor technology. - create a new project from Clean Architecture for Blazor Server Solution image - - - ## Why I chose Blazor Server -- I hate switching between C# and JavaScript at the same time in order to develop a project, which is why I opted for Blazor Server. +- I hate switching between C# and JavaScript at the same time in order to develop a project, which is why I opted for + Blazor Server. ## Characteristic diff --git a/docker-compose.dcproj b/docker-compose.dcproj index 591947d0e..0290d0819 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -1,22 +1,22 @@ - - 2.1 - Linux - 6bd2ec46-fa8f-44f3-af33-903bbb347116 - LaunchBrowser - {Scheme}://localhost:{ServicePort} - dashboard - - - - - - - - - - - - + + 2.1 + Linux + 6bd2ec46-fa8f-44f3-af33-903bbb347116 + LaunchBrowser + {Scheme}://localhost:{ServicePort} + dashboard + + + + + + + + + + + + \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 98026a1a6..65ec4b7ce 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,8 +14,8 @@ services: #- ASPNETCORE_Kestrel__Certificates__Default__Password=Password@123 #- ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.aspnet/https/CleanArchitecture.Blazor.Server.UI.pfx volumes: - - ${APPDATA}\microsoft\UserSecrets\:/root/.microsoft/usersecrets:ro - - ~/.aspnet/https:/root/.aspnet/https:ro + - ${APPDATA}\microsoft\UserSecrets\:/root/.microsoft/usersecrets:ro + - ~/.aspnet/https:/root/.aspnet/https:ro ports: - "5000:80" - "5001:443" diff --git a/src/Application/Application.csproj b/src/Application/Application.csproj index 97ce5c1c6..fb5fe62e5 100644 --- a/src/Application/Application.csproj +++ b/src/Application/Application.csproj @@ -8,25 +8,25 @@ default - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + diff --git a/src/Application/Common/EventHandlers/CreatedEventHandler.cs b/src/Application/Common/EventHandlers/CreatedEventHandler.cs index 543145f68..c45b4ec94 100644 --- a/src/Application/Common/EventHandlers/CreatedEventHandler.cs +++ b/src/Application/Common/EventHandlers/CreatedEventHandler.cs @@ -19,3 +19,4 @@ // return Task.CompletedTask; // } //} + diff --git a/src/Application/Common/EventHandlers/DeletedEventHandler.cs b/src/Application/Common/EventHandlers/DeletedEventHandler.cs index 777a960dc..2cf348dc0 100644 --- a/src/Application/Common/EventHandlers/DeletedEventHandler.cs +++ b/src/Application/Common/EventHandlers/DeletedEventHandler.cs @@ -18,3 +18,4 @@ // return Task.CompletedTask; // } //} + diff --git a/src/Application/Common/EventHandlers/UpdatedEventHandler.cs b/src/Application/Common/EventHandlers/UpdatedEventHandler.cs index 6204f59fe..af6b7d705 100644 --- a/src/Application/Common/EventHandlers/UpdatedEventHandler.cs +++ b/src/Application/Common/EventHandlers/UpdatedEventHandler.cs @@ -18,3 +18,4 @@ // return Task.CompletedTask; // } //} + diff --git a/src/Application/Common/ExceptionHandlers/ConflictException.cs b/src/Application/Common/ExceptionHandlers/ConflictException.cs index 0716d42d3..71477085c 100644 --- a/src/Application/Common/ExceptionHandlers/ConflictException.cs +++ b/src/Application/Common/ExceptionHandlers/ConflictException.cs @@ -1,8 +1,11 @@ +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class ConflictException : ServerException { public ConflictException(string message) - : base(message, System.Net.HttpStatusCode.Conflict) + : base(message, HttpStatusCode.Conflict) { } -} +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs b/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs index 2918a73e8..4d02021d6 100644 --- a/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs +++ b/src/Application/Common/ExceptionHandlers/DbExceptionHandler.cs @@ -29,7 +29,6 @@ private static string[] GetErrors(DbUpdateException exception) && exception.InnerException != null && exception.InnerException is SqlException sqlException ) - { switch (sqlException.Number) { case 2627: // Unique constraint error @@ -52,7 +51,6 @@ private static string[] GetErrors(DbUpdateException exception) errors.Add("A Missing Parameter has led to Error While Creating the record(s)!"); break; } - } return errors.ToArray(); diff --git a/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs b/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs index a57fed2c7..98eb1e63f 100644 --- a/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs +++ b/src/Application/Common/ExceptionHandlers/ForbiddenAccessException.cs @@ -1,9 +1,13 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; public class ForbiddenException : ServerException { - public ForbiddenException(string message) : base(message,System.Net.HttpStatusCode.Forbidden) { } -} + public ForbiddenException(string message) : base(message, HttpStatusCode.Forbidden) + { + } +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/InternalServerException.cs b/src/Application/Common/ExceptionHandlers/InternalServerException.cs index c81ea2496..c7fe6669b 100644 --- a/src/Application/Common/ExceptionHandlers/InternalServerException.cs +++ b/src/Application/Common/ExceptionHandlers/InternalServerException.cs @@ -1,8 +1,9 @@ namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class InternalServerException : ServerException { public InternalServerException(string message) - : base(message, System.Net.HttpStatusCode.InternalServerError) + : base(message) { } } \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/NotFoundException.cs b/src/Application/Common/ExceptionHandlers/NotFoundException.cs index ffe1808ff..2c5529f0a 100644 --- a/src/Application/Common/ExceptionHandlers/NotFoundException.cs +++ b/src/Application/Common/ExceptionHandlers/NotFoundException.cs @@ -1,18 +1,19 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; public class NotFoundException : ServerException { - - public NotFoundException(string message) - : base(message,System.Net.HttpStatusCode.NotFound) + : base(message, HttpStatusCode.NotFound) { } - public NotFoundException(string name, object key) - : base($"Entity \"{name}\" ({key}) was not found.", System.Net.HttpStatusCode.NotFound) + + public NotFoundException(string name, object key) + : base($"Entity \"{name}\" ({key}) was not found.", HttpStatusCode.NotFound) { } -} +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/ServerException.cs b/src/Application/Common/ExceptionHandlers/ServerException.cs index 5a6aa9771..2de77dfaf 100644 --- a/src/Application/Common/ExceptionHandlers/ServerException.cs +++ b/src/Application/Common/ExceptionHandlers/ServerException.cs @@ -1,16 +1,17 @@ using System.Net; namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class ServerException : Exception { - public IEnumerable ErrorMessages { get; } - - public HttpStatusCode StatusCode { get; } - public ServerException(string message, HttpStatusCode statusCode = HttpStatusCode.InternalServerError) : base(message) { - ErrorMessages = new string[] { message }; + ErrorMessages = new[] { message }; StatusCode = statusCode; } + + public IEnumerable ErrorMessages { get; } + + public HttpStatusCode StatusCode { get; } } \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs b/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs index 7bd1cd996..d10e379a9 100644 --- a/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs +++ b/src/Application/Common/ExceptionHandlers/ServerExceptionHandler.cs @@ -1,7 +1,9 @@ namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; -public class ServerExceptionHandler : IRequestExceptionHandler + +public class + ServerExceptionHandler : IRequestExceptionHandler where TRequest : IRequest> - where TResponse: Result + where TResponse : Result where TException : ServerException { private readonly ILogger> _logger; @@ -11,11 +13,10 @@ public ServerExceptionHandler(ILogger state, CancellationToken cancellationToken) + public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState state, + CancellationToken cancellationToken) { - state.SetHandled((TResponse)Result.Failure(new string[] { exception.Message })); + state.SetHandled((TResponse)Result.Failure(exception.Message)); return Task.CompletedTask; } - - -} +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs b/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs index c6505be82..21419e0bd 100644 --- a/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs +++ b/src/Application/Common/ExceptionHandlers/UnauthorizedException.cs @@ -1,9 +1,11 @@ +using System.Net; + namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; + public class UnauthorizedException : ServerException { public UnauthorizedException(string message) - : base(message, System.Net.HttpStatusCode.Unauthorized) + : base(message, HttpStatusCode.Unauthorized) { } -} - +} \ No newline at end of file diff --git a/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs b/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs index ab4d336ec..15cec28f7 100644 --- a/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs +++ b/src/Application/Common/ExceptionHandlers/ValidationExceptionHandler.cs @@ -1,7 +1,10 @@ namespace CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; -public class ValidationExceptionHandler : IRequestExceptionHandler + +public class + ValidationExceptionHandler : IRequestExceptionHandler where TRequest : IRequest> - where TResponse: Result + where TResponse : Result where TException : ValidationException { private readonly ILogger> _logger; @@ -11,9 +14,11 @@ public ValidationExceptionHandler(ILogger state, CancellationToken cancellationToken) + public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState state, + CancellationToken cancellationToken) { - state.SetHandled((TResponse)Result.Failure(exception.Errors.Select(x => x.ErrorMessage).Distinct().ToArray())); + state.SetHandled( + (TResponse)Result.Failure(exception.Errors.Select(x => x.ErrorMessage).Distinct().ToArray())); return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/DataRowExtensions.cs b/src/Application/Common/Extensions/DataRowExtensions.cs index b7aac1624..675b541f3 100644 --- a/src/Application/Common/Extensions/DataRowExtensions.cs +++ b/src/Application/Common/Extensions/DataRowExtensions.cs @@ -7,30 +7,50 @@ public static class DataRowExtensions { public static T? FieldOrDefault(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) ) ? default(T) : row.Field(columnName); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default + : row.Field(columnName); } + public static decimal? FieldDecimalOrNull(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(decimal?) : Convert.ToDecimal(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default(decimal?) + : Convert.ToDecimal(row[columnName]); } + public static decimal FieldDecimalOrDefault(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(decimal) : Convert.ToDecimal(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default + : Convert.ToDecimal(row[columnName]); } + public static int? FieldIntOrNull(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(int?) : Convert.ToInt32(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default(int?) + : Convert.ToInt32(row[columnName]); } + public static int FieldIntOrDefault(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(int) : Convert.ToInt32(row[columnName]); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default + : Convert.ToInt32(row[columnName]); } + public static DateTime? FieldDateTimeOrNull(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? default(DateTime?) : Convert.ToDateTime(row[columnName], System.Globalization.CultureInfo.InvariantCulture); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? default(DateTime?) + : Convert.ToDateTime(row[columnName], CultureInfo.InvariantCulture); } + public static DateTime FieldDateTimeOrDefaultNow(this DataRow row, string columnName) { - return (row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString())) ? DateTime.Now : Convert.ToDateTime(row[columnName], System.Globalization.CultureInfo.InvariantCulture); + return row.IsNull(columnName) || string.IsNullOrEmpty(row[columnName].ToString()) + ? DateTime.Now + : Convert.ToDateTime(row[columnName], CultureInfo.InvariantCulture); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs b/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs index a630b5e73..ed0938de7 100644 --- a/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs +++ b/src/Application/Common/Extensions/DescriptionAttributeExtensions.cs @@ -1,41 +1,36 @@ namespace CleanArchitecture.Blazor.Application.Common.Extensions; + public static class DescriptionAttributeExtensions { public static string GetDescription(this Enum e) { var name = e.ToString(); var memberInfo = e.GetType().GetMember(name)[0]; - var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), inherit: false); - if (descriptionAttributes.Any()) - { - return ((DescriptionAttribute)descriptionAttributes.First()).Description; - } + var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); + if (descriptionAttributes.Any()) return ((DescriptionAttribute)descriptionAttributes.First()).Description; return name; } - public static string GetMemberDescription(this T t, Expression> property) where T : class + + public static string GetMemberDescription(this T t, Expression> property) + where T : class { if (t is null) t = Activator.CreateInstance(); var memberName = ((MemberExpression)property.Body).Member.Name; var memberInfo = typeof(T).GetMember(memberName).FirstOrDefault(); if (memberInfo != null) { - var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), inherit: false); - if (descriptionAttributes.Any()) - { - return ((DescriptionAttribute)descriptionAttributes.First()).Description; - } + var descriptionAttributes = memberInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); + if (descriptionAttributes.Any()) return ((DescriptionAttribute)descriptionAttributes.First()).Description; } + return memberName; } + public static string GetClassDescription(this T t) where T : class { if (t is null) t = (T)Activator.CreateInstance(typeof(T))!; - var descriptionAttributes = t.GetType().GetCustomAttributes(typeof(DescriptionAttribute), inherit: false); - if (descriptionAttributes.Any()) - { - return (descriptionAttributes.First() as DescriptionAttribute)!.Description; - } + var descriptionAttributes = t.GetType().GetCustomAttributes(typeof(DescriptionAttribute), false); + if (descriptionAttributes.Any()) return (descriptionAttributes.First() as DescriptionAttribute)!.Description; return nameof(t); - } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/QueryableExtensions.cs b/src/Application/Common/Extensions/QueryableExtensions.cs index 461a0caa9..953baa39a 100644 --- a/src/Application/Common/Extensions/QueryableExtensions.cs +++ b/src/Application/Common/Extensions/QueryableExtensions.cs @@ -9,25 +9,32 @@ namespace CleanArchitecture.Blazor.Application.Common.Extensions; public static class QueryableExtensions { /// - /// Extension method to provided query by specification. + /// Extension method to provided query by specification. /// /// - /// This method uses the SpecificationEvaluator to evaluate and modify the provided query based on the given specification. + /// This method uses the SpecificationEvaluator to evaluate and modify the provided query based on the given + /// specification. /// /// Type of the entities in the query /// The original query to which the specification should be applied /// The specification to apply to the query - /// Optional flag to determine if only the criteria should be evaluated or other configurations as well + /// + /// Optional flag to determine if only the criteria should be evaluated or other + /// configurations as well + /// /// The modified query with the specification applied - public static IQueryable ApplySpecification(this IQueryable query, ISpecification spec, bool evaluateCriteriaOnly=false) where T : class, IEntity + public static IQueryable ApplySpecification(this IQueryable query, ISpecification spec, + bool evaluateCriteriaOnly = false) where T : class, IEntity { return SpecificationEvaluator.Default.GetQuery(query, spec, evaluateCriteriaOnly); } + /// - /// Extension method to provided ordered queryable data to a paginated result set. + /// Extension method to provided ordered queryable data to a paginated result set. /// /// - /// This method will apply the given specification to the query, paginate the results, and project them to the desired result type. + /// This method will apply the given specification to the query, paginate the results, and project them to the desired + /// result type. /// /// Source type of the entities in the query /// Destination type to which the entities should be projected @@ -38,14 +45,16 @@ public static IQueryable ApplySpecification(this IQueryable query, ISpe /// Configuration for the projection /// Optional cancellation token to cancel the operation /// The paginated and projected data - public static async Task> ProjectToPaginatedDataAsync(this IOrderedQueryable query, ISpecification spec,int pageNumber,int pageSize, IConfigurationProvider configuration, CancellationToken cancellationToken = default) where T : class, IEntity + public static async Task> ProjectToPaginatedDataAsync( + this IOrderedQueryable query, ISpecification spec, int pageNumber, int pageSize, + IConfigurationProvider configuration, CancellationToken cancellationToken = default) where T : class, IEntity { - var specificationEvaluator = SpecificationEvaluator.Default; - var count =await specificationEvaluator.GetQuery(query,spec).CountAsync(); - var data = await specificationEvaluator.GetQuery(query.AsNoTracking(), spec).Skip((pageNumber-1)* pageSize).Take(pageSize) + var count = await specificationEvaluator.GetQuery(query, spec).CountAsync(); + var data = await specificationEvaluator.GetQuery(query.AsNoTracking(), spec).Skip((pageNumber - 1) * pageSize) + .Take(pageSize) .ProjectTo(configuration) .ToListAsync(cancellationToken); return new PaginatedData(data, count, pageNumber, pageSize); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/StringExtensions.cs b/src/Application/Common/Extensions/StringExtensions.cs index dde7c4305..938b327af 100644 --- a/src/Application/Common/Extensions/StringExtensions.cs +++ b/src/Application/Common/Extensions/StringExtensions.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Security.Cryptography; using System.Text; namespace CleanArchitecture.Blazor.Application.Common.Extensions; @@ -9,23 +10,20 @@ public static class StringExtensions { public static string ToMD5(this string input) { - using (System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create()) + using (var md5 = MD5.Create()) { var encoding = Encoding.ASCII; var data = encoding.GetBytes(input); Span hashBytes = stackalloc byte[16]; - md5.TryComputeHash(data, hashBytes, out int written); + md5.TryComputeHash(data, hashBytes, out var written); if (written != hashBytes.Length) throw new OverflowException(); Span stringBuffer = stackalloc char[32]; - for (int i = 0; i < hashBytes.Length; i++) - { - hashBytes[i].TryFormat(stringBuffer.Slice(2 * i), out _, "x2"); - } + for (var i = 0; i < hashBytes.Length; i++) hashBytes[i].TryFormat(stringBuffer.Slice(2 * i), out _, "x2"); return new string(stringBuffer); } } -} +} \ No newline at end of file diff --git a/src/Application/Common/Extensions/ValidationExtensions.cs b/src/Application/Common/Extensions/ValidationExtensions.cs index 09340114c..15771a9b7 100644 --- a/src/Application/Common/Extensions/ValidationExtensions.cs +++ b/src/Application/Common/Extensions/ValidationExtensions.cs @@ -1,9 +1,12 @@ using FluentValidation.Results; namespace CleanArchitecture.Blazor.Application.Common.Extensions; + public static class ValidationExtensions { - public static async Task> ValidateAsync(this IEnumerable> validators, ValidationContext validationContext, CancellationToken cancellationToken = default) + public static async Task> ValidateAsync( + this IEnumerable> validators, ValidationContext validationContext, + CancellationToken cancellationToken = default) { if (!validators.Any()) return new List(); @@ -23,4 +26,4 @@ public static Dictionary ToDictionary(this List g.Key, g => g.ToArray()) : new Dictionary(); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs b/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs index d5a23304c..d721fdf2f 100644 --- a/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs +++ b/src/Application/Common/Interfaces/Caching/ICacheInvalidatorRequest.cs @@ -5,6 +5,6 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Caching; public interface ICacheInvalidatorRequest : IRequest { - string CacheKey { get => String.Empty; } + string CacheKey => string.Empty; CancellationTokenSource? SharedExpiryTokenSource { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs b/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs index 3e878561b..a307d7530 100644 --- a/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs +++ b/src/Application/Common/Interfaces/Caching/ICacheableRequest.cs @@ -5,6 +5,6 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Caching; public interface ICacheableRequest : IRequest { - string CacheKey { get=>String.Empty; } + string CacheKey => string.Empty; MemoryCacheEntryOptions? Options { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IApplicationDbContext.cs b/src/Application/Common/Interfaces/IApplicationDbContext.cs index cc5bbc619..b10fb1b6a 100644 --- a/src/Application/Common/Interfaces/IApplicationDbContext.cs +++ b/src/Application/Common/Interfaces/IApplicationDbContext.cs @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; using Microsoft.EntityFrameworkCore.ChangeTracking; namespace CleanArchitecture.Blazor.Application.Common.Interfaces; @@ -18,4 +17,4 @@ public interface IApplicationDbContext DbSet Customers { get; set; } ChangeTracker ChangeTracker { get; } Task SaveChangesAsync(CancellationToken cancellationToken); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IApplicationHubWrapper.cs b/src/Application/Common/Interfaces/IApplicationHubWrapper.cs index 5d668e444..1fdaa56ce 100644 --- a/src/Application/Common/Interfaces/IApplicationHubWrapper.cs +++ b/src/Application/Common/Interfaces/IApplicationHubWrapper.cs @@ -5,4 +5,4 @@ public interface IApplicationHubWrapper { Task JobStarted(string message); Task JobCompleted(string message); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IApplicationSettings.cs b/src/Application/Common/Interfaces/IApplicationSettings.cs index 5e14f95e4..f40f0a7c4 100644 --- a/src/Application/Common/Interfaces/IApplicationSettings.cs +++ b/src/Application/Common/Interfaces/IApplicationSettings.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; + public interface IApplicationSettings { /// @@ -16,4 +17,4 @@ public interface IApplicationSettings /// The application name / title /// string AppName { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/ICurrentUserService.cs b/src/Application/Common/Interfaces/ICurrentUserService.cs index ee75fa8ff..f265df840 100644 --- a/src/Application/Common/Interfaces/ICurrentUserService.cs +++ b/src/Application/Common/Interfaces/ICurrentUserService.cs @@ -8,6 +8,5 @@ public interface ICurrentUserService string? UserId { get; set; } string? UserName { get; set; } string? TenantId { get; set; } - string? TenantName { get; set;} - -} + string? TenantName { get; set; } +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IDateTime.cs b/src/Application/Common/Interfaces/IDateTime.cs index f34020874..b666421a3 100644 --- a/src/Application/Common/Interfaces/IDateTime.cs +++ b/src/Application/Common/Interfaces/IDateTime.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IDateTime { DateTime Now { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IDictionaryService.cs b/src/Application/Common/Interfaces/IDictionaryService.cs index ae3c4195e..687317937 100644 --- a/src/Application/Common/Interfaces/IDictionaryService.cs +++ b/src/Application/Common/Interfaces/IDictionaryService.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IDictionaryService { Task> Fetch(string typeName); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IDocumentOcrJob.cs b/src/Application/Common/Interfaces/IDocumentOcrJob.cs index 03fc2f106..8f11b31cf 100644 --- a/src/Application/Common/Interfaces/IDocumentOcrJob.cs +++ b/src/Application/Common/Interfaces/IDocumentOcrJob.cs @@ -7,4 +7,4 @@ public interface IDocumentOcrJob { void Do(int id); Task Recognition(int id, CancellationToken cancellationToken); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IExcelService.cs b/src/Application/Common/Interfaces/IExcelService.cs index 4e013167c..200dcf913 100644 --- a/src/Application/Common/Interfaces/IExcelService.cs +++ b/src/Application/Common/Interfaces/IExcelService.cs @@ -6,11 +6,12 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IExcelService { Task CreateTemplateAsync(IEnumerable fields, string sheetName = "Sheet1"); + Task ExportAsync(IEnumerable data , Dictionary> mappers -, string sheetName = "Sheet1"); + , string sheetName = "Sheet1"); Task>> ImportAsync(byte[] data , Dictionary> mappers , string sheetName = "Sheet1"); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IMailService.cs b/src/Application/Common/Interfaces/IMailService.cs index ebc270985..02e02ceeb 100644 --- a/src/Application/Common/Interfaces/IMailService.cs +++ b/src/Application/Common/Interfaces/IMailService.cs @@ -9,4 +9,4 @@ public interface IMailService { Task SendAsync(string to, string subject, string body); Task SendAsync(string to, string subject, string template, object model); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IPDFService.cs b/src/Application/Common/Interfaces/IPDFService.cs index 6a88f6594..33ef2af8b 100644 --- a/src/Application/Common/Interfaces/IPDFService.cs +++ b/src/Application/Common/Interfaces/IPDFService.cs @@ -8,5 +8,4 @@ public interface IPDFService Task ExportAsync(IEnumerable data , Dictionary> mappers , string title, bool landscape); - -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IPicklistService.cs b/src/Application/Common/Interfaces/IPicklistService.cs index af1d20187..eab7a5fc5 100644 --- a/src/Application/Common/Interfaces/IPicklistService.cs +++ b/src/Application/Common/Interfaces/IPicklistService.cs @@ -1,11 +1,12 @@ using CleanArchitecture.Blazor.Application.Features.KeyValues.DTOs; namespace CleanArchitecture.Blazor.Application.Common.Interfaces; + public interface IPicklistService { - List DataSource { get; } + List DataSource { get; } event Action? OnChange; Task InitializeAsync(); void Initialize(); Task Refresh(); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IResult.cs b/src/Application/Common/Interfaces/IResult.cs index 413097c8d..5f5c74540 100644 --- a/src/Application/Common/Interfaces/IResult.cs +++ b/src/Application/Common/Interfaces/IResult.cs @@ -9,7 +9,8 @@ public interface IResult bool Succeeded { get; init; } } + public interface IResult : IResult { T? Data { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IService.cs b/src/Application/Common/Interfaces/IService.cs index 0bdb58d46..a3ff17305 100644 --- a/src/Application/Common/Interfaces/IService.cs +++ b/src/Application/Common/Interfaces/IService.cs @@ -5,4 +5,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IService { -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IUploadService.cs b/src/Application/Common/Interfaces/IUploadService.cs index 1c1708658..e42e408d2 100644 --- a/src/Application/Common/Interfaces/IUploadService.cs +++ b/src/Application/Common/Interfaces/IUploadService.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces; public interface IUploadService { Task UploadAsync(UploadRequest request); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/IValidationService.cs b/src/Application/Common/Interfaces/IValidationService.cs index ef8b52225..a4110f58e 100644 --- a/src/Application/Common/Interfaces/IValidationService.cs +++ b/src/Application/Common/Interfaces/IValidationService.cs @@ -1,15 +1,22 @@ using FluentValidation.Internal; namespace CleanArchitecture.Blazor.Application.Common.Interfaces; + public interface IValidationService { Func>> ValidateValue(); + // NOTE: providing the model as parameter is not required, // it's just easier to write and nicer to read in the blazor component // instead of the explicit declaration of the model type Func>> ValidateValue(TRequest _); - Task> ValidateAsync(TRequest model, CancellationToken cancellationToken = default); - Task> ValidateAsync(TRequest model, Action> options, CancellationToken cancellationToken = default); - Task> ValidatePropertyAsync(TRequest model, string propertyName, CancellationToken cancellationToken = default); + Task> ValidateAsync(TRequest model, + CancellationToken cancellationToken = default); + + Task> ValidateAsync(TRequest model, + Action> options, CancellationToken cancellationToken = default); + + Task> ValidatePropertyAsync(TRequest model, string propertyName, + CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs b/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs index c4a9faeae..f75e5a762 100644 --- a/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs +++ b/src/Application/Common/Interfaces/Identity/DTOs/RefreshTokenRequest.cs @@ -5,11 +5,12 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity.DTOs; public class RefreshTokenRequest { - public RefreshTokenRequest(string token,string refreshToken) + public RefreshTokenRequest(string token, string refreshToken) { Token = token; RefreshToken = refreshToken; } + public string Token { get; set; } public string RefreshToken { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs b/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs index 397557b3e..e6677dee1 100644 --- a/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs +++ b/src/Application/Common/Interfaces/Identity/DTOs/TokenRequest.cs @@ -8,4 +8,4 @@ public class TokenRequest public string? UserName { get; set; } public string? Password { get; set; } public bool RememberMe { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs b/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs index 40b046c83..f2091d826 100644 --- a/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs +++ b/src/Application/Common/Interfaces/Identity/DTOs/TokenResponse.cs @@ -9,4 +9,4 @@ public class TokenResponse public string? RefreshToken { get; set; } public string? ProfilePictureDataUrl { get; set; } public DateTime? RefreshTokenExpiryTime { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IIdentityService.cs b/src/Application/Common/Interfaces/Identity/IIdentityService.cs index 76f066d40..afb0ed233 100644 --- a/src/Application/Common/Interfaces/Identity/IIdentityService.cs +++ b/src/Application/Common/Interfaces/Identity/IIdentityService.cs @@ -16,4 +16,4 @@ public interface IIdentityService : IService Task GetApplicationUserDto(string userId, CancellationToken cancellation = default); string GetUserName(string userId); Task?> GetUsers(string? tenantId, CancellationToken cancellation = default); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs b/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs index b4b3c0079..49d07c7f0 100644 --- a/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs +++ b/src/Application/Common/Interfaces/Identity/IIdentitySettings.cs @@ -1,40 +1,41 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; + public interface IIdentitySettings { // Password settings. /// - /// Gets or sets a value indicating whether a password should require a digit. + /// Gets or sets a value indicating whether a password should require a digit. /// bool RequireDigit { get; } /// - /// Gets or sets a value indicating what the minimum required length of a password should be. + /// Gets or sets a value indicating what the minimum required length of a password should be. /// int RequiredLength { get; } /// - /// Gets or sets a value indicating what the maximum required length of a password should be. + /// Gets or sets a value indicating what the maximum required length of a password should be. /// int MaxLength { get; } /// - /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. + /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. /// bool RequireNonAlphanumeric { get; } /// - /// Gets or sets a value indicating whether a password should require an upper-case character. + /// Gets or sets a value indicating whether a password should require an upper-case character. /// bool RequireUpperCase { get; } /// - /// Gets or sets a value indicating whether a password should require an lower-case character. + /// Gets or sets a value indicating whether a password should require an lower-case character. /// bool RequireLowerCase { get; } // Lockout settings. /// - /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. + /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. /// int DefaultLockoutTimeSpan { get; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs b/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs index 04e7ccf81..1ef0ca7ab 100644 --- a/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs +++ b/src/Application/Common/Interfaces/Identity/IUserDataProvider.cs @@ -1,8 +1,7 @@ - - using CleanArchitecture.Blazor.Application.Features.Identity.DTOs; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; + public interface IUserDataProvider { List DataSource { get; } @@ -10,4 +9,4 @@ public interface IUserDataProvider Task InitializeAsync(); void Initialize(); Task Refresh(); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs b/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs index f68bf7806..1a584665a 100644 --- a/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs +++ b/src/Application/Common/Interfaces/Identity/IUsersStateContainer.cs @@ -1,10 +1,11 @@ using System.Collections.Concurrent; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; + public interface IUsersStateContainer { ConcurrentDictionary UsersByConnectionId { get; } event Action? OnChange; void AddOrUpdate(string connectionId, string? name); void Remove(string connectionId); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs b/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs index 873e39f35..da0f6a29e 100644 --- a/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs +++ b/src/Application/Common/Interfaces/MultiTenant/ITenantService.cs @@ -1,6 +1,7 @@ using CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; + public interface ITenantService { List DataSource { get; } @@ -8,4 +9,4 @@ public interface ITenantService Task InitializeAsync(); void Initialize(); Task Refresh(); -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs b/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs index 07c2ac520..23fd1697e 100644 --- a/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs +++ b/src/Application/Common/Interfaces/Serialization/DefaultJsonSerializerOptions.cs @@ -3,13 +3,14 @@ using System.Text.Unicode; namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; + public class DefaultJsonSerializerOptions { - public static JsonSerializerOptions Options => new() + public static JsonSerializerOptions Options => new() { Encoder = JavaScriptEncoder.Create(UnicodeRanges.BasicLatin, UnicodeRanges.CjkUnifiedIdeographs), PropertyNamingPolicy = JsonNamingPolicy.CamelCase, PropertyNameCaseInsensitive = true, Converters = { new JsonStringEnumConverter(JsonNamingPolicy.CamelCase) } }; -} +} \ No newline at end of file diff --git a/src/Application/Common/Interfaces/Serialization/ISerializer.cs b/src/Application/Common/Interfaces/Serialization/ISerializer.cs index bf398ec2e..918132cf5 100644 --- a/src/Application/Common/Interfaces/Serialization/ISerializer.cs +++ b/src/Application/Common/Interfaces/Serialization/ISerializer.cs @@ -1,8 +1,9 @@ namespace CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; + public interface ISerializer { string Serialize(T value) where T : class; T? Deserialize(string value) where T : class; byte[] SerializeBytes(T value) where T : class; T? DeserializeBytes(byte[] value) where T : class; -} +} \ No newline at end of file diff --git a/src/Application/Common/Mappings/MappingExtensions.cs b/src/Application/Common/Mappings/MappingExtensions.cs index 2c9f2332f..05b7366e9 100644 --- a/src/Application/Common/Mappings/MappingExtensions.cs +++ b/src/Application/Common/Mappings/MappingExtensions.cs @@ -5,11 +5,22 @@ namespace CleanArchitecture.Blazor.Application.Common.Mappings; public static class MappingExtensions { - public static Task> PaginatedListAsync(this IQueryable queryable, ISpecification spec, int pageNumber, int pageSize, CancellationToken cancellationToken = default) where TDestination : class - => PaginatedList.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); - - public static Task> PaginatedDataAsync(this IQueryable queryable, int pageNumber, int pageSize) where TDestination : class - => PaginatedData.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); - public static Task> ProjectToListAsync(this IQueryable queryable, IConfigurationProvider configuration) where TDestination : class - => queryable.ProjectTo(configuration).AsNoTracking().ToListAsync(); -} + public static Task> PaginatedListAsync( + this IQueryable queryable, ISpecification spec, int pageNumber, int pageSize, + CancellationToken cancellationToken = default) where TDestination : class + { + return PaginatedList.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); + } + + public static Task> PaginatedDataAsync( + this IQueryable queryable, int pageNumber, int pageSize) where TDestination : class + { + return PaginatedData.CreateAsync(queryable.AsNoTracking(), pageNumber, pageSize); + } + + public static Task> ProjectToListAsync(this IQueryable queryable, + IConfigurationProvider configuration) where TDestination : class + { + return queryable.ProjectTo(configuration).AsNoTracking().ToListAsync(); + } +} \ No newline at end of file diff --git a/src/Application/Common/Models/MailRequest.cs b/src/Application/Common/Models/MailRequest.cs index 6d817a470..f377aee5d 100644 --- a/src/Application/Common/Models/MailRequest.cs +++ b/src/Application/Common/Models/MailRequest.cs @@ -9,4 +9,4 @@ public class MailRequest public string? Subject { get; set; } public string? Body { get; set; } public string? From { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginatedData.cs b/src/Application/Common/Models/PaginatedData.cs index 1d8b4a7d0..a421af683 100644 --- a/src/Application/Common/Models/PaginatedData.cs +++ b/src/Application/Common/Models/PaginatedData.cs @@ -5,23 +5,25 @@ namespace CleanArchitecture.Blazor.Application.Common.Models; public class PaginatedData { - public int CurrentPage { get; private set; } - public int TotalItems { get; private set; } - public int TotalPages { get; private set; } - public bool HasPreviousPage => CurrentPage > 1; - public bool HasNextPage => CurrentPage < TotalPages; - public IEnumerable Items { get; set; } - public PaginatedData(IEnumerable items, int total,int pageIndex,int pageSize) + public PaginatedData(IEnumerable items, int total, int pageIndex, int pageSize) { Items = items; TotalItems = total; CurrentPage = pageIndex; TotalPages = (int)Math.Ceiling(total / (double)pageSize); } + + public int CurrentPage { get; } + public int TotalItems { get; private set; } + public int TotalPages { get; } + public bool HasPreviousPage => CurrentPage > 1; + public bool HasNextPage => CurrentPage < TotalPages; + public IEnumerable Items { get; set; } + public static async Task> CreateAsync(IQueryable source, int pageIndex, int pageSize) { var count = await source.CountAsync(); var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync(); return new PaginatedData(items, count, pageIndex, pageSize); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginatedList.cs b/src/Application/Common/Models/PaginatedList.cs index a34846846..b140fc9ca 100644 --- a/src/Application/Common/Models/PaginatedList.cs +++ b/src/Application/Common/Models/PaginatedList.cs @@ -28,15 +28,19 @@ public static async Task> CreateAsync(IQueryable source, return new PaginatedList(items, count, pageNumber, pageSize); } } + public class PaginatedList : PaginatedList { - public IReadOnlyCollection Items { get; } - public PaginatedList( IReadOnlyCollection items, int count, int pageNumber, - int pageSize) : base(count, pageNumber, pageSize) => Items = items; + int pageSize) : base(count, pageNumber, pageSize) + { + Items = items; + } + + public IReadOnlyCollection Items { get; } public static async Task> CreateAsync(IQueryable source, int pageIndex, int pageSize) @@ -46,4 +50,4 @@ public static async Task> CreateAsync(IQueryable source, int return new PaginatedList(items, count, pageIndex, pageSize); } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginationFilter.cs b/src/Application/Common/Models/PaginationFilter.cs index cadd36c42..dc498e608 100644 --- a/src/Application/Common/Models/PaginationFilter.cs +++ b/src/Application/Common/Models/PaginationFilter.cs @@ -1,16 +1,20 @@ namespace CleanArchitecture.Blazor.Application.Common.Models; -public partial class PaginationFilter : BaseFilter +public class PaginationFilter : BaseFilter { public int PageNumber { get; set; } = 1; public int PageSize { get; set; } = 15; public string OrderBy { get; set; } = "Id"; public string SortDirection { get; set; } = "Descending"; - public override string ToString() => $"PageNumber:{PageNumber},PageSize:{PageSize},OrderBy:{OrderBy},SortDirection:{SortDirection},Keyword:{Keyword}"; + + public override string ToString() + { + return + $"PageNumber:{PageNumber},PageSize:{PageSize},OrderBy:{OrderBy},SortDirection:{SortDirection},Keyword:{Keyword}"; + } } public class BaseFilter { public string? Keyword { get; set; } -} - +} \ No newline at end of file diff --git a/src/Application/Common/Models/PaginationRequest.cs b/src/Application/Common/Models/PaginationRequest.cs index 5d61e1e72..46447c254 100644 --- a/src/Application/Common/Models/PaginationRequest.cs +++ b/src/Application/Common/Models/PaginationRequest.cs @@ -10,5 +10,9 @@ public abstract class PaginationRequest public int Rows { get; set; } = 15; public string Sort { get; set; } = "Id"; public string Order { get; set; } = "desc"; - public override string ToString() => $"page:{Page},rows:{Rows},sort:{Sort},order:{Order},filterRule:{FilterRules}"; -} + + public override string ToString() + { + return $"page:{Page},rows:{Rows},sort:{Sort},order:{Order},filterRule:{FilterRules}"; + } +} \ No newline at end of file diff --git a/src/Application/Common/Models/Result.cs b/src/Application/Common/Models/Result.cs index c36ef32dd..8914d3027 100644 --- a/src/Application/Common/Models/Result.cs +++ b/src/Application/Common/Models/Result.cs @@ -9,55 +9,61 @@ internal Result() { Errors = new string[] { }; } + internal Result(bool succeeded, IEnumerable errors) { Succeeded = succeeded; Errors = errors.ToArray(); } + public string ErrorMessage => string.Join(", ", Errors ?? new string[] { }); + public bool Succeeded { get; init; } public string[] Errors { get; init; } - public string ErrorMessage => string.Join(", ", Errors ?? new string[] { }); - public static Result Success() { return new Result(true, Array.Empty()); } + public static Task SuccessAsync() { return Task.FromResult(new Result(true, Array.Empty())); } + public static Result Failure(params string[] errors) { return new Result(false, errors); } + public static Task FailureAsync(params string[] errors) { return Task.FromResult(new Result(false, errors)); } } + public class Result : Result, IResult { - public T? Data { get; set; } - public static new Result Failure(params string[] errors) + public new static Result Failure(params string[] errors) { return new Result { Succeeded = false, Errors = errors.ToArray() }; } - public static new async Task> FailureAsync(params string[] errors) + + public new static async Task> FailureAsync(params string[] errors) { return await Task.FromResult(Failure(errors)); } + public static Result Success(T data) { return new Result { Succeeded = true, Data = data }; } + public static async Task> SuccessAsync(T data) { return await Task.FromResult(Success(data)); } -} - +} \ No newline at end of file diff --git a/src/Application/Common/Models/UploadRequest.cs b/src/Application/Common/Models/UploadRequest.cs index 72a879dfd..2891f4327 100644 --- a/src/Application/Common/Models/UploadRequest.cs +++ b/src/Application/Common/Models/UploadRequest.cs @@ -1,13 +1,11 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Common.Enums; - namespace CleanArchitecture.Blazor.Application.Common.Models; public class UploadRequest { - public UploadRequest(string fileName, UploadType uploadType, byte[] data) + public UploadRequest(string fileName, UploadType uploadType, byte[] data) { FileName = fileName; UploadType = uploadType; @@ -18,4 +16,4 @@ public UploadRequest(string fileName, UploadType uploadType, byte[] data) public string? Extension { get; set; } public UploadType UploadType { get; set; } public byte[] Data { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Models/UserProfile.cs b/src/Application/Common/Models/UserProfile.cs index c9fdbe35f..51b55557b 100644 --- a/src/Application/Common/Models/UserProfile.cs +++ b/src/Application/Common/Models/UserProfile.cs @@ -7,16 +7,15 @@ public class UserProfile public string? SuperiorId { get; set; } public string? ProfilePictureDataUrl { get; set; } public string? DisplayName { get; set; } - public required string UserName { get; set; } - public required string Email { get; set; } + public required string UserName { get; set; } + public required string Email { get; set; } public string? PhoneNumber { get; set; } public string? DefaultRole { get; set; } public string[]? AssignedRoles { get; set; } - public required string UserId { get; set; }=Guid.NewGuid().ToString(); + public required string UserId { get; set; } = Guid.NewGuid().ToString(); public bool IsActive { get; set; } public string? TenantId { get; set; } public string? TenantName { get; set; } - } public class UserProfileEditValidator : AbstractValidator diff --git a/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs b/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs index 27d73ecf0..ed8286af7 100644 --- a/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs +++ b/src/Application/Common/PublishStrategies/ParallelNoWaitPublisher.cs @@ -1,13 +1,13 @@ namespace CleanArchitecture.Blazor.Application.Common.PublishStrategies; + public class ParallelNoWaitPublisher : INotificationPublisher { - public Task Publish(IEnumerable handlerExecutors, INotification notification, CancellationToken cancellationToken) + public Task Publish(IEnumerable handlerExecutors, INotification notification, + CancellationToken cancellationToken) { foreach (var handler in handlerExecutors) - { Task.Run(() => handler.HandlerCallback(notification, cancellationToken)); - } return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/src/Application/Common/Security/LoginFormModel.cs b/src/Application/Common/Security/LoginFormModel.cs index f590d6562..637f2a81a 100644 --- a/src/Application/Common/Security/LoginFormModel.cs +++ b/src/Application/Common/Security/LoginFormModel.cs @@ -1,5 +1,3 @@ -using FluentValidation.Results; - namespace CleanArchitecture.Blazor.Application.Common.Security; public class LoginFormModel @@ -24,6 +22,4 @@ public LoginFormModelFluentValidator(IStringLocalizer { - private readonly IStringLocalizer _localizer; private readonly IIdentitySettings _identitySettings; + private readonly IStringLocalizer _localizer; public RegisterFormModelFluentValidator( IStringLocalizer localizer, @@ -22,16 +22,21 @@ public RegisterFormModelFluentValidator( .MaximumLength(255) .EmailAddress(); RuleFor(p => p.Password).NotEmpty().WithMessage(_localizer["CannotBeEmpty"]) - .MinimumLength(_identitySettings!.RequiredLength).WithMessage(string.Format(_localizer["MinLength"], _identitySettings.RequiredLength)) - .MaximumLength(_identitySettings.MaxLength).WithMessage(string.Format(_localizer["MaxLength"], _identitySettings.MaxLength)) - .Matches(_identitySettings.RequireUpperCase ? @"[A-Z]+" : string.Empty).WithMessage(_localizer["MustContainUpperCase"]) - .Matches(_identitySettings.RequireLowerCase ? @"[a-z]+" : string.Empty).WithMessage(_localizer["MustContainLowerCase"]) - .Matches(_identitySettings.RequireDigit ? @"[0-9]+" : string.Empty).WithMessage(_localizer["MustContainDigit"]) - .Matches(_identitySettings.RequireNonAlphanumeric ? @"[\@\!\?\*\.]+" : string.Empty).WithMessage(_localizer["MustContainAlphanumericCharacter"]); + .MinimumLength(_identitySettings!.RequiredLength) + .WithMessage(string.Format(_localizer["MinLength"], _identitySettings.RequiredLength)) + .MaximumLength(_identitySettings.MaxLength) + .WithMessage(string.Format(_localizer["MaxLength"], _identitySettings.MaxLength)) + .Matches(_identitySettings.RequireUpperCase ? @"[A-Z]+" : string.Empty) + .WithMessage(_localizer["MustContainUpperCase"]) + .Matches(_identitySettings.RequireLowerCase ? @"[a-z]+" : string.Empty) + .WithMessage(_localizer["MustContainLowerCase"]) + .Matches(_identitySettings.RequireDigit ? @"[0-9]+" : string.Empty) + .WithMessage(_localizer["MustContainDigit"]) + .Matches(_identitySettings.RequireNonAlphanumeric ? @"[\@\!\?\*\.]+" : string.Empty) + .WithMessage(_localizer["MustContainAlphanumericCharacter"]); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.Password); + .Equal(x => x.Password); RuleFor(x => x.AgreeToTerms) .Equal(true); } -} - +} \ No newline at end of file diff --git a/src/Application/Common/Security/RequestAuthorizeAttribute.cs b/src/Application/Common/Security/RequestAuthorizeAttribute.cs index 2340474ad..ffc07d8fd 100644 --- a/src/Application/Common/Security/RequestAuthorizeAttribute.cs +++ b/src/Application/Common/Security/RequestAuthorizeAttribute.cs @@ -5,23 +5,25 @@ namespace CleanArchitecture.Blazor.Application.Common.Security; #nullable disable /// -/// Specifies the class this attribute is applied to requires authorization. +/// Specifies the class this attribute is applied to requires authorization. /// -[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)] +[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public class RequestAuthorizeAttribute : Attribute { /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - public RequestAuthorizeAttribute() { } + public RequestAuthorizeAttribute() + { + } /// - /// Gets or sets a comma delimited list of roles that are allowed to access the resource. + /// Gets or sets a comma delimited list of roles that are allowed to access the resource. /// public string Roles { get; set; } = string.Empty; /// - /// Gets or sets the policy name that determines access to the resource. + /// Gets or sets the policy name that determines access to the resource. /// public string Policy { get; set; } = string.Empty; -} +} \ No newline at end of file diff --git a/src/Application/DependencyInjection.cs b/src/Application/DependencyInjection.cs index d63013418..aad1005e8 100644 --- a/src/Application/DependencyInjection.cs +++ b/src/Application/DependencyInjection.cs @@ -31,5 +31,4 @@ public static IServiceCollection AddApplication(this IServiceCollection services return services; } - -} +} \ No newline at end of file diff --git a/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs b/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs index f64c8345c..605be887b 100644 --- a/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs +++ b/src/Application/Features/AuditTrails/DTOs/AuditTrailDto.cs @@ -3,14 +3,13 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; using CleanArchitecture.Blazor.Application.Features.Identity.DTOs; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.DTOs; [Description("Audit Trails")] public class AuditTrailDto { - [Description("Id")] public int Id { get; set; } + [Description("Id")] public int Id { get; set; } [Description("User Id")] public string? UserId { get; set; } diff --git a/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs b/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs index dfadbdfbe..4305df792 100644 --- a/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs +++ b/src/Application/Features/AuditTrails/Queries/PaginationQuery/AuditTrailsWithPaginationQuery.cs @@ -4,16 +4,16 @@ using CleanArchitecture.Blazor.Application.Features.AuditTrails.Caching; using CleanArchitecture.Blazor.Application.Features.AuditTrails.DTOs; using CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Queries.PaginationQuery; public class AuditTrailsWithPaginationQuery : AuditTrailAdvancedFilter, ICacheableRequest> { - + public AuditTrailAdvancedSpecification Specification => new(this); + public string CacheKey => AuditTrailsCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => AuditTrailsCacheKey.MemoryCacheEntryOptions; - public AuditTrailAdvancedSpecification Specification => new AuditTrailAdvancedSpecification(this); + public override string ToString() { return @@ -42,10 +42,9 @@ public async Task> Handle(AuditTrailsWithPagination CancellationToken cancellationToken) { var data = await _context.AuditTrails.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } -} - - +} \ No newline at end of file diff --git a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs index 8e906ebb3..09e6516c1 100644 --- a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs +++ b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedFilter.cs @@ -1,17 +1,16 @@ -using CleanArchitecture.Blazor.Domain.Entities; +namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; -namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; public enum AuditTrailListView { [Description("All")] All, [Description("My Change Histories")] My, [Description("Created Toady")] CreatedToday, - [Description("View of the last 30 days")] - Last30days + [Description("View of the last 30 days")] Last30days } + public class AuditTrailAdvancedFilter : PaginationFilter { public AuditType? AuditType { get; set; } public AuditTrailListView ListView { get; set; } = AuditTrailListView.All; public UserProfile? CurrentUser { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs index f8427047c..723a2b4e4 100644 --- a/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs +++ b/src/Application/Features/AuditTrails/Specifications/AuditTrailAdvancedSpecification.cs @@ -1,6 +1,4 @@ -using CleanArchitecture.Blazor.Domain.Entities; - -namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; +namespace CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; #nullable disable warnings public class AuditTrailAdvancedSpecification : Specification { @@ -16,10 +14,10 @@ public AuditTrailAdvancedSpecification(AuditTrailAdvancedFilter filter) CultureInfo.CurrentCulture); Query.Where(p => p.AuditType == filter.AuditType, filter.AuditType is not null) - .Where(p => p.UserId == filter.CurrentUser.UserId, filter.ListView == AuditTrailListView.My && filter.CurrentUser is not null) - .Where(p => p.DateTime.Date == DateTime.Now.Date, filter.ListView == AuditTrailListView.CreatedToday) - .Where(p => p.DateTime >= last30day, filter.ListView == AuditTrailListView.Last30days) - .Where(x => x.TableName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); - + .Where(p => p.UserId == filter.CurrentUser.UserId, + filter.ListView == AuditTrailListView.My && filter.CurrentUser is not null) + .Where(p => p.DateTime.Date == DateTime.Now.Date, filter.ListView == AuditTrailListView.CreatedToday) + .Where(p => p.DateTime >= last30day, filter.ListView == AuditTrailListView.Last30days) + .Where(x => x.TableName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } } \ No newline at end of file diff --git a/src/Application/Features/Customers/Caching/CustomerCacheKey.cs b/src/Application/Features/Customers/Caching/CustomerCacheKey.cs index cf6315c7d..8652c14c5 100644 --- a/src/Application/Features/Customers/Caching/CustomerCacheKey.cs +++ b/src/Application/Features/Customers/Caching/CustomerCacheKey.cs @@ -5,31 +5,41 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Caching; public static class CustomerCacheKey { - private static readonly TimeSpan refreshInterval = TimeSpan.FromHours(3); public const string GetAllCacheKey = "all-Customers"; - public static string GetPaginationCacheKey(string parameters) { + private static readonly TimeSpan refreshInterval = TimeSpan.FromHours(3); + private static CancellationTokenSource _tokensource; + + static CustomerCacheKey() + { + _tokensource = new CancellationTokenSource(refreshInterval); + } + + public static MemoryCacheEntryOptions MemoryCacheEntryOptions => + new MemoryCacheEntryOptions().AddExpirationToken(new CancellationChangeToken(SharedExpiryTokenSource().Token)); + + public static string GetPaginationCacheKey(string parameters) + { return $"CustomerCacheKey:CustomersWithPaginationQuery,{parameters}"; } - public static string GetByNameCacheKey(string parameters) { + + public static string GetByNameCacheKey(string parameters) + { return $"CustomerCacheKey:GetByNameCacheKey,{parameters}"; } - public static string GetByIdCacheKey(string parameters) { - return $"CustomerCacheKey:GetByIdCacheKey,{parameters}"; - } - static CustomerCacheKey() + + public static string GetByIdCacheKey(string parameters) { - _tokensource = new CancellationTokenSource(refreshInterval); + return $"CustomerCacheKey:GetByIdCacheKey,{parameters}"; } - private static CancellationTokenSource _tokensource; + public static CancellationTokenSource SharedExpiryTokenSource() { - if (_tokensource.IsCancellationRequested) - { - _tokensource = new CancellationTokenSource(refreshInterval); - } + if (_tokensource.IsCancellationRequested) _tokensource = new CancellationTokenSource(refreshInterval); return _tokensource; } - public static void Refresh() => SharedExpiryTokenSource().Cancel(); - public static MemoryCacheEntryOptions MemoryCacheEntryOptions => new MemoryCacheEntryOptions().AddExpirationToken(new CancellationChangeToken(SharedExpiryTokenSource().Token)); -} + public static void Refresh() + { + SharedExpiryTokenSource().Cancel(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs index b649270aa..5da21b515 100644 --- a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommand.cs @@ -1,70 +1,70 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; + namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.AddEdit; -public class AddEditCustomerCommand: ICacheInvalidatorRequest> +public class AddEditCustomerCommand : ICacheInvalidatorRequest> { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} + [Description("Id")] public int Id { get; set; } + [Description("Name")] public string Name { get; set; } = string.Empty; - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + [Description("Description")] public string? Description { get; set; } + + + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); - CreateMap(MemberList.None); - + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } } - public class AddEditCustomerCommandHandler : IRequestHandler> +public class AddEditCustomerCommandHandler : IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + + public AddEditCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public AddEditCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) + _context = context; + _localizer = localizer; + _mapper = mapper; + } + + public async Task> Handle(AddEditCustomerCommand request, CancellationToken cancellationToken) + { + if (request.Id > 0) { - _context = context; - _localizer = localizer; - _mapper = mapper; + var item = await _context.Customers.FindAsync(new object[] { request.Id }, cancellationToken) ?? + throw new NotFoundException($"Customer with id: [{request.Id}] not found."); + item = _mapper.Map(request, item); + // raise a update domain event + item.AddDomainEvent(new CustomerUpdatedEvent(item)); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); } - public async Task> Handle(AddEditCustomerCommand request, CancellationToken cancellationToken) + else { - if (request.Id > 0) - { - var item = await _context.Customers.FindAsync(new object[] { request.Id }, cancellationToken) ?? throw new NotFoundException($"Customer with id: [{request.Id}] not found."); - item = _mapper.Map(request, item); - // raise a update domain event - item.AddDomainEvent(new CustomerUpdatedEvent(item)); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } - else - { - var item = _mapper.Map(request); - // raise a create domain event - item.AddDomainEvent(new CustomerCreatedEvent(item)); - _context.Customers.Add(item); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } - + var item = _mapper.Map(request); + // raise a create domain event + item.AddDomainEvent(new CustomerCreatedEvent(item)); + _context.Customers.Add(item); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); } } - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs index 24bc7cab8..06d3287c1 100644 --- a/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/AddEdit/AddEditCustomerCommandValidator.cs @@ -7,11 +7,8 @@ public class AddEditCustomerCommandValidator : AbstractValidator v.Name) - .MaximumLength(256) - .NotEmpty(); - - } - -} - + RuleFor(v => v.Name) + .MaximumLength(256) + .NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs index 7022200e2..9ec75b071 100644 --- a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommand.cs @@ -1,55 +1,56 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.ComponentModel; -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; + using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Create; -public class CreateCustomerCommand: ICacheInvalidatorRequest> +public class CreateCustomerCommand : ICacheInvalidatorRequest> { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} - - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + [Description("Id")] public int Id { get; set; } + + [Description("Name")] public string Name { get; set; } = string.Empty; + + [Description("Description")] public string? Description { get; set; } + + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); - CreateMap(MemberList.None); + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } } - - public class CreateCustomerCommandHandler : IRequestHandler> + +public class CreateCustomerCommandHandler : IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + + public CreateCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public CreateCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _mapper = mapper; - } - public async Task> Handle(CreateCustomerCommand request, CancellationToken cancellationToken) - { - var item = _mapper.Map(request); - // raise a create domain event - item.AddDomainEvent(new CustomerCreatedEvent(item)); - _context.Customers.Add(item); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } + _context = context; + _localizer = localizer; + _mapper = mapper; } + public async Task> Handle(CreateCustomerCommand request, CancellationToken cancellationToken) + { + var item = _mapper.Map(request); + // raise a create domain event + item.AddDomainEvent(new CustomerCreatedEvent(item)); + _context.Customers.Add(item); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs index 07b663c29..75aadf0ae 100644 --- a/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Create/CreateCustomerCommandValidator.cs @@ -5,14 +5,10 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Creat public class CreateCustomerCommandValidator : AbstractValidator { - public CreateCustomerCommandValidator() - { - - RuleFor(v => v.Name) - .MaximumLength(256) - .NotEmpty(); - - } - -} - + public CreateCustomerCommandValidator() + { + RuleFor(v => v.Name) + .MaximumLength(256) + .NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs index 0b47278bd..cc5c731e8 100644 --- a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommand.cs @@ -3,49 +3,50 @@ using CleanArchitecture.Blazor.Application.Features.Customers.Caching; - namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Delete; - public class DeleteCustomerCommand: ICacheInvalidatorRequest> +public class DeleteCustomerCommand : ICacheInvalidatorRequest> +{ + public DeleteCustomerCommand(int[] id) { - public int[] Id { get; } - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); - public DeleteCustomerCommand(int[] id) - { Id = id; - } } - public class DeleteCustomerCommandHandler : - IRequestHandler> + public int[] Id { get; } + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); +} + +public class DeleteCustomerCommandHandler : + IRequestHandler> + +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + public DeleteCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public DeleteCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _mapper = mapper; - } - public async Task> Handle(DeleteCustomerCommand request, CancellationToken cancellationToken) + _context = context; + _localizer = localizer; + _mapper = mapper; + } + + public async Task> Handle(DeleteCustomerCommand request, CancellationToken cancellationToken) + { + var items = await _context.Customers.Where(x => request.Id.Contains(x.Id)).ToListAsync(cancellationToken); + foreach (var item in items) { - var items = await _context.Customers.Where(x=>request.Id.Contains(x.Id)).ToListAsync(cancellationToken); - foreach (var item in items) - { - // raise a delete domain event - item.AddDomainEvent(new CustomerDeletedEvent(item)); - _context.Customers.Remove(item); - } - var result = await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(result); + // raise a delete domain event + item.AddDomainEvent(new CustomerDeletedEvent(item)); + _context.Customers.Remove(item); } + var result = await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(result); } - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs index 32f8fafba..93241aac1 100644 --- a/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Delete/DeleteCustomerCommandValidator.cs @@ -5,12 +5,8 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Delet public class DeleteCustomerCommandValidator : AbstractValidator { - public DeleteCustomerCommandValidator() - { - - RuleFor(v => v.Id).NotNull().ForEach(v=>v.GreaterThan(0)); - - } -} - - + public DeleteCustomerCommandValidator() + { + RuleFor(v => v.Id).NotNull().ForEach(v => v.GreaterThan(0)); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs index 8fbb86d39..42395de1e 100644 --- a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs +++ b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommand.cs @@ -1,92 +1,99 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Import; - public class ImportCustomersCommand: ICacheInvalidatorRequest> - { - public string FileName { get; set; } - public byte[] Data { get; set; } - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); - public ImportCustomersCommand(string fileName,byte[] data) - { - FileName = fileName; - Data = data; - } - } - public record class CreateCustomersTemplateCommand : IRequest> +public class ImportCustomersCommand : ICacheInvalidatorRequest> +{ + public ImportCustomersCommand(string fileName, byte[] data) { - + FileName = fileName; + Data = data; } - public class ImportCustomersCommandHandler : - IRequestHandler>, - IRequestHandler> - { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - private readonly IExcelService _excelService; - private readonly CustomerDto _dto = new(); + public string FileName { get; set; } + public byte[] Data { get; set; } + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); +} - public ImportCustomersCommandHandler( - IApplicationDbContext context, - IExcelService excelService, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _excelService = excelService; - _mapper = mapper; - } - #nullable disable warnings - public async Task> Handle(ImportCustomersCommand request, CancellationToken cancellationToken) - { +public record class CreateCustomersTemplateCommand : IRequest> +{ +} - var result = await _excelService.ImportAsync(request.Data, mappers: new Dictionary> - { - { _localizer[_dto.GetMemberDescription(x=>x.Name)], (row, item) => item.Name = row[_localizer[_dto.GetMemberDescription(x=>x.Name)]].ToString() }, -{ _localizer[_dto.GetMemberDescription(x=>x.Description)], (row, item) => item.Description = row[_localizer[_dto.GetMemberDescription(x=>x.Description)]].ToString() }, +public class ImportCustomersCommandHandler : + IRequestHandler>, + IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly CustomerDto _dto = new(); + private readonly IExcelService _excelService; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; - }, _localizer[_dto.GetClassDescription()]); - if (result.Succeeded && result.Data is not null) + public ImportCustomersCommandHandler( + IApplicationDbContext context, + IExcelService excelService, + IStringLocalizer localizer, + IMapper mapper + ) + { + _context = context; + _localizer = localizer; + _excelService = excelService; + _mapper = mapper; + } +#nullable disable warnings + public async Task> Handle(ImportCustomersCommand request, CancellationToken cancellationToken) + { + var result = await _excelService.ImportAsync(request.Data, + new Dictionary> { - foreach (var dto in result.Data) { - var exists = await _context.Customers.AnyAsync(x => x.Name == dto.Name, cancellationToken); - if (!exists) - { - var item = _mapper.Map(dto); - // add create domain events if this entity implement the IHasDomainEvent interface - // item.AddDomainEvent(new CustomerCreatedEvent(item)); - await _context.Customers.AddAsync(item, cancellationToken); - } - } - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(result.Data.Count()); - } - else - { - return await Result.FailureAsync(result.Errors); - } - } - public async Task> Handle(CreateCustomersTemplateCommand request, CancellationToken cancellationToken) + _localizer[_dto.GetMemberDescription(x => x.Name)], + (row, item) => item.Name = row[_localizer[_dto.GetMemberDescription(x => x.Name)]].ToString() + }, + { + _localizer[_dto.GetMemberDescription(x => x.Description)], + (row, item) => + item.Description = row[_localizer[_dto.GetMemberDescription(x => x.Description)]].ToString() + } + }, _localizer[_dto.GetClassDescription()]); + if (result.Succeeded && result.Data is not null) { - // TODO: Implement ImportCustomersCommandHandler method - var fields = new string[] { - // TODO: Define the fields that should be generate in the template, for example: - _localizer[_dto.GetMemberDescription(x=>x.Name)], -_localizer[_dto.GetMemberDescription(x=>x.Description)], + foreach (var dto in result.Data) + { + var exists = await _context.Customers.AnyAsync(x => x.Name == dto.Name, cancellationToken); + if (!exists) + { + var item = _mapper.Map(dto); + // add create domain events if this entity implement the IHasDomainEvent interface + // item.AddDomainEvent(new CustomerCreatedEvent(item)); + await _context.Customers.AddAsync(item, cancellationToken); + } + } - }; - var result = await _excelService.CreateTemplateAsync(fields, _localizer[_dto.GetClassDescription()]); - return await Result.SuccessAsync(result); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(result.Data.Count()); } + + return await Result.FailureAsync(result.Errors); } + public async Task> Handle(CreateCustomersTemplateCommand request, + CancellationToken cancellationToken) + { + // TODO: Implement ImportCustomersCommandHandler method + var fields = new string[] + { + // TODO: Define the fields that should be generate in the template, for example: + _localizer[_dto.GetMemberDescription(x => x.Name)], + _localizer[_dto.GetMemberDescription(x => x.Description)] + }; + var result = await _excelService.CreateTemplateAsync(fields, _localizer[_dto.GetClassDescription()]); + return await Result.SuccessAsync(result); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs index 1791c5109..6744f8f57 100644 --- a/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Import/ImportCustomersCommandValidator.cs @@ -5,13 +5,10 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Impor public class ImportCustomersCommandValidator : AbstractValidator { - public ImportCustomersCommandValidator() - { - - RuleFor(v => v.Data) - .NotNull() - .NotEmpty(); - - } -} - + public ImportCustomersCommandValidator() + { + RuleFor(v => v.Data) + .NotNull() + .NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs index 10f6d1468..f1290510c 100644 --- a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs +++ b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommand.cs @@ -1,56 +1,57 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.ComponentModel; -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; + using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Update; -public class UpdateCustomerCommand: ICacheInvalidatorRequest> +public class UpdateCustomerCommand : ICacheInvalidatorRequest> { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} - - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + [Description("Id")] public int Id { get; set; } + + [Description("Name")] public string Name { get; set; } = string.Empty; + + [Description("Description")] public string? Description { get; set; } + + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public CancellationTokenSource? SharedExpiryTokenSource => CustomerCacheKey.SharedExpiryTokenSource(); + private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); - CreateMap(MemberList.None); + CreateMap(MemberList.None); + CreateMap(MemberList.None); } } } - public class UpdateCustomerCommandHandler : IRequestHandler> - { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; - public UpdateCustomerCommandHandler( - IApplicationDbContext context, - IStringLocalizer localizer, - IMapper mapper - ) - { - _context = context; - _localizer = localizer; - _mapper = mapper; - } - public async Task> Handle(UpdateCustomerCommand request, CancellationToken cancellationToken) - { +public class UpdateCustomerCommandHandler : IRequestHandler> +{ + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; - var item =await _context.Customers.FindAsync( new object[] { request.Id }, cancellationToken)?? throw new NotFoundException($"Customer with id: [{request.Id}] not found."); - item = _mapper.Map(request, item); - // raise a update domain event - item.AddDomainEvent(new CustomerUpdatedEvent(item)); - await _context.SaveChangesAsync(cancellationToken); - return await Result.SuccessAsync(item.Id); - } + public UpdateCustomerCommandHandler( + IApplicationDbContext context, + IStringLocalizer localizer, + IMapper mapper + ) + { + _context = context; + _localizer = localizer; + _mapper = mapper; } + public async Task> Handle(UpdateCustomerCommand request, CancellationToken cancellationToken) + { + var item = await _context.Customers.FindAsync(new object[] { request.Id }, cancellationToken) ?? + throw new NotFoundException($"Customer with id: [{request.Id}] not found."); + item = _mapper.Map(request, item); + // raise a update domain event + item.AddDomainEvent(new CustomerUpdatedEvent(item)); + await _context.SaveChangesAsync(cancellationToken); + return await Result.SuccessAsync(item.Id); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs index 35f4d6949..a6335bfdf 100644 --- a/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs +++ b/src/Application/Features/Customers/Commands/Update/UpdateCustomerCommandValidator.cs @@ -5,12 +5,9 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.Commands.Updat public class UpdateCustomerCommandValidator : AbstractValidator { - public UpdateCustomerCommandValidator() - { - RuleFor(v => v.Id).NotNull(); - RuleFor(v => v.Name).MaximumLength(256).NotEmpty(); - - } - -} - + public UpdateCustomerCommandValidator() + { + RuleFor(v => v.Id).NotNull(); + RuleFor(v => v.Name).MaximumLength(256).NotEmpty(); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/DTOs/CustomerDto.cs b/src/Application/Features/Customers/DTOs/CustomerDto.cs index d95caf1a7..25e085945 100644 --- a/src/Application/Features/Customers/DTOs/CustomerDto.cs +++ b/src/Application/Features/Customers/DTOs/CustomerDto.cs @@ -1,18 +1,16 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.ComponentModel; namespace CleanArchitecture.Blazor.Application.Features.Customers.DTOs; [Description("Customers")] public class CustomerDto { - [Description("Id")] - public int Id { get; set; } - [Description("Name")] - public string Name {get;set;} = String.Empty; - [Description("Description")] - public string? Description {get;set;} + [Description("Id")] public int Id { get; set; } + + [Description("Name")] public string Name { get; set; } = string.Empty; + + [Description("Description")] public string? Description { get; set; } private class Mapping : Profile @@ -22,5 +20,4 @@ public Mapping() CreateMap().ReverseMap(); } } -} - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs b/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs index 6266dc629..5e33e672a 100644 --- a/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs +++ b/src/Application/Features/Customers/EventHandlers/CustomerCreatedEventHandler.cs @@ -5,17 +5,18 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.EventHandlers; public class CustomerCreatedEventHandler : INotificationHandler { - private readonly ILogger _logger; + private readonly ILogger _logger; - public CustomerCreatedEventHandler( - ILogger logger - ) - { - _logger = logger; - } - public Task Handle(CustomerCreatedEvent notification, CancellationToken cancellationToken) - { - _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); - return Task.CompletedTask; - } -} + public CustomerCreatedEventHandler( + ILogger logger + ) + { + _logger = logger; + } + + public Task Handle(CustomerCreatedEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs b/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs index 94d2bda2d..f910bbd44 100644 --- a/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs +++ b/src/Application/Features/Customers/EventHandlers/CustomerDeletedEventHandler.cs @@ -3,19 +3,20 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.EventHandlers; - public class CustomerDeletedEventHandler : INotificationHandler +public class CustomerDeletedEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public CustomerDeletedEventHandler( + ILogger logger + ) { - private readonly ILogger _logger; + _logger = logger; + } - public CustomerDeletedEventHandler( - ILogger logger - ) - { - _logger = logger; - } - public Task Handle(CustomerDeletedEvent notification, CancellationToken cancellationToken) - { - _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); - return Task.CompletedTask; - } + public Task Handle(CustomerDeletedEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); + return Task.CompletedTask; } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs b/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs index 569cdd1fa..e30c99136 100644 --- a/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs +++ b/src/Application/Features/Customers/EventHandlers/CustomerUpdatedEventHandler.cs @@ -3,19 +3,20 @@ namespace CleanArchitecture.Blazor.Application.Features.Customers.EventHandlers; - public class CustomerUpdatedEventHandler : INotificationHandler +public class CustomerUpdatedEventHandler : INotificationHandler +{ + private readonly ILogger _logger; + + public CustomerUpdatedEventHandler( + ILogger logger + ) { - private readonly ILogger _logger; + _logger = logger; + } - public CustomerUpdatedEventHandler( - ILogger logger - ) - { - _logger = logger; - } - public Task Handle(CustomerUpdatedEvent notification, CancellationToken cancellationToken) - { - _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); - return Task.CompletedTask; - } + public Task Handle(CustomerUpdatedEvent notification, CancellationToken cancellationToken) + { + _logger.LogInformation("Domain Event: {DomainEvent}", notification.GetType().FullName); + return Task.CompletedTask; } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs b/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs index dc724a3ce..de7b3659c 100644 --- a/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs +++ b/src/Application/Features/Customers/Queries/Export/ExportCustomersQuery.cs @@ -3,52 +3,50 @@ using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Specifications; -using CleanArchitecture.Blazor.Application.Features.Customers.Queries.Pagination; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.Export; public class ExportCustomersQuery : CustomerAdvancedFilter, IRequest> { - public CustomerAdvancedSpecification Specification => new CustomerAdvancedSpecification(this); + public CustomerAdvancedSpecification Specification => new(this); } - + public class ExportCustomersQueryHandler : - IRequestHandler> + IRequestHandler> { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IExcelService _excelService; - private readonly IStringLocalizer _localizer; - private readonly CustomerDto _dto = new(); - public ExportCustomersQueryHandler( - IApplicationDbContext context, - IMapper mapper, - IExcelService excelService, - IStringLocalizer localizer - ) - { - _context = context; - _mapper = mapper; - _excelService = excelService; - _localizer = localizer; - } - #nullable disable warnings - public async Task> Handle(ExportCustomersQuery request, CancellationToken cancellationToken) - { - var data = await _context.Customers.ApplySpecification(request.Specification) - .OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectTo(_mapper.ConfigurationProvider) - .AsNoTracking() - .ToListAsync(cancellationToken); - var result = await _excelService.ExportAsync(data, - new Dictionary>() - { - // TODO: Define the fields that should be exported, for example: - {_localizer[_dto.GetMemberDescription(x=>x.Name)],item => item.Name}, -{_localizer[_dto.GetMemberDescription(x=>x.Description)],item => item.Description}, - - } - , _localizer[_dto.GetClassDescription()]); - return await Result.SuccessAsync(result); - } -} + private readonly IApplicationDbContext _context; + private readonly CustomerDto _dto = new(); + private readonly IExcelService _excelService; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; + public ExportCustomersQueryHandler( + IApplicationDbContext context, + IMapper mapper, + IExcelService excelService, + IStringLocalizer localizer + ) + { + _context = context; + _mapper = mapper; + _excelService = excelService; + _localizer = localizer; + } +#nullable disable warnings + public async Task> Handle(ExportCustomersQuery request, CancellationToken cancellationToken) + { + var data = await _context.Customers.ApplySpecification(request.Specification) + .OrderBy($"{request.OrderBy} {request.SortDirection}") + .ProjectTo(_mapper.ConfigurationProvider) + .AsNoTracking() + .ToListAsync(cancellationToken); + var result = await _excelService.ExportAsync(data, + new Dictionary> + { + // TODO: Define the fields that should be exported, for example: + { _localizer[_dto.GetMemberDescription(x => x.Name)], item => item.Name }, + { _localizer[_dto.GetMemberDescription(x => x.Description)], item => item.Description } + } + , _localizer[_dto.GetClassDescription()]); + return await Result.SuccessAsync(result); + } +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs b/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs index 9424595ad..14342b034 100644 --- a/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs +++ b/src/Application/Features/Customers/Queries/GetAll/GetAllCustomersQuery.cs @@ -1,43 +1,42 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.GetAll; public class GetAllCustomersQuery : ICacheableRequest> { - public string CacheKey => CustomerCacheKey.GetAllCacheKey; - public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; + public string CacheKey => CustomerCacheKey.GetAllCacheKey; + public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; } public class GetAllCustomersQueryHandler : - IRequestHandler> + IRequestHandler> { private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; public GetAllCustomersQueryHandler( IApplicationDbContext context, IMapper mapper, IStringLocalizer localizer - ) + ) { _context = context; _mapper = mapper; _localizer = localizer; } - public async Task> Handle(GetAllCustomersQuery request, CancellationToken cancellationToken) + public async Task> Handle(GetAllCustomersQuery request, + CancellationToken cancellationToken) { var data = await _context.Customers - .ProjectTo(_mapper.ConfigurationProvider) - .AsNoTracking() - .ToListAsync(cancellationToken); + .ProjectTo(_mapper.ConfigurationProvider) + .AsNoTracking() + .ToListAsync(cancellationToken); return data; } -} - - +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs b/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs index cde636f1f..83e2ee69b 100644 --- a/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs +++ b/src/Application/Features/Customers/Queries/GetById/GetCustomerByIdQuery.cs @@ -1,31 +1,31 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Specifications; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.GetById; public class GetCustomerByIdQuery : ICacheableRequest { - public required int Id { get; set; } - public string CacheKey => CustomerCacheKey.GetByIdCacheKey($"{Id}"); - public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; + public required int Id { get; set; } + public string CacheKey => CustomerCacheKey.GetByIdCacheKey($"{Id}"); + public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; } public class GetCustomerByIdQueryHandler : - IRequestHandler + IRequestHandler { private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; public GetCustomerByIdQueryHandler( IApplicationDbContext context, IMapper mapper, IStringLocalizer localizer - ) + ) { _context = context; _mapper = mapper; @@ -35,8 +35,9 @@ IStringLocalizer localizer public async Task Handle(GetCustomerByIdQuery request, CancellationToken cancellationToken) { var data = await _context.Customers.ApplySpecification(new CustomerByIdSpecification(request.Id)) - .ProjectTo(_mapper.ConfigurationProvider) - .FirstAsync(cancellationToken) ?? throw new NotFoundException($"Customer with id: [{request.Id}] not found."); + .ProjectTo(_mapper.ConfigurationProvider) + .FirstAsync(cancellationToken) ?? + throw new NotFoundException($"Customer with id: [{request.Id}] not found."); return data; } -} +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs b/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs index e26ed3497..2ac032150 100644 --- a/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs +++ b/src/Application/Features/Customers/Queries/Pagination/CustomersPaginationQuery.cs @@ -1,45 +1,48 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Caching; +using CleanArchitecture.Blazor.Application.Features.Customers.DTOs; using CleanArchitecture.Blazor.Application.Features.Customers.Specifications; namespace CleanArchitecture.Blazor.Application.Features.Customers.Queries.Pagination; public class CustomersWithPaginationQuery : CustomerAdvancedFilter, ICacheableRequest> { + public CustomerAdvancedSpecification Specification => new(this); + public string CacheKey => CustomerCacheKey.GetPaginationCacheKey($"{this}"); + public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; + public override string ToString() { return $"Listview:{ListView}, Search:{Keyword}, {OrderBy}, {SortDirection}, {PageNumber}, {PageSize}"; } - public string CacheKey => CustomerCacheKey.GetPaginationCacheKey($"{this}"); - public MemoryCacheEntryOptions? Options => CustomerCacheKey.MemoryCacheEntryOptions; - public CustomerAdvancedSpecification Specification => new CustomerAdvancedSpecification(this); } - + public class CustomersWithPaginationQueryHandler : - IRequestHandler> + IRequestHandler> { - private readonly IApplicationDbContext _context; - private readonly IMapper _mapper; - private readonly IStringLocalizer _localizer; + private readonly IApplicationDbContext _context; + private readonly IStringLocalizer _localizer; + private readonly IMapper _mapper; - public CustomersWithPaginationQueryHandler( - IApplicationDbContext context, - IMapper mapper, - IStringLocalizer localizer - ) - { - _context = context; - _mapper = mapper; - _localizer = localizer; - } + public CustomersWithPaginationQueryHandler( + IApplicationDbContext context, + IMapper mapper, + IStringLocalizer localizer + ) + { + _context = context; + _mapper = mapper; + _localizer = localizer; + } - public async Task> Handle(CustomersWithPaginationQuery request, CancellationToken cancellationToken) - { - var data = await _context.Customers.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); - return data; - } + public async Task> Handle(CustomersWithPaginationQuery request, + CancellationToken cancellationToken) + { + var data = await _context.Customers.OrderBy($"{request.OrderBy} {request.SortDirection}") + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + return data; + } } \ No newline at end of file diff --git a/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs b/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs index 8de6edcfa..05a8e218b 100644 --- a/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs +++ b/src/Application/Features/Customers/Specifications/CustomerAdvancedFilter.cs @@ -2,17 +2,15 @@ #nullable disable warnings public enum CustomerListView { - [Description("All")] - All, - [Description("My")] - My, - [Description("Created Toady")] - CreatedToday, + [Description("All")] All, + [Description("My")] My, + [Description("Created Toady")] CreatedToday, + [Description("Created within the last 30 days")] Created30Days } -public class CustomerAdvancedFilter: PaginationFilter +public class CustomerAdvancedFilter : PaginationFilter { public CustomerListView ListView { get; set; } = CustomerListView.All; public UserProfile? CurrentUser { get; set; } diff --git a/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs b/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs index bac39cbd3..df73ceb49 100644 --- a/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs +++ b/src/Application/Features/Customers/Specifications/CustomerAdvancedSpecification.cs @@ -13,11 +13,12 @@ public CustomerAdvancedSpecification(CustomerAdvancedFilter filter) today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); - Query.Where(q => q.Name != null) - .Where(q => q.Name!.Contains(filter.Keyword) || q.Description!.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)) - .Where(q => q.CreatedBy == filter.CurrentUser.UserId, filter.ListView == CustomerListView.My && filter.CurrentUser is not null) - .Where(q => q.Created >= start && q.Created <= end, filter.ListView == CustomerListView.CreatedToday) - .Where(q => q.Created >= last30day, filter.ListView == CustomerListView.Created30Days); - + Query.Where(q => q.Name != null) + .Where(q => q.Name!.Contains(filter.Keyword) || q.Description!.Contains(filter.Keyword), + !string.IsNullOrEmpty(filter.Keyword)) + .Where(q => q.CreatedBy == filter.CurrentUser.UserId, + filter.ListView == CustomerListView.My && filter.CurrentUser is not null) + .Where(q => q.Created >= start && q.Created <= end, filter.ListView == CustomerListView.CreatedToday) + .Where(q => q.Created >= last30day, filter.ListView == CustomerListView.Created30Days); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs b/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs index b98dccaa5..9fa9b8f92 100644 --- a/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs +++ b/src/Application/Features/Customers/Specifications/CustomerByIdSpecification.cs @@ -4,6 +4,6 @@ public class CustomerByIdSpecification : Specification { public CustomerByIdSpecification(int id) { - Query.Where(q => q.Id == id); + Query.Where(q => q.Id == id); } } \ No newline at end of file diff --git a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs index 16b4092a2..79f8dcd68 100644 --- a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs +++ b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommand.cs @@ -61,7 +61,6 @@ IUploadService uploadService public async Task> Handle(AddEditDocumentCommand request, CancellationToken cancellationToken) { - if (request.Id > 0) { var document = await _context.Documents.FindAsync(new object[] { request.Id }, cancellationToken); diff --git a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs index cc42d6ed4..9ff310d44 100644 --- a/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs +++ b/src/Application/Features/Documents/Commands/AddEdit/AddEditDocumentCommandValidator.cs @@ -19,6 +19,4 @@ public AddEditDocumentCommandValidator() .NotNull() .When(x => x.Id <= 0); } - - } \ No newline at end of file diff --git a/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs b/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs index 76193fa4d..2587ab0a0 100644 --- a/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs +++ b/src/Application/Features/Documents/Commands/Upload/UploadDocumentCommand.cs @@ -47,8 +47,7 @@ public async Task> Handle(UploadDocumentCommand request, Cancellatio URL = url, Status = JobStatus.Queueing, IsPublic = true, - DocumentType = DocumentType.Image, - + DocumentType = DocumentType.Image }; document.AddDomainEvent(new CreatedEvent(document)); list.Add(document); @@ -59,6 +58,5 @@ public async Task> Handle(UploadDocumentCommand request, Cancellatio await _context.Documents.AddRangeAsync(list, cancellationToken); var result = await _context.SaveChangesAsync(cancellationToken); return await Result.SuccessAsync(result); - } } \ No newline at end of file diff --git a/src/Application/Features/Documents/DTOs/DocumentDto.cs b/src/Application/Features/Documents/DTOs/DocumentDto.cs index 16fbbc1d3..d55c2310b 100644 --- a/src/Application/Features/Documents/DTOs/DocumentDto.cs +++ b/src/Application/Features/Documents/DTOs/DocumentDto.cs @@ -38,7 +38,7 @@ public Mapping() .ForMember(x => x.TenantName, s => s.MapFrom(y => y.Tenant!.Name)); CreateMap(MemberList.None) .ForMember(x => x.Tenant, s => s.Ignore()) - .ForMember(x=>x.Owner, s=>s.Ignore()); + .ForMember(x => x.Owner, s => s.Ignore()); } } } \ No newline at end of file diff --git a/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs b/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs index 3ee91c73d..e124234b6 100644 --- a/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs +++ b/src/Application/Features/Documents/Queries/GetFileStream/GetFileStreamQuery.cs @@ -25,10 +25,9 @@ public class GetFileStreamQueryHandler : IRequestHandler Handle(GetFileStreamQuery request, CancellationToken cancellationToken) @@ -49,9 +48,10 @@ internal class DocumentsQuery : Specification { public DocumentsQuery(string userId, string tenantId, string keyword) { - Query.Where(p=>(p.CreatedBy == userId && p.IsPublic == false) || p.IsPublic == true) - .Where(x => x.TenantId == tenantId, !string.IsNullOrEmpty(tenantId) ) - .Where(x => x.Title!.Contains(keyword) || x.Description!.Contains(keyword),!string.IsNullOrEmpty(keyword)); + Query.Where(p => (p.CreatedBy == userId && p.IsPublic == false) || p.IsPublic == true) + .Where(x => x.TenantId == tenantId, !string.IsNullOrEmpty(tenantId)) + .Where(x => x.Title!.Contains(keyword) || x.Description!.Contains(keyword), + !string.IsNullOrEmpty(keyword)); } } } \ No newline at end of file diff --git a/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs b/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs index 2d1bc6146..0def7000b 100644 --- a/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs +++ b/src/Application/Features/Documents/Queries/PaginationQuery/DocumentsWithPaginationQuery.cs @@ -9,7 +9,8 @@ namespace CleanArchitecture.Blazor.Application.Features.Documents.Queries.Pagina public class DocumentsWithPaginationQuery : AdvancedDocumentsFilter, ICacheableRequest> { - + public AdvancedDocumentsSpecification Specification => new(this); + public string CacheKey => DocumentCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => DocumentCacheKey.MemoryCacheEntryOptions; @@ -18,8 +19,6 @@ public override string ToString() return $"CurrentUserId:{CurrentUser?.UserId},ListView:{ListView},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - - public AdvancedDocumentsSpecification Specification =>new AdvancedDocumentsSpecification(this); } public class DocumentsQueryHandler : IRequestHandler> @@ -40,12 +39,9 @@ public async Task> Handle(DocumentsWithPaginationQuer CancellationToken cancellationToken) { var data = await _context.Documents.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } - - -} - - +} \ No newline at end of file diff --git a/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs b/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs index b48cbec71..40a06fbca 100644 --- a/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs +++ b/src/Application/Features/Documents/Specifications/AdvancedDocumentsFilter.cs @@ -5,10 +5,13 @@ public enum DocumentListView [Description("All")] All, [Description("My Document")] My, [Description("Created Toady")] CreatedToday, - [Description("Created within the last 30 days")] Created30Days + + [Description("Created within the last 30 days")] + Created30Days } + public class AdvancedDocumentsFilter : PaginationFilter { public DocumentListView ListView { get; set; } = DocumentListView.All; public required UserProfile CurrentUser { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs b/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs index b904ab02e..9a0d9fc54 100644 --- a/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs +++ b/src/Application/Features/Documents/Specifications/AdvancedDocumentsSpecification.cs @@ -13,13 +13,16 @@ public AdvancedDocumentsSpecification(AdvancedDocumentsFilter filter) today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); Query.Where(p => - p.CreatedBy == filter.CurrentUser.UserId && p.IsPublic == false || - p.IsPublic == true && p.TenantId == filter.CurrentUser.TenantId, filter.ListView == DocumentListView.All) - .Where(p => - p.CreatedBy == filter.CurrentUser.UserId && p.TenantId == filter.CurrentUser.TenantId, filter.ListView == DocumentListView.My) - .Where(q => q.Created >= start && q.Created <= end, filter.ListView == DocumentListView.CreatedToday) - .Where(q => q.Created >= last30day, filter.ListView == DocumentListView.Created30Days) - .Where(x => x.Title.Contains(filter.Keyword) || x.Description.Contains(filter.Keyword) || x.Content.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); - + (p.CreatedBy == filter.CurrentUser.UserId && p.IsPublic == false) || + (p.IsPublic == true && p.TenantId == filter.CurrentUser.TenantId), + filter.ListView == DocumentListView.All) + .Where(p => + p.CreatedBy == filter.CurrentUser.UserId && p.TenantId == filter.CurrentUser.TenantId, + filter.ListView == DocumentListView.My) + .Where(q => q.Created >= start && q.Created <= end, filter.ListView == DocumentListView.CreatedToday) + .Where(q => q.Created >= last30day, filter.ListView == DocumentListView.Created30Days) + .Where( + x => x.Title.Contains(filter.Keyword) || x.Description.Contains(filter.Keyword) || + x.Content.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs b/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs index 6eb91391e..840f62eae 100644 --- a/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs +++ b/src/Application/Features/Identity/Commands/ResetPassword/ResetPasswordCommand.cs @@ -2,14 +2,15 @@ using Microsoft.AspNetCore.Identity; namespace CleanArchitecture.Blazor.Application.Features.Identity.Commands.ResetPassword; + public record ResetPasswordCommand(string Email) : IRequest; public class ResetPasswordCommandHandler : IRequestHandler { - private readonly UserManager _userManager; private readonly IStringLocalizer _localizer; private readonly IMailService _mailService; private readonly IApplicationSettings _settings; + private readonly UserManager _userManager; public ResetPasswordCommandHandler(UserManager userManager, IStringLocalizer localizer, @@ -27,10 +28,7 @@ public async Task Handle(ResetPasswordCommand request, CancellationToken { var user = await _userManager.FindByEmailAsync(request.Email); - if (user == null) - { - return Result.Failure(_localizer["No user found by email, please contact the administrator"]); - } + if (user == null) return Result.Failure(_localizer["No user found by email, please contact the administrator"]); var resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user); @@ -41,8 +39,8 @@ public async Task Handle(ResetPasswordCommand request, CancellationToken "_recoverypassword", new { - AppName = _settings.AppName, - Email = request.Email, + _settings.AppName, + request.Email, Token = resetPasswordToken }); @@ -51,4 +49,4 @@ public async Task Handle(ResetPasswordCommand request, CancellationToken : Result.Failure(string.Format(_localizer["{0}, please contact the administrator"], sendMailResult.ErrorMessages.FirstOrDefault())); } -} +} \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs index 779f7cf5c..0211a9812 100644 --- a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs +++ b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommand.cs @@ -26,7 +26,7 @@ private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); + CreateMap(MemberList.None); CreateMap(MemberList.None); } } diff --git a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs index 00d523f43..72ff85634 100644 --- a/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs +++ b/src/Application/Features/KeyValues/Commands/AddEdit/AddEditKeyValueCommandValidator.cs @@ -11,6 +11,4 @@ public AddEditKeyValueCommandValidator() RuleFor(v => v.Text).MaximumLength(256).NotEmpty(); RuleFor(v => v.Value).MaximumLength(256).NotEmpty(); } - - } \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs b/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs index 0b064b18e..b2c081fb1 100644 --- a/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs +++ b/src/Application/Features/KeyValues/Commands/Import/ImportKeyValuesCommand.cs @@ -88,7 +88,7 @@ public async Task Handle(ImportKeyValuesCommand request, CancellationTok { var validationResult = await _addValidator.ValidateAsync( new AddEditKeyValueCommand - { Name = item.Name, Value = item.Value, Description = item.Description, Text = item.Text }, + { Name = item.Name, Value = item.Value, Description = item.Description, Text = item.Text }, cancellationToken); if (validationResult.IsValid) { diff --git a/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs b/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs index 93a25b41b..bc8b188b7 100644 --- a/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs +++ b/src/Application/Features/KeyValues/Queries/PaginationQuery/KeyValuesWithPaginationQuery.cs @@ -9,14 +9,15 @@ namespace CleanArchitecture.Blazor.Application.Features.KeyValues.Queries.Pagina public class KeyValuesWithPaginationQuery : KeyValueAdvancedFilter, ICacheableRequest> { - + public KeyValueAdvancedSpecification Specification => new(this); + public string CacheKey => $"{nameof(KeyValuesWithPaginationQuery)},{this}"; public MemoryCacheEntryOptions? Options => KeyValueCacheKey.MemoryCacheEntryOptions; + public override string ToString() { return $"Picklist:{Picklist},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - public KeyValueAdvancedSpecification Specification => new KeyValueAdvancedSpecification(this); } public class KeyValuesQueryHandler : IRequestHandler> @@ -37,8 +38,9 @@ public async Task> Handle(KeyValuesWithPaginationQuer CancellationToken cancellationToken) { var data = await _context.KeyValues.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } -} +} \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs index 88073380a..acc26143f 100644 --- a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs +++ b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedFilter.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Application.Features.KeyValues.Specifications; -public class KeyValueAdvancedFilter: PaginationFilter + +public class KeyValueAdvancedFilter : PaginationFilter { public Picklist? Picklist { get; set; } -} +} \ No newline at end of file diff --git a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs index 155c9a607..acaeeb2f9 100644 --- a/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs +++ b/src/Application/Features/KeyValues/Specifications/KeyValueAdvancedSpecification.cs @@ -5,7 +5,8 @@ public class KeyValueAdvancedSpecification : Specification public KeyValueAdvancedSpecification(KeyValueAdvancedFilter filter) { Query.Where(p => p.Name == filter.Picklist, filter.Picklist is not null) - .Where(x => x.Description.Contains(filter.Keyword) || x.Text.Contains(filter.Keyword) || x.Value.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); - + .Where( + x => x.Description.Contains(filter.Keyword) || x.Text.Contains(filter.Keyword) || + x.Value.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Loggers/DTOs/LogDto.cs b/src/Application/Features/Loggers/DTOs/LogDto.cs index adaf7012b..1321c00fe 100644 --- a/src/Application/Features/Loggers/DTOs/LogDto.cs +++ b/src/Application/Features/Loggers/DTOs/LogDto.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; - namespace CleanArchitecture.Blazor.Application.Features.Loggers.DTOs; public class LogDto diff --git a/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs b/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs index 3cb056718..da298cfd5 100644 --- a/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs +++ b/src/Application/Features/Loggers/Queries/PaginationQuery/LogsWithPaginationQuery.cs @@ -4,20 +4,21 @@ using CleanArchitecture.Blazor.Application.Features.Loggers.Caching; using CleanArchitecture.Blazor.Application.Features.Loggers.DTOs; using CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.Loggers.Queries.PaginationQuery; public class LogsWithPaginationQuery : LoggerAdvancedFilter, ICacheableRequest> { - + public LoggerAdvancedSpecification Specification => new(this); + public string CacheKey => LogsCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => LogsCacheKey.MemoryCacheEntryOptions; + public override string ToString() { - return $"Listview:{ListView},{Level},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; + return + $"Listview:{ListView},{Level},Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - public LoggerAdvancedSpecification Specification => new LoggerAdvancedSpecification(this); } public class LogsQueryHandler : IRequestHandler> @@ -38,10 +39,8 @@ public async Task> Handle(LogsWithPaginationQuery request, CancellationToken cancellationToken) { var data = await _context.Loggers.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, + _mapper.ConfigurationProvider, cancellationToken); return data; } -} - - - +} \ No newline at end of file diff --git a/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs b/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs index 0b1d9e485..fa8d1968f 100644 --- a/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs +++ b/src/Application/Features/Loggers/Specifications/LoggerAdvancedFilter.cs @@ -1,8 +1,10 @@ namespace CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; + public enum LogListView { [Description("All")] All, [Description("Created Toady")] CreatedToday, + [Description("View of the last 30 days")] Last30days } @@ -11,4 +13,4 @@ public class LoggerAdvancedFilter : PaginationFilter { public LogLevel? Level { get; set; } public LogListView ListView { get; set; } = LogListView.All; -} +} \ No newline at end of file diff --git a/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs b/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs index 5f232ea67..07d7b4643 100644 --- a/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs +++ b/src/Application/Features/Loggers/Specifications/LoggerAdvancedSpecification.cs @@ -1,6 +1,4 @@ -using CleanArchitecture.Blazor.Domain.Entities; - -namespace CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; +namespace CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; #nullable disable warnings public class LoggerAdvancedSpecification : Specification { @@ -15,8 +13,10 @@ public LoggerAdvancedSpecification(LoggerAdvancedFilter filter) Convert.ToDateTime(today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); Query.Where(p => p.TimeStamp.Date == DateTime.Now.Date, filter.ListView == LogListView.CreatedToday) - .Where(p => p.TimeStamp >= last30days, filter.ListView == LogListView.Last30days) - .Where(p => p.Level == filter.Level.ToString(), filter.Level is not null) - .Where(x => x.Message.Contains(filter.Keyword) || x.Exception.Contains(filter.Keyword) || x.UserName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); + .Where(p => p.TimeStamp >= last30days, filter.ListView == LogListView.Last30days) + .Where(p => p.Level == filter.Level.ToString(), filter.Level is not null) + .Where( + x => x.Message.Contains(filter.Keyword) || x.Exception.Contains(filter.Keyword) || + x.UserName.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)); } } \ No newline at end of file diff --git a/src/Application/Features/Products/Caching/ProductCacheKey.cs b/src/Application/Features/Products/Caching/ProductCacheKey.cs index efa0816ce..719ee9171 100644 --- a/src/Application/Features/Products/Caching/ProductCacheKey.cs +++ b/src/Application/Features/Products/Caching/ProductCacheKey.cs @@ -8,11 +8,7 @@ public static class ProductCacheKey public const string GetAllCacheKey = "all-Products"; private static readonly TimeSpan RefreshInterval = TimeSpan.FromHours(1); private static CancellationTokenSource _tokenSource; - private static readonly object _tokenLock = new object(); - public static string GetProductByIdCacheKey(int id) - { - return $"GetProductById,{id}"; - } + private static readonly object _tokenLock = new(); static ProductCacheKey() { @@ -22,6 +18,11 @@ static ProductCacheKey() public static MemoryCacheEntryOptions MemoryCacheEntryOptions => new MemoryCacheEntryOptions().AddExpirationToken(new CancellationChangeToken(SharedExpiryTokenSource().Token)); + public static string GetProductByIdCacheKey(int id) + { + return $"GetProductById,{id}"; + } + public static string GetPaginationCacheKey(string parameters) { return $"ProductsWithPaginationQuery,{parameters}"; @@ -31,10 +32,7 @@ public static CancellationTokenSource SharedExpiryTokenSource() { lock (_tokenLock) { - if (_tokenSource.IsCancellationRequested) - { - _tokenSource = new CancellationTokenSource(RefreshInterval); - } + if (_tokenSource.IsCancellationRequested) _tokenSource = new CancellationTokenSource(RefreshInterval); return _tokenSource; } diff --git a/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs b/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs index c8b518d39..f6a750001 100644 --- a/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs +++ b/src/Application/Features/Products/Commands/AddEdit/AddEditProductCommand.cs @@ -26,7 +26,7 @@ private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); + CreateMap(MemberList.None); CreateMap(MemberList.None); } } diff --git a/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs b/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs index cc8ef6471..015a591fe 100644 --- a/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs +++ b/src/Application/Features/Products/Commands/Delete/DeleteProductCommand.cs @@ -38,7 +38,7 @@ IMapper mapper public async Task> Handle(DeleteProductCommand request, CancellationToken cancellationToken) { - var items = await _context.Products.Where(x=>request.Id.Contains(x.Id)).ToListAsync(cancellationToken); + var items = await _context.Products.Where(x => request.Id.Contains(x.Id)).ToListAsync(cancellationToken); foreach (var item in items) { item.AddDomainEvent(new DeletedEvent(item)); diff --git a/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs b/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs index 357f5995a..f657f6e4f 100644 --- a/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs +++ b/src/Application/Features/Products/Queries/Export/ExportProductsQuery.cs @@ -5,14 +5,13 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; using CleanArchitecture.Blazor.Application.Features.Products.DTOs; using CleanArchitecture.Blazor.Application.Features.Products.Specifications; -using CleanArchitecture.Blazor.Domain.Common.Enums; namespace CleanArchitecture.Blazor.Application.Features.Products.Queries.Export; -public class ExportProductsQuery : ProductAdvancedFilter, IRequest> +public class ExportProductsQuery : ProductAdvancedFilter, IRequest> { public ExportType ExportType { get; set; } - public ProductAdvancedSpecification Specification => new ProductAdvancedSpecification(this); + public ProductAdvancedSpecification Specification => new(this); } public class ExportProductsQueryHandler : diff --git a/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs b/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs index 3f7222429..b1c4c5f00 100644 --- a/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs +++ b/src/Application/Features/Products/Queries/GetAll/GetAllProductsQuery.cs @@ -51,9 +51,10 @@ public async Task> Handle(GetAllProductsQuery request, C public async Task Handle(GetProductQuery request, CancellationToken cancellationToken) { - var data = await _context.Products.Where(x=>x.Id==request.Id) - .ProjectTo(_mapper.ConfigurationProvider) - .FirstOrDefaultAsync(cancellationToken)??throw new NotFoundException($"Product with id: {request.Id} not found."); + var data = await _context.Products.Where(x => x.Id == request.Id) + .ProjectTo(_mapper.ConfigurationProvider) + .FirstOrDefaultAsync(cancellationToken) ?? + throw new NotFoundException($"Product with id: {request.Id} not found."); return data; } } \ No newline at end of file diff --git a/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs b/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs index fa580a919..2599c1c41 100644 --- a/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs +++ b/src/Application/Features/Products/Queries/Pagination/ProductsPaginationQuery.cs @@ -10,7 +10,8 @@ namespace CleanArchitecture.Blazor.Application.Features.Products.Queries.Paginat public class ProductsWithPaginationQuery : ProductAdvancedFilter, ICacheableRequest> { - + public ProductAdvancedSpecification Specification => new(this); + public string CacheKey => ProductCacheKey.GetPaginationCacheKey($"{this}"); @@ -20,10 +21,8 @@ public class ProductsWithPaginationQuery : ProductAdvancedFilter, ICacheableRequ public override string ToString() { return - $"CurrentUser:{CurrentUser?.UserId},ListView:{ListView},Search:{Keyword},Name:{Name},Brand:{Brand},Unit:{Unit},MinPrice:{MinPrice},MaxPrice:{MaxPrice},SortDirection:{SortDirection},OrderBy:{OrderBy},{ PageNumber},{PageSize}"; + $"CurrentUser:{CurrentUser?.UserId},ListView:{ListView},Search:{Keyword},Name:{Name},Brand:{Brand},Unit:{Unit},MinPrice:{MinPrice},MaxPrice:{MaxPrice},SortDirection:{SortDirection},OrderBy:{OrderBy},{PageNumber},{PageSize}"; } - - public ProductAdvancedSpecification Specification => new ProductAdvancedSpecification(this); } public class ProductsWithPaginationQueryHandler : @@ -47,9 +46,9 @@ IStringLocalizer localizer public async Task> Handle(ProductsWithPaginationQuery request, CancellationToken cancellationToken) { - var data = await _context.Products.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, + request.PageSize, _mapper.ConfigurationProvider, cancellationToken); return data; } } \ No newline at end of file diff --git a/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs b/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs index ec847e930..96f3696e6 100644 --- a/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs +++ b/src/Application/Features/Products/Specifications/ProductAdvancedFilter.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Application.Features.Products.Specifications; + public class ProductAdvancedFilter : PaginationFilter { public string? Name { get; set; } @@ -6,6 +7,10 @@ public class ProductAdvancedFilter : PaginationFilter public string? Unit { get; set; } public decimal? MaxPrice { get; set; } public decimal? MinPrice { get; set; } - public ProductListView ListView { get; set; } = ProductListView.All; //<-- When the user selects a different ListView, - public UserProfile? CurrentUser { get; set; } // <-- This CurrentUser property gets its value from the information of -} + + public ProductListView ListView { get; set; } = + ProductListView.All; //<-- When the user selects a different ListView, + + public UserProfile? + CurrentUser { get; set; } // <-- This CurrentUser property gets its value from the information of +} \ No newline at end of file diff --git a/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs b/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs index b99984304..c3b7767d6 100644 --- a/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs +++ b/src/Application/Features/Products/Specifications/ProductAdvancedSpecification.cs @@ -1,4 +1,3 @@ - namespace CleanArchitecture.Blazor.Application.Features.Products.Specifications; #nullable disable warnings public class ProductAdvancedSpecification : Specification @@ -14,17 +13,15 @@ public ProductAdvancedSpecification(ProductAdvancedFilter filter) today.AddDays(-30).ToString("yyyy-MM-dd", CultureInfo.CurrentCulture) + " 00:00:00", CultureInfo.CurrentCulture); Query.Where(x => x.Name != null) - .Where(x => x.Name!.Contains(filter.Keyword) || x.Description!.Contains(filter.Keyword) || - x.Brand!.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)) - .Where(x => x.Name!.Contains(filter.Name), !string.IsNullOrEmpty(filter.Name)) - .Where(x => x.Unit == filter.Unit, !string.IsNullOrEmpty(filter.Unit)) - .Where(x => x.Brand == filter.Brand, !string.IsNullOrEmpty(filter.Brand)) - .Where(x => x.Price <= filter.MaxPrice, !string.IsNullOrEmpty(filter.Brand)) - .Where(x => x.Price >= filter.MinPrice, filter.MinPrice is not null) - .Where(x => x.CreatedBy == filter.CurrentUser.UserId, filter.ListView == ProductListView.My) - .Where(x => x.Created >= start && x.Created <= end, filter.ListView == ProductListView.CreatedToday) - .Where(x => x.Created >= last30day, filter.ListView == ProductListView.Created30Days); - - + .Where(x => x.Name!.Contains(filter.Keyword) || x.Description!.Contains(filter.Keyword) || + x.Brand!.Contains(filter.Keyword), !string.IsNullOrEmpty(filter.Keyword)) + .Where(x => x.Name!.Contains(filter.Name), !string.IsNullOrEmpty(filter.Name)) + .Where(x => x.Unit == filter.Unit, !string.IsNullOrEmpty(filter.Unit)) + .Where(x => x.Brand == filter.Brand, !string.IsNullOrEmpty(filter.Brand)) + .Where(x => x.Price <= filter.MaxPrice, !string.IsNullOrEmpty(filter.Brand)) + .Where(x => x.Price >= filter.MinPrice, filter.MinPrice is not null) + .Where(x => x.CreatedBy == filter.CurrentUser.UserId, filter.ListView == ProductListView.My) + .Where(x => x.Created >= start && x.Created <= end, filter.ListView == ProductListView.CreatedToday) + .Where(x => x.Created >= last30day, filter.ListView == ProductListView.Created30Days); } -} +} \ No newline at end of file diff --git a/src/Application/Features/Products/Specifications/ProductListView.cs b/src/Application/Features/Products/Specifications/ProductListView.cs index f0e827966..c99e4cd87 100644 --- a/src/Application/Features/Products/Specifications/ProductListView.cs +++ b/src/Application/Features/Products/Specifications/ProductListView.cs @@ -5,5 +5,7 @@ public enum ProductListView [Description("All")] All, [Description("My Products")] My, [Description("Created Toady")] CreatedToday, - [Description("Created within the last 30 days")] Created30Days -} + + [Description("Created within the last 30 days")] + Created30Days +} \ No newline at end of file diff --git a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs index 623ef1428..51622a6b6 100644 --- a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs +++ b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommand.cs @@ -5,7 +5,6 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; using CleanArchitecture.Blazor.Application.Features.Tenants.Caching; using CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.Tenants.Commands.AddEdit; @@ -24,7 +23,7 @@ private class Mapping : Profile { public Mapping() { - CreateMap(MemberList.None); + CreateMap(MemberList.None); CreateMap(MemberList.None); } } @@ -32,10 +31,10 @@ public Mapping() public class AddEditTenantCommandHandler : IRequestHandler> { - private readonly ITenantService _tenantsService; private readonly IApplicationDbContext _context; private readonly IStringLocalizer _localizer; private readonly IMapper _mapper; + private readonly ITenantService _tenantsService; public AddEditTenantCommandHandler( ITenantService tenantsService, @@ -52,7 +51,6 @@ IMapper mapper public async Task> Handle(AddEditTenantCommand request, CancellationToken cancellationToken) { - var item = await _context.Tenants.FindAsync(new object[] { request.Id }, cancellationToken); if (item is null) { @@ -63,6 +61,7 @@ public async Task> Handle(AddEditTenantCommand request, Cancellat { item = _mapper.Map(request, item); } + await _context.SaveChangesAsync(cancellationToken); await _tenantsService.Refresh(); return await Result.SuccessAsync(item.Id); diff --git a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs index 8582a2513..cf99d21f3 100644 --- a/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs +++ b/src/Application/Features/Tenants/Commands/AddEdit/AddEditTenantCommandValidator.cs @@ -11,6 +11,4 @@ public AddEditTenantCommandValidator() .MaximumLength(256) .NotEmpty(); } - - } \ No newline at end of file diff --git a/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs b/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs index 1c434c6ed..f64ad2aff 100644 --- a/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs +++ b/src/Application/Features/Tenants/Commands/Delete/DeleteTenantCommand.cs @@ -22,10 +22,10 @@ public class DeleteTenantCommandHandler : IRequestHandler> { - private readonly ITenantService _tenantsService; private readonly IApplicationDbContext _context; private readonly IStringLocalizer _localizer; private readonly IMapper _mapper; + private readonly ITenantService _tenantsService; public DeleteTenantCommandHandler( ITenantService tenantsService, @@ -43,10 +43,7 @@ IMapper mapper public async Task> Handle(DeleteTenantCommand request, CancellationToken cancellationToken) { var items = await _context.Tenants.Where(x => request.Id.Contains(x.Id)).ToListAsync(cancellationToken); - foreach (var item in items) - { - _context.Tenants.Remove(item); - } + foreach (var item in items) _context.Tenants.Remove(item); var result = await _context.SaveChangesAsync(cancellationToken); await _tenantsService.Refresh(); diff --git a/src/Application/Features/Tenants/DTOs/TenantDto.cs b/src/Application/Features/Tenants/DTOs/TenantDto.cs index f932b980b..98557a5ef 100644 --- a/src/Application/Features/Tenants/DTOs/TenantDto.cs +++ b/src/Application/Features/Tenants/DTOs/TenantDto.cs @@ -1,8 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; - namespace CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; [Description("Tenants")] diff --git a/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs b/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs index 7b68c86dc..cc9cf5ced 100644 --- a/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs +++ b/src/Application/Features/Tenants/Queries/Pagination/TenantsPaginationQuery.cs @@ -3,12 +3,12 @@ using CleanArchitecture.Blazor.Application.Features.Tenants.Caching; using CleanArchitecture.Blazor.Application.Features.Tenants.DTOs; -using CleanArchitecture.Blazor.Domain.Entities; namespace CleanArchitecture.Blazor.Application.Features.Tenants.Queries.Pagination; public class TenantsWithPaginationQuery : PaginationFilter, ICacheableRequest> { + public TenantsPaginationSpecification Specification => new(this); public string CacheKey => TenantCacheKey.GetPaginationCacheKey($"{this}"); public MemoryCacheEntryOptions? Options => TenantCacheKey.MemoryCacheEntryOptions; @@ -16,7 +16,6 @@ public override string ToString() { return $"Search:{Keyword},OrderBy:{OrderBy} {SortDirection},{PageNumber},{PageSize}"; } - public TenantsPaginationSpecification Specification => new TenantsPaginationSpecification(this); } public class TenantsWithPaginationQueryHandler : @@ -41,7 +40,8 @@ public async Task> Handle(TenantsWithPaginationQuery re CancellationToken cancellationToken) { var data = await _context.Tenants.OrderBy($"{request.OrderBy} {request.SortDirection}") - .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, _mapper.ConfigurationProvider, cancellationToken); + .ProjectToPaginatedDataAsync(request.Specification, request.PageNumber, request.PageSize, + _mapper.ConfigurationProvider, cancellationToken); return data; } } @@ -51,6 +51,7 @@ public class TenantsPaginationSpecification : Specification public TenantsPaginationSpecification(TenantsWithPaginationQuery query) { Query.Where(q => q.Name != null) - .Where(q => q.Name.Contains(query.Keyword) || q.Description.Contains(query.Keyword), !string.IsNullOrEmpty(query.Keyword)); + .Where(q => q.Name.Contains(query.Keyword) || q.Description.Contains(query.Keyword), + !string.IsNullOrEmpty(query.Keyword)); } } \ No newline at end of file diff --git a/src/Application/Pipeline/AuthorizationBehaviour.cs b/src/Application/Pipeline/AuthorizationBehaviour.cs index f23bad546..93521fbcc 100644 --- a/src/Application/Pipeline/AuthorizationBehaviour.cs +++ b/src/Application/Pipeline/AuthorizationBehaviour.cs @@ -6,7 +6,8 @@ namespace CleanArchitecture.Blazor.Application.Pipeline; -public class AuthorizationBehaviour : IPipelineBehavior where TRequest : IRequest +public class AuthorizationBehaviour : IPipelineBehavior + where TRequest : IRequest { private readonly ICurrentUserService _currentUserService; private readonly IIdentityService _identityService; @@ -19,17 +20,15 @@ public AuthorizationBehaviour( _identityService = identityService; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { var authorizeAttributes = request.GetType().GetCustomAttributes(); if (authorizeAttributes.Any()) { // Must be authenticated user var userId = _currentUserService.UserId; - if (string.IsNullOrEmpty(userId)) - { - throw new UnauthorizedAccessException(); - } + if (string.IsNullOrEmpty(userId)) throw new UnauthorizedAccessException(); // DefaultRole-based authorization var authorizeAttributesWithRoles = authorizeAttributes.Where(a => !string.IsNullOrWhiteSpace(a.Roles)); @@ -39,42 +38,32 @@ public async Task Handle(TRequest request, RequestHandlerDelegate a.Roles.Split(','))) + foreach (var role in roles) { - foreach (var role in roles) + var isInRole = await _identityService.IsInRoleAsync(userId, role.Trim()); + if (isInRole) { - var isInRole = await _identityService.IsInRoleAsync(userId, role.Trim()); - if (isInRole) - { - authorized = true; - break; - } + authorized = true; + break; } } // Must be a member of at least one role in roles - if (!authorized) - { - throw new ForbiddenException("You are not authorized to access this resource."); - } + if (!authorized) throw new ForbiddenException("You are not authorized to access this resource."); } // Policy-based authorization var authorizeAttributesWithPolicies = authorizeAttributes.Where(a => !string.IsNullOrWhiteSpace(a.Policy)); if (authorizeAttributesWithPolicies.Any()) - { foreach (var policy in authorizeAttributesWithPolicies.Select(a => a.Policy)) { var authorized = await _identityService.AuthorizeAsync(userId, policy); - if (!authorized) - { - throw new ForbiddenException("You are not authorized to access this resource."); - } + if (!authorized) throw new ForbiddenException("You are not authorized to access this resource."); } - } } // User is authorized / authorization not required return await next().ConfigureAwait(false); } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/CacheInvalidationBehaviour.cs b/src/Application/Pipeline/CacheInvalidationBehaviour.cs index 14440f294..4860015df 100644 --- a/src/Application/Pipeline/CacheInvalidationBehaviour.cs +++ b/src/Application/Pipeline/CacheInvalidationBehaviour.cs @@ -4,7 +4,7 @@ namespace CleanArchitecture.Blazor.Application.Pipeline; public class CacheInvalidationBehaviour : IPipelineBehavior - where TRequest : ICacheInvalidatorRequest + where TRequest : ICacheInvalidatorRequest { private readonly IAppCache _cache; private readonly ILogger> _logger; @@ -12,20 +12,19 @@ public class CacheInvalidationBehaviour : IPipelineBehavior public CacheInvalidationBehaviour( IAppCache cache, ILogger> logger - ) + ) { _cache = cache; _logger = logger; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { _logger.LogTrace("{Name} cache expire with {@Request}", nameof(request), request); var response = await next().ConfigureAwait(false); - if (!string.IsNullOrEmpty(request.CacheKey)) - { - _cache.Remove(request.CacheKey); - } + if (!string.IsNullOrEmpty(request.CacheKey)) _cache.Remove(request.CacheKey); request.SharedExpiryTokenSource?.Cancel(); return response; } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/MemoryCacheBehaviour.cs b/src/Application/Pipeline/MemoryCacheBehaviour.cs index 226f95b06..99bd26f92 100644 --- a/src/Application/Pipeline/MemoryCacheBehaviour.cs +++ b/src/Application/Pipeline/MemoryCacheBehaviour.cs @@ -12,20 +12,22 @@ public class MemoryCacheBehaviour : IPipelineBehavior> logger - ) + ) { _cache = cache; _logger = logger; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { _logger.LogTrace("{Name} is caching with {@Request}", nameof(request), request); var response = await _cache.GetOrAddAsync( request.CacheKey, async () => - await next(), + await next(), request.Options).ConfigureAwait(false); return response; } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs b/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs index 996f570b5..21db4ef3f 100644 --- a/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs +++ b/src/Application/Pipeline/PreProcessors/LoggingPreProcessor.cs @@ -5,15 +5,14 @@ namespace CleanArchitecture.Blazor.Application.Pipeline.PreProcessors; public class LoggingPreProcessor : IRequestPreProcessor where TRequest : notnull { - private readonly ILogger _logger; private readonly ICurrentUserService _currentUserService; + private readonly ILogger _logger; public LoggingPreProcessor(ILogger logger, ICurrentUserService currentUserService) { _logger = logger; _currentUserService = currentUserService; - } public Task Process(TRequest request, CancellationToken cancellationToken) @@ -24,4 +23,4 @@ public Task Process(TRequest request, CancellationToken cancellationToken) requestName, request, userName); return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs b/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs index e2554a7ae..0c49ed1f6 100644 --- a/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs +++ b/src/Application/Pipeline/PreProcessors/ValidationPreProcessor.cs @@ -1,10 +1,13 @@ namespace CleanArchitecture.Blazor.Application.Pipeline.PreProcessors; + public sealed class ValidationPreProcessor : IRequestPreProcessor where TRequest : notnull { private readonly IReadOnlyCollection> _validators; - public ValidationPreProcessor(IEnumerable> validators) => + public ValidationPreProcessor(IEnumerable> validators) + { _validators = validators.ToList() ?? throw new ArgumentNullException(nameof(validators)); + } public async Task Process(TRequest request, CancellationToken cancellationToken) { @@ -16,4 +19,4 @@ public async Task Process(TRequest request, CancellationToken cancellationToken) if (failures.Any()) throw new ValidationException(failures); } -} +} \ No newline at end of file diff --git a/src/Application/Pipeline/UnhandledExceptionBehaviour.cs b/src/Application/Pipeline/UnhandledExceptionBehaviour.cs index 8c132b9c3..308f7aebe 100644 --- a/src/Application/Pipeline/UnhandledExceptionBehaviour.cs +++ b/src/Application/Pipeline/UnhandledExceptionBehaviour.cs @@ -3,10 +3,11 @@ namespace CleanArchitecture.Blazor.Application.Pipeline; -public class UnhandledExceptionBehaviour : IPipelineBehavior where TRequest : IRequest +public class UnhandledExceptionBehaviour : IPipelineBehavior + where TRequest : IRequest { - private readonly ILogger _logger; private readonly ICurrentUserService _currentUserService; + private readonly ILogger _logger; public UnhandledExceptionBehaviour(ILogger logger, ICurrentUserService currentUserService) { @@ -14,7 +15,8 @@ public UnhandledExceptionBehaviour(ILogger logger, ICurrentUserService _currentUserService = currentUserService; } - public async Task Handle(TRequest request, RequestHandlerDelegate next, CancellationToken cancellationToken) + public async Task Handle(TRequest request, RequestHandlerDelegate next, + CancellationToken cancellationToken) { try { @@ -24,8 +26,9 @@ public async Task Handle(TRequest request, RequestHandlerDelegate - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + La vostra contrasenya ha de contenir almenys una lletra majúscula. - + La vostra contrasenya ha de contenir almenys una lletra minúscula. - + La vostra contrasenya ha de contenir un dígit - + La vostra contrasenya ha de contenir un caràcter alfanumèric - + La vostra contrasenya ha de tenir com a mínim {0} caràcters - + La vostra contrasenya no ha de superar els {0} caràcters. - + La vostra contrasenya no pot estar buida \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx index 4bc797774..5ed9d457d 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Ihr Passwort muss mindestens einen Großbuchstaben enthalten. - + Ihr Passwort muss mindestens einen Kleinbuchstaben enthalten. - + Ihr Passwort muss eine Ziffer enthalten - + Ihr Passwort muss ein alphanumerisches Zeichen enthalten - + Ihr Passwort muss mindestens {0} Zeichen lang sein - + Ihr Passwort darf nicht länger als {0} Zeichen sein. - + Ihr Passwort darf nicht leer sein \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx index c6ebe0c67..1a1025922 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx @@ -1,143 +1,148 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Your password must contain at least one uppercase letter. - + Your password must contain at least one lowercase letter. - + Your password must contain a digit. - + Your password must contain an alphanumeric character - + Your password must be at least {0} characters long - + Your password must not exceed {0} characters. - + Your password cannot be empty \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx index 6b8045e4f..e17ffab9a 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx @@ -1,142 +1,147 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Su contraseña debe contener al menos una letra mayúscula. - + Su contraseña debe contener al menos una letra minúscula. - + Su contraseña debe contener un dígito. - + Su contraseña debe contener un carácter alfanumérico - + Su contraseña debe tener al menos {0} caracteres - + Su contraseña no debe exceder los {0} caracteres. - + Tu contraseña no puede estar vacía \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx index 145df7db8..4eba8139a 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Votre mot de passe doit contenir au moins une lettre majuscule. - + Votre mot de passe doit contenir au moins une lettre minuscule. - + Votre mot de passe doit contenir un chiffre. - + Votre mot de passe doit contenir un caractère alphanumérique - + Votre mot de passe doit comporter au moins {0} caractères - + Votre mot de passe ne doit pas dépasser {0} caractères. - + Votre mot de passe ne peut pas être vide \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx index aed222b53..23b1fc492 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + パスワードには少なくとも 1 つの大文字が含まれている必要があります。 - + パスワードには少なくとも 1 つの小文字が含まれている必要があります。 - + パスワードには数字が含まれている必要があります。 - + パスワードには英数字が含まれている必要があります - + パスワードは6文字以上である必要があります - + Your password must not exceed {0} characters. - + パスワードを空にすることはできません \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx index 9f94f1020..057edb7ff 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់អក្សរធំមួយ។ - + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់អក្សរតូចមួយ។ - + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានលេខ។ - + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានតួអក្សរអក្សរក្រមលេខ - + ពាក្យសម្ងាត់របស់អ្នកត្រូវតែមានយ៉ាងហោចណាស់ {0} តួអក្សរ - + ពាក្យសម្ងាត់របស់អ្នកមិនត្រូវលើសពី {0} តួអក្សរទេ។ - + ពាក្យសម្ងាត់របស់អ្នកមិនអាចទទេបានទេ។ \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx index 877e03909..3a6c2a7b8 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx @@ -1,162 +1,167 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Your password must contain at least one uppercase letter. - + Your password must contain at least one number. - + Your password must contain at least one lowercase letter. - + Your password must contain at least one (@!? *.). - + Your password length must not exceed 16. - + Your password length must be at least 6. - + Your password cannot be empty - + Your password must contain at least one uppercase letter. - + Your password must contain at least one lowercase letter. - + Your password must contain a digit. - + MustContainAlphanumericCharacter - + Your password must be at least {0} characters long - + Your password must not exceed {0} characters. - + Your password cannot be empty \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx index 1239bea53..09c9dded7 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Ваш пароль должен содержать хотя бы одну заглавную букву. - + Ваш пароль должен содержать хотя бы одну строчную букву. - + Ваш пароль должен содержать цифру. - + Ваш пароль должен содержать буквенно-цифровой символ - + Ваш пароль должен содержать не менее {0} символов. - + Ваш пароль не должен превышать {0} символов. - + Ваш пароль не может быть пустым \ No newline at end of file diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx index 83da84106..acdb9d5e5 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 您的密码必须至少包含一个大写字母。 - + 您的密码必须至少包含一个数字。 - + 您的密码必须至少包含一个小写字母。 - + 您的密码必须至少包含一个(@! ? *.)。 - + 您的密码长度不能超过16。 - + 您的密码长度必须至少为6。 - + 您的密码不能是空的 \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx index ebf95ea5c..4648b45df 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx @@ -1,138 +1,143 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom de la taula - + Clau principal - + Valors antics - + Nous valors - + Data i hora - + Traces d'auditoria \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx index 8b266b527..c336ee4b6 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx @@ -1,138 +1,143 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Tabellenname - + Primärschlüssel - + Alte Werte - + Neue Werte - + Terminzeit - + Buchungsprotokolle \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx index 251721d4e..ea0a7c113 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx @@ -1,138 +1,143 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Table Name - + Primary Key - + Old Values - + New Values - + Date Time - + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx index abfbfbf0d..5331cbcde 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx @@ -1,138 +1,143 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nombre de la tabla - + Clave principal - + Valores antiguos - + Nuevos valores - + Fecha y hora - + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx index 90ec0c6ec..f24b01785 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx @@ -1,138 +1,143 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom de la table - + Clé primaire - + Anciennes valeurs - + Nouvelles valeurs - + Date Heure - + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx index 7e17bc867..c989d82be 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx @@ -1,138 +1,143 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + テーブル名 - + 主キー - + 古い値 - + 新しい値 - + 日付時刻 - + 監査証跡 \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx index 16f268bea..50f489282 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx @@ -1,138 +1,143 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ឈ្មោះ តារាង - + គន្លឹះបឋម - + តម្លៃចាស់ - + តម្លៃថ្មី - + ពេលវេលា កាលបរិច្ឆេទ - + សវនកម្មTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx index 251721d4e..ea0a7c113 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx @@ -1,138 +1,143 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Table Name - + Primary Key - + Old Values - + New Values - + Date Time - + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx index 76f5d3940..13e740247 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx @@ -1,138 +1,143 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Имя таблицы - + Основной ключ - + Старые ценности - + Новые ценности - + Дата Время - + AuditTrails \ No newline at end of file diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx index fe43598f0..a5c0a00aa 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx @@ -1,138 +1,143 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 表名 - + 主键 - + 旧值 - + 新值 - + 记录时间 - + 审计跟踪 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx index ef528fe5a..bb0a12d43 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom - + Tipus de document - + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx index 5db6a00c7..679d9ecf6 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name - + Dokumenttypen - + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx index 9a059f25f..638ca2c46 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name - + DocumentTypes - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx index 70bb68580..483089c96 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nombre - + Tipos de documento - + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx index b06288486..bb5b1c58c 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom - + Types de documents - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx index b06fcb4b1..4f8885ba8 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 名前 - + ドキュメントタイプ - + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx index b00902d95..3fd86a481 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ឈ្មោះ - + ៥. កំណត់ហេតុឯកសារ - + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx index 9a059f25f..638ca2c46 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name - + DocumentTypes - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx index 572cb3456..4e4c95851 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Имя - + Типы документов - + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx index d16255e5b..558cf3181 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 名称 - + 文档类型 - + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx index ef528fe5a..bb0a12d43 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom - + Tipus de document - + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx index 5db6a00c7..679d9ecf6 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name - + Dokumenttypen - + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx index 9a059f25f..638ca2c46 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name - + DocumentTypes - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx index 70bb68580..483089c96 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nombre - + Tipos de documento - + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx index b06288486..bb5b1c58c 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom - + Types de documents - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx index b06fcb4b1..4f8885ba8 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 名前 - + ドキュメントタイプ - + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx index b00902d95..3fd86a481 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx @@ -1,129 +1,134 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ឈ្មោះ - + ៥. កំណត់ហេតុឯកសារ - + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx index 9a059f25f..638ca2c46 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name - + DocumentTypes - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx index 572cb3456..4e4c95851 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Имя - + Типы документов - + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx index d16255e5b..558cf3181 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 名称 - + 文档类型 - + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx index f2a54ecd3..089d613aa 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + Títol - + Documents - + Descripció - + Creat per \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx index 6660b272d..876bdbf28 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL (URL) - + Titel - + Urkunden - + Beschreibung - + Erstellt von \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx index 7d4c9536c..3c368d962 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + Title - + Documents - + Description - + Created By \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx index 94f24b081..cf3570b6b 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + Título - + Documentos - + Descripción - + Creado por \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx index 70ea52ed5..5ca4b8398 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + Titre - + Documents - + Description - + Créé par \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx index 7e1732d27..992c96034 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + タイトル - + 書類 - + 形容 - + 作成者 \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx index 4d3c85868..fd0d46771 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + ចំណងជើង - + ឯកសារ - + 설명 - + បង្កើតដោយ \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx index 7d4c9536c..3c368d962 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + Title - + Documents - + Description - + Created By \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx index 3f9dd1eba..80a657d2c 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL-адрес - + Титул - + Документы - + Описание - + Создание сайта \ No newline at end of file diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx index 0889879b1..477082a4e 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + URL - + 标题 - + 文档信息 - + 描述 - + 创建人 \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx index 86f934e9b..a31094f59 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verifiqui el seu correu electrònic de recuperació - + No s'ha trobat cap usuari per aquest correu electrònic, possis en contacte amb l'administrador - + {0}, per favor, possis en contacte amb l'administrador \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx index bfde46bcf..8b99104bf 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Überprüfen Sie Ihre Wiederherstellungs-E-Mail - + Kein Benutzer per E-Mail gefunden, bitte kontaktieren Sie den Administrator - + {0}, bitte kontaktieren Sie den Administrator \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx index 9a514559a..8f3dd13d1 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verify your recovery email - + No user found by email, please contact an administrator - + {0}, please contact an administrator \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx index 40788696a..4f32f452c 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verifique su correo electrónico de recuperación - + No se ha encontrado ningún usuario por correo electrónico, póngase en contacto con el administrador - + {0}, por favor, póngase en contacto con el administrador \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx index c0e9cd220..583ab05e0 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Vérifiez l'e-mail de récupération - + Aucun utilisateur trouvé par email, veuillez contacter l'administrateur. - + {0}, veuillez contacter l'administrateur \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx index 924541067..0c3b369cf 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + リカバリーメールを確認する - + メールに記載されたユーザーが見つかりません。管理者にお問い合わせください。 - + {0}, 管理者に連絡してください。 \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx index 4fcaf1b39..55e1d09a9 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ផ្ទៀងផ្ទាត់អ៊ីមែល recovery របស់អ្នក - + គ្មាន អ្នក ប្រើ រក ឃើញ តាម អ៊ីមែល ទេ សូម ទាក់ទង ទៅ អ្នក គ្រប់គ្រង - + {0} សូមទាក់ទងទៅអ្នកគ្រប់គ្រង \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx index 9a514559a..8f3dd13d1 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Verify your recovery email - + No user found by email, please contact an administrator - + {0}, please contact an administrator \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx index aac5cd3dd..43c6ef190 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Проверьте письмо о восстановлении - + Пользователь не найден по электронной почте, обратитесь к администратору - + {0}, пожалуйста, свяжитесь с администратором \ No newline at end of file diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx index 489ad7327..762274b3b 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx @@ -1,129 +1,134 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 验证您的恢复邮件 - + 通过电子邮件没有找到用户,请联系管理员 - + {0},请联系管理员 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx index b7e7e45dd..e74fd0cae 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Valor - + Texte - + Nom - + ClauValors - + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx index 8ca880f38..e790c40d9 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Wert - + Text - + Name - + KeyValues - + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx index 08531be25..8b5745487 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Value - + Text - + Name - + KeyValues - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx index 625e58d8e..70ab782a3 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Valor - + Mensaje de texto - + Nombre - + KeyValues - + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx index e4e7ac0bb..521c0d02e 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Valeur - + SMS - + Nom - + KeyValues - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx index 24b3e5e01..976ea1549 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 価値 - + テキスト - + 名前 - + キーバリュー - + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx index fe523a879..e179b4795 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + តម្លៃ - + អត្ថបទ - + ឈ្មោះ - + KeyValues - + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx index 08531be25..8b5745487 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Value - + Text - + Name - + KeyValues - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx index b23e833f2..474ef5519 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Ценность - + СМС - + Имя - + Ключевыезначности - + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx index efddcafce..65e461cfc 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + - + 文本 - + 名称 - + 字典 - + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx index b7e7e45dd..e74fd0cae 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Valor - + Texte - + Nom - + ClauValors - + Descripció \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx index 8ca880f38..e790c40d9 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Wert - + Text - + Name - + KeyValues - + Beschreibung \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx index 08531be25..8b5745487 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Value - + Text - + Name - + KeyValues - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx index 625e58d8e..70ab782a3 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Valor - + Mensaje de texto - + Nombre - + KeyValues - + Descripción \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx index e4e7ac0bb..521c0d02e 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Valeur - + SMS - + Nom - + KeyValues - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx index 24b3e5e01..976ea1549 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 価値 - + テキスト - + 名前 - + キーバリュー - + 形容 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx index fe523a879..e179b4795 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx @@ -1,135 +1,140 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + តម្លៃ - + អត្ថបទ - + ឈ្មោះ - + KeyValues - + 설명 \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx index 08531be25..8b5745487 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Value - + Text - + Name - + KeyValues - + Description \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx index b23e833f2..474ef5519 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Ценность - + СМС - + Имя - + Ключевыезначности - + Описание \ No newline at end of file diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx index efddcafce..65e461cfc 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx @@ -1,135 +1,140 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + - + 文本 - + 名称 - + 字典 - + 描述 \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx index 3cb99a447..40e0b5577 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom d'usuari - + Segells de temps - + Propietats - + Plantilla de missatges - + Missatge - + Registres - + Nivell - + Excepció \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx index efb583c6d..c27335557 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Name des Benutzers - + Zeitstempel - + Eigenschaften - + Vorlage der Nachricht - + Meldung - + Protokolle - + Ebene - + Ausnahme \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx index 4bfcb07bd..8bca96246 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + User Name - + Time Stamp - + Properties - + Message Template - + Message - + Logs - + Level - + Exception \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx index ab7fca39c..ef190fd91 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nombre de usuario - + Sello de tiempo - + Propiedades - + Plantilla de mensajes - + Mensaje - + Registros - + Nivel - + Excepción \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx index 0aadb2d9a..ce1f244a8 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom d'utilisateur - + Horodatage - + Propriétés - + Modèle de message - + Message - + Journaux - + Niveau - + Exception \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx index 1c52c0775..cc659e82d 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ユーザー名 - + タイムスタンプ - + 特性 - + メッセージテンプレート - + メッセージ - + ログ - + レベル - + 例外 \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx index 18c692d85..26290427f 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 사용자 이름 - + 타임 스탬프 - + 속성 - + 메시지 템플릿 - + 메시지 - + 로그 - + 수준 - + 예외 \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx index 212e94497..bf53a37b9 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + User Name - + Time Stamp - + Properties - + Message Template - + Message - + Logs - + Level - + Exception \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx index 7e26b47ee..b9c3a796e 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Имя пользователя - + Штамп времени - + Свойства - + Шаблон сообщения - + Сообщение - + Журналы - + Уровень - + Исключение \ No newline at end of file diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx index bd7f8e11f..6842d9309 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 用户名称 - + 时间戳 - + 属性 - + 信息模板 - + 信息 - + 日志 - + 级别 - + 异常情况 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx index df3090f9b..10e0765fc 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unitat - + Productes - + Nom del producte - + Preu de l'unitat - + Imatges - + Descripció - + Nom de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx index 643441022..1299b7aa1 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Einheit - + Produkte - + Produktname - + Preis der Einheit - + Bilder - + Beschreibung - + Markenname \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx index d4a1a2905..6b90cc0f6 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unit - + Products - + Product Name - + Price of unit - + Pictures - + Description - + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx index 9f61d5069..3f2c04564 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unidad - + Productos - + Nombre del producto - + Precio de la unidad - + Imágenes - + Descripción - + Nombre de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx index f4e176e45..51937cd9d 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unité - + Produits - + Nom du produit - + Prix de l'unité - + Images - + Description - + Nom de la marque \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx index 28d0a0dd6..f390abc86 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 単位 - + 製品名 - + 商品名 - + 本体価格 - + 画像 - + 商品説明 - + ブランド名 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx index 460e49894..92b488c93 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 단위 - + 제품 - + 상품명 - + 단가 - + 영화 - + 설명 - + 상표명 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx index 6f7eb0b42..a298f3c57 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx @@ -1,141 +1,146 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unit - + Products - + Product Name - + Price of unit - + Pictures - + Description - + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx index ae417d275..d6a7a877b 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Единица - + Продукция - + Название продукта - + Цена единицы - + Изображения - + Описание - + Название бренда \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx index 3fde269e0..be073480c 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 单位 - + 产品 - + 产品名称 - + 单位价格 - + 图片 - + 描述 - + 品牌名称 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx index df3090f9b..10e0765fc 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unitat - + Productes - + Nom del producte - + Preu de l'unitat - + Imatges - + Descripció - + Nom de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx index 643441022..1299b7aa1 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Einheit - + Produkte - + Produktname - + Preis der Einheit - + Bilder - + Beschreibung - + Markenname \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx index d4a1a2905..6b90cc0f6 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unit - + Products - + Product Name - + Price of unit - + Pictures - + Description - + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx index 9f61d5069..3f2c04564 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unidad - + Productos - + Nombre del producto - + Precio de la unidad - + Imágenes - + Descripción - + Nombre de la marca \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx index f4e176e45..51937cd9d 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unité - + Produits - + Nom du produit - + Prix de l'unité - + Images - + Description - + Nom de la marque \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx index 28d0a0dd6..f390abc86 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 単位 - + 製品名 - + 商品名 - + 本体価格 - + 画像 - + 商品説明 - + ブランド名 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx index 460e49894..92b488c93 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 단위 - + 제품 - + 상품명 - + 단가 - + 영화 - + 설명 - + 상표명 \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx index 6f7eb0b42..a298f3c57 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx @@ -1,141 +1,146 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Unit - + Products - + Product Name - + Price of unit - + Pictures - + Description - + Brand Name \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx index ae417d275..d6a7a877b 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Единица - + Продукция - + Название продукта - + Цена единицы - + Изображения - + Описание - + Название бренда \ No newline at end of file diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx index 3fde269e0..be073480c 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 单位 - + 产品 - + 产品名称 - + 单位价格 - + 图片 - + 描述 - + 品牌名称 \ No newline at end of file diff --git a/src/Application/_Imports.cs b/src/Application/_Imports.cs index 470a39ce0..e23c5eb78 100644 --- a/src/Application/_Imports.cs +++ b/src/Application/_Imports.cs @@ -25,4 +25,4 @@ global using Microsoft.Extensions.Caching.Memory; global using Microsoft.Extensions.Localization; global using Microsoft.Extensions.Logging; -global using Microsoft.Extensions.Primitives; +global using Microsoft.Extensions.Primitives; \ No newline at end of file diff --git a/src/Domain/Common/DomainEvent.cs b/src/Domain/Common/DomainEvent.cs index d2c4ee263..d063faf77 100644 --- a/src/Domain/Common/DomainEvent.cs +++ b/src/Domain/Common/DomainEvent.cs @@ -5,12 +5,13 @@ namespace CleanArchitecture.Blazor.Domain.Common; -public abstract class DomainEvent: INotification +public abstract class DomainEvent : INotification { protected DomainEvent() { DateOccurred = DateTimeOffset.UtcNow; } + public bool IsPublished { get; set; } public DateTimeOffset DateOccurred { get; protected set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/BaseAuditableEntity.cs b/src/Domain/Common/Entities/BaseAuditableEntity.cs index 38c7acc0e..a8d5a357c 100644 --- a/src/Domain/Common/Entities/BaseAuditableEntity.cs +++ b/src/Domain/Common/Entities/BaseAuditableEntity.cs @@ -12,4 +12,4 @@ public abstract class BaseAuditableEntity : BaseEntity public virtual DateTime? LastModified { get; set; } public virtual string? LastModifiedBy { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs b/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs index 48ec742f9..573464c6a 100644 --- a/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs +++ b/src/Domain/Common/Entities/BaseAuditableSoftDeleteEntity.cs @@ -7,5 +7,4 @@ public abstract class BaseAuditableSoftDeleteEntity : BaseAuditableEntity, ISoft { public DateTime? Deleted { get; set; } public string? DeletedBy { get; set; } - -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/BaseEntity.cs b/src/Domain/Common/Entities/BaseEntity.cs index a25a99c78..d7bd946fb 100644 --- a/src/Domain/Common/Entities/BaseEntity.cs +++ b/src/Domain/Common/Entities/BaseEntity.cs @@ -7,11 +7,11 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public abstract class BaseEntity : IEntity { - public virtual int Id { get; set; } private readonly List _domainEvents = new(); - [NotMapped] - public IReadOnlyCollection DomainEvents => _domainEvents.AsReadOnly(); + [NotMapped] public IReadOnlyCollection DomainEvents => _domainEvents.AsReadOnly(); + + public virtual int Id { get; set; } public void AddDomainEvent(DomainEvent domainEvent) { @@ -27,4 +27,4 @@ public void ClearDomainEvents() { _domainEvents.Clear(); } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/IAuditTrial.cs b/src/Domain/Common/Entities/IAuditTrial.cs index 2b4e61510..5fb41c3d1 100644 --- a/src/Domain/Common/Entities/IAuditTrial.cs +++ b/src/Domain/Common/Entities/IAuditTrial.cs @@ -5,4 +5,4 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public interface IAuditTrial { -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/IEntity.cs b/src/Domain/Common/Entities/IEntity.cs index f1cfa8f63..c196404f5 100644 --- a/src/Domain/Common/Entities/IEntity.cs +++ b/src/Domain/Common/Entities/IEntity.cs @@ -5,9 +5,9 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public interface IEntity { - } + public interface IEntity : IEntity { T Id { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/IMustHaveTenant.cs b/src/Domain/Common/Entities/IMustHaveTenant.cs index 543f046e8..28b8cf8cc 100644 --- a/src/Domain/Common/Entities/IMustHaveTenant.cs +++ b/src/Domain/Common/Entities/IMustHaveTenant.cs @@ -1,9 +1,11 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; + public interface IMustHaveTenant { string TenantId { get; set; } } + public interface IMayHaveTenant { string? TenantId { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/ISoftDelete.cs b/src/Domain/Common/Entities/ISoftDelete.cs index 327be9579..3220eb474 100644 --- a/src/Domain/Common/Entities/ISoftDelete.cs +++ b/src/Domain/Common/Entities/ISoftDelete.cs @@ -7,4 +7,4 @@ public interface ISoftDelete { DateTime? Deleted { get; set; } string? DeletedBy { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Entities/OwnerPropertyEntity.cs b/src/Domain/Common/Entities/OwnerPropertyEntity.cs index 970a186bb..2681a81b8 100644 --- a/src/Domain/Common/Entities/OwnerPropertyEntity.cs +++ b/src/Domain/Common/Entities/OwnerPropertyEntity.cs @@ -8,8 +8,7 @@ namespace CleanArchitecture.Blazor.Domain.Common.Entities; public abstract class OwnerPropertyEntity : BaseAuditableEntity { - [ForeignKey("CreatedBy")] - public virtual ApplicationUser? Owner { get; set; } - [ForeignKey("LastModifiedBy")] - public virtual ApplicationUser? Editor { get; set; } -} + [ForeignKey("CreatedBy")] public virtual ApplicationUser? Owner { get; set; } + + [ForeignKey("LastModifiedBy")] public virtual ApplicationUser? Editor { get; set; } +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/ExportType.cs b/src/Domain/Common/Enums/ExportType.cs index f4716d532..eee401b02 100644 --- a/src/Domain/Common/Enums/ExportType.cs +++ b/src/Domain/Common/Enums/ExportType.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Domain.Common.Enums; + public enum ExportType { Excel, diff --git a/src/Domain/Common/Enums/JobStatus.cs b/src/Domain/Common/Enums/JobStatus.cs index f5e07cc4d..dcda76b78 100644 --- a/src/Domain/Common/Enums/JobStatus.cs +++ b/src/Domain/Common/Enums/JobStatus.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Domain.Common.Enums; + public enum JobStatus { NotStart, @@ -6,4 +7,4 @@ public enum JobStatus Doing, Done, Pending -} +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/PartnerType.cs b/src/Domain/Common/Enums/PartnerType.cs index bdd2f900a..398aee988 100644 --- a/src/Domain/Common/Enums/PartnerType.cs +++ b/src/Domain/Common/Enums/PartnerType.cs @@ -7,4 +7,4 @@ public enum PartnerType { TP, IC -} +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/TrackingState.cs b/src/Domain/Common/Enums/TrackingState.cs index 6768b4949..1d59c12c1 100644 --- a/src/Domain/Common/Enums/TrackingState.cs +++ b/src/Domain/Common/Enums/TrackingState.cs @@ -7,10 +7,13 @@ public enum TrackingState { /// Existing entity that has not been modified. Unchanged, + /// Newly created entity. Added, + /// Existing entity that has been modified. Modified, + /// Existing entity that has been marked as deleted. Deleted -} +} \ No newline at end of file diff --git a/src/Domain/Common/Enums/UploadType.cs b/src/Domain/Common/Enums/UploadType.cs index 2580c01fa..5943a0a8b 100644 --- a/src/Domain/Common/Enums/UploadType.cs +++ b/src/Domain/Common/Enums/UploadType.cs @@ -7,10 +7,7 @@ namespace CleanArchitecture.Blazor.Domain.Common.Enums; public enum UploadType : byte { - [Description(@"Products")] - Product, - [Description(@"ProfilePictures")] - ProfilePicture, - [Description(@"Documents")] - Document -} + [Description(@"Products")] Product, + [Description(@"ProfilePictures")] ProfilePicture, + [Description(@"Documents")] Document +} \ No newline at end of file diff --git a/src/Domain/Common/Events/CreatedEvent.cs b/src/Domain/Common/Events/CreatedEvent.cs index 0308ad7c1..b49b60662 100644 --- a/src/Domain/Common/Events/CreatedEvent.cs +++ b/src/Domain/Common/Events/CreatedEvent.cs @@ -8,6 +8,7 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Common.Events; + public class CreatedEvent : DomainEvent where T : IEntity { public CreatedEvent(T entity) @@ -16,4 +17,4 @@ public CreatedEvent(T entity) } public T Entity { get; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Events/DeletedEvent.cs b/src/Domain/Common/Events/DeletedEvent.cs index 4db64978d..a2d66b588 100644 --- a/src/Domain/Common/Events/DeletedEvent.cs +++ b/src/Domain/Common/Events/DeletedEvent.cs @@ -8,6 +8,7 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Common.Events; + public class DeletedEvent : DomainEvent where T : IEntity { public DeletedEvent(T entity) @@ -16,4 +17,4 @@ public DeletedEvent(T entity) } public T Entity { get; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Events/UpdatedEvent.cs b/src/Domain/Common/Events/UpdatedEvent.cs index 48bfea041..dbbd4b122 100644 --- a/src/Domain/Common/Events/UpdatedEvent.cs +++ b/src/Domain/Common/Events/UpdatedEvent.cs @@ -1,6 +1,7 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Common.Events; + public class UpdatedEvent : DomainEvent where T : IEntity { public UpdatedEvent(T entity) @@ -9,4 +10,4 @@ public UpdatedEvent(T entity) } public T Entity { get; } -} +} \ No newline at end of file diff --git a/src/Domain/Common/Exceptions/UnsupportedColourException.cs b/src/Domain/Common/Exceptions/UnsupportedColourException.cs index 2272bf6da..8dcddd6ba 100644 --- a/src/Domain/Common/Exceptions/UnsupportedColourException.cs +++ b/src/Domain/Common/Exceptions/UnsupportedColourException.cs @@ -9,4 +9,4 @@ public UnsupportedColourException(string code) : base($"Colour \"{code}\" is unsupported.") { } -} +} \ No newline at end of file diff --git a/src/Domain/Common/ValueObject.cs b/src/Domain/Common/ValueObject.cs index 386690ffd..3a8937e61 100644 --- a/src/Domain/Common/ValueObject.cs +++ b/src/Domain/Common/ValueObject.cs @@ -9,27 +9,21 @@ public abstract class ValueObject { protected static bool EqualOperator(ValueObject left, ValueObject right) { - if (left is null ^ right is null) - { - return false; - } + if (left is null ^ right is null) return false; return left?.Equals(right) != false; } protected static bool NotEqualOperator(ValueObject left, ValueObject right) { - return !(EqualOperator(left, right)); + return !EqualOperator(left, right); } protected abstract IEnumerable GetEqualityComponents(); public override bool Equals(object obj) { - if (obj == null || obj.GetType() != GetType()) - { - return false; - } + if (obj == null || obj.GetType() != GetType()) return false; var other = (ValueObject)obj; return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents()); @@ -41,4 +35,4 @@ public override int GetHashCode() .Select(x => x != null ? x.GetHashCode() : 0) .Aggregate((x, y) => x ^ y); } -} +} \ No newline at end of file diff --git a/src/Domain/Domain.csproj b/src/Domain/Domain.csproj index a0cc1f16c..cccaa204d 100644 --- a/src/Domain/Domain.csproj +++ b/src/Domain/Domain.csproj @@ -1,18 +1,18 @@  - - net8.0 - CleanArchitecture.Blazor.Domain - CleanArchitecture.Blazor.Domain - enable - enable - default - + + net8.0 + CleanArchitecture.Blazor.Domain + CleanArchitecture.Blazor.Domain + enable + enable + default + - - - - - + + + + + diff --git a/src/Domain/Entities/AuditTrail.cs b/src/Domain/Entities/AuditTrail.cs index 969108246..5dea2b0a8 100644 --- a/src/Domain/Entities/AuditTrail.cs +++ b/src/Domain/Entities/AuditTrail.cs @@ -19,10 +19,10 @@ public class AuditTrail : IEntity public Dictionary? NewValues { get; set; } public List? AffectedColumns { get; set; } public Dictionary PrimaryKey { get; set; } = new(); - public List TemporaryProperties { get; } = new(); public bool HasTemporaryProperties => TemporaryProperties.Any(); } + public enum AuditType { None, diff --git a/src/Domain/Entities/Customer.cs b/src/Domain/Entities/Customer.cs index b12666414..777bf46e9 100644 --- a/src/Domain/Entities/Customer.cs +++ b/src/Domain/Entities/Customer.cs @@ -13,6 +13,4 @@ public class Customer : BaseAuditableEntity { public string? Name { get; set; } public string? Description { get; set; } - - -} +} \ No newline at end of file diff --git a/src/Domain/Entities/Document.cs b/src/Domain/Entities/Document.cs index c44ca0c72..a11e1b64d 100644 --- a/src/Domain/Entities/Document.cs +++ b/src/Domain/Entities/Document.cs @@ -4,7 +4,6 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; using CleanArchitecture.Blazor.Domain.Common.Enums; - namespace CleanArchitecture.Blazor.Domain.Entities; public class Document : OwnerPropertyEntity, IMayHaveTenant, IAuditTrial @@ -16,9 +15,10 @@ public class Document : OwnerPropertyEntity, IMayHaveTenant, IAuditTrial public bool IsPublic { get; set; } public string? URL { get; set; } public DocumentType DocumentType { get; set; } = default!; - public string? TenantId { get; set; } public virtual Tenant? Tenant { get; set; } + public string? TenantId { get; set; } } + public enum DocumentType { Document, diff --git a/src/Domain/Entities/KeyValue.cs b/src/Domain/Entities/KeyValue.cs index c749b9467..789cbcd3b 100644 --- a/src/Domain/Entities/KeyValue.cs +++ b/src/Domain/Entities/KeyValue.cs @@ -12,15 +12,11 @@ public class KeyValue : BaseAuditableEntity, IAuditTrial public string? Value { get; set; } public string? Text { get; set; } public string? Description { get; set; } - } + public enum Picklist { - [Description("Status")] - Status, - [Description("Unit")] - Unit, - [Description("Brand")] - Brand -} - + [Description("Status")] Status, + [Description("Unit")] Unit, + [Description("Brand")] Brand +} \ No newline at end of file diff --git a/src/Domain/Entities/Logger.cs b/src/Domain/Entities/Logger.cs index 30faec806..8c0fec06e 100644 --- a/src/Domain/Entities/Logger.cs +++ b/src/Domain/Entities/Logger.cs @@ -11,7 +11,6 @@ namespace CleanArchitecture.Blazor.Domain.Entities; public class Logger : IEntity { - public int Id { get; set; } public string? Message { get; set; } public string? MessageTemplate { get; set; } public string Level { get; set; } = default!; @@ -23,4 +22,5 @@ public class Logger : IEntity public string? ClientAgent { get; set; } public string? Properties { get; set; } public string? LogEvent { get; set; } + public int Id { get; set; } } \ No newline at end of file diff --git a/src/Domain/Entities/Product.cs b/src/Domain/Entities/Product.cs index 033907233..01c79396b 100644 --- a/src/Domain/Entities/Product.cs +++ b/src/Domain/Entities/Product.cs @@ -13,11 +13,11 @@ public class Product : BaseAuditableEntity public string? Unit { get; set; } public decimal Price { get; set; } public List? Pictures { get; set; } - } + public class ProductImage { public required string Name { get; set; } public decimal Size { get; set; } public required string Url { get; set; } -} +} \ No newline at end of file diff --git a/src/Domain/Entities/Tenant.cs b/src/Domain/Entities/Tenant.cs index e599c1625..af07bf1e9 100644 --- a/src/Domain/Entities/Tenant.cs +++ b/src/Domain/Entities/Tenant.cs @@ -1,9 +1,10 @@ using CleanArchitecture.Blazor.Domain.Common.Entities; namespace CleanArchitecture.Blazor.Domain.Entities; + public class Tenant : IEntity { - public string Id { get; set; } = Guid.NewGuid().ToString(); public string? Name { get; set; } public string? Description { get; set; } -} + public string Id { get; set; } = Guid.NewGuid().ToString(); +} \ No newline at end of file diff --git a/src/Domain/Events/CustomerCreatedEvent.cs b/src/Domain/Events/CustomerCreatedEvent.cs index 4e7d3df62..d0931449a 100644 --- a/src/Domain/Events/CustomerCreatedEvent.cs +++ b/src/Domain/Events/CustomerCreatedEvent.cs @@ -2,16 +2,14 @@ // The .NET Foundation licenses this file to you under the MIT license. - namespace CleanArchitecture.Blazor.Domain.Events; - public class CustomerCreatedEvent : DomainEvent +public class CustomerCreatedEvent : DomainEvent +{ + public CustomerCreatedEvent(Customer item) { - public CustomerCreatedEvent(Customer item) - { - Item = item; - } - - public Customer Item { get; } + Item = item; } + public Customer Item { get; } +} \ No newline at end of file diff --git a/src/Domain/Events/CustomerDeletedEvent.cs b/src/Domain/Events/CustomerDeletedEvent.cs index efa5bb8d4..1c85dd6da 100644 --- a/src/Domain/Events/CustomerDeletedEvent.cs +++ b/src/Domain/Events/CustomerDeletedEvent.cs @@ -3,13 +3,12 @@ namespace CleanArchitecture.Blazor.Domain.Events; - public class CustomerDeletedEvent : DomainEvent +public class CustomerDeletedEvent : DomainEvent +{ + public CustomerDeletedEvent(Customer item) { - public CustomerDeletedEvent(Customer item) - { - Item = item; - } - - public Customer Item { get; } + Item = item; } + public Customer Item { get; } +} \ No newline at end of file diff --git a/src/Domain/Events/CustomerUpdatedEvent.cs b/src/Domain/Events/CustomerUpdatedEvent.cs index 57c91c9f5..a58306ff8 100644 --- a/src/Domain/Events/CustomerUpdatedEvent.cs +++ b/src/Domain/Events/CustomerUpdatedEvent.cs @@ -3,14 +3,12 @@ namespace CleanArchitecture.Blazor.Domain.Events; - - public class CustomerUpdatedEvent : DomainEvent +public class CustomerUpdatedEvent : DomainEvent +{ + public CustomerUpdatedEvent(Customer item) { - public CustomerUpdatedEvent(Customer item) - { - Item = item; - } - - public Customer Item { get; } + Item = item; } + public Customer Item { get; } +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationRole.cs b/src/Domain/Identity/ApplicationRole.cs index a1e2c4d4a..18e42f5e0 100644 --- a/src/Domain/Identity/ApplicationRole.cs +++ b/src/Domain/Identity/ApplicationRole.cs @@ -5,10 +5,7 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationRole : IdentityRole { - public string? Description { get; set; } - public virtual ICollection RoleClaims { get; set; } - public virtual ICollection UserRoles { get; set; } - public ApplicationRole() : base() + public ApplicationRole() { RoleClaims = new HashSet(); UserRoles = new HashSet(); @@ -19,4 +16,8 @@ public ApplicationRole(string roleName) : base(roleName) RoleClaims = new HashSet(); UserRoles = new HashSet(); } -} + + public string? Description { get; set; } + public virtual ICollection RoleClaims { get; set; } + public virtual ICollection UserRoles { get; set; } +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationRoleClaim.cs b/src/Domain/Identity/ApplicationRoleClaim.cs index 30c489605..1aad3769f 100644 --- a/src/Domain/Identity/ApplicationRoleClaim.cs +++ b/src/Domain/Identity/ApplicationRoleClaim.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Domain.Identity; + public class ApplicationRoleClaim : IdentityRoleClaim { public string? Description { get; set; } diff --git a/src/Domain/Identity/ApplicationUser.cs b/src/Domain/Identity/ApplicationUser.cs index 8843b985e..e24ad5c0c 100644 --- a/src/Domain/Identity/ApplicationUser.cs +++ b/src/Domain/Identity/ApplicationUser.cs @@ -7,12 +7,21 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationUser : IdentityUser { + public ApplicationUser() + { + UserClaims = new HashSet(); + UserRoles = new HashSet(); + Logins = new HashSet(); + Tokens = new HashSet(); + } + public string? DisplayName { get; set; } public string? Provider { get; set; } = "Local"; public string? TenantId { get; set; } public string? TenantName { get; set; } - [Column(TypeName = "text")] - public string? ProfilePictureDataUrl { get; set; } + + [Column(TypeName = "text")] public string? ProfilePictureDataUrl { get; set; } + public bool IsActive { get; set; } public bool IsLive { get; set; } public string? RefreshToken { get; set; } @@ -23,15 +32,6 @@ public class ApplicationUser : IdentityUser public virtual ICollection Tokens { get; set; } public string? SuperiorId { get; set; } = null; - [ForeignKey("SuperiorId")] - public ApplicationUser? Superior { get; set; } = null; - public ApplicationUser() : base() - { - UserClaims = new HashSet(); - UserRoles = new HashSet(); - Logins = new HashSet(); - Tokens = new HashSet(); - } - -} + [ForeignKey("SuperiorId")] public ApplicationUser? Superior { get; set; } = null; +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserClaim.cs b/src/Domain/Identity/ApplicationUserClaim.cs index 6e67f2f3b..a484a9e32 100644 --- a/src/Domain/Identity/ApplicationUserClaim.cs +++ b/src/Domain/Identity/ApplicationUserClaim.cs @@ -7,4 +7,4 @@ public class ApplicationUserClaim : IdentityUserClaim { public string? Description { get; set; } public virtual ApplicationUser User { get; set; } = default!; -} +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserLogin.cs b/src/Domain/Identity/ApplicationUserLogin.cs index 0c65dd11c..2c769fd9c 100644 --- a/src/Domain/Identity/ApplicationUserLogin.cs +++ b/src/Domain/Identity/ApplicationUserLogin.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationUserLogin : IdentityUserLogin { public virtual ApplicationUser User { get; set; } = default!; -} +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserRole.cs b/src/Domain/Identity/ApplicationUserRole.cs index f062ef8c2..a55b898f6 100644 --- a/src/Domain/Identity/ApplicationUserRole.cs +++ b/src/Domain/Identity/ApplicationUserRole.cs @@ -7,5 +7,4 @@ public class ApplicationUserRole : IdentityUserRole { public virtual ApplicationUser User { get; set; } = default!; public virtual ApplicationRole Role { get; set; } = default!; - -} +} \ No newline at end of file diff --git a/src/Domain/Identity/ApplicationUserToken.cs b/src/Domain/Identity/ApplicationUserToken.cs index 9d44a0d92..df687264f 100644 --- a/src/Domain/Identity/ApplicationUserToken.cs +++ b/src/Domain/Identity/ApplicationUserToken.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Domain.Identity; public class ApplicationUserToken : IdentityUserToken { public virtual ApplicationUser User { get; set; } = default!; -} +} \ No newline at end of file diff --git a/src/Domain/ValueObjects/Colour.cs b/src/Domain/ValueObjects/Colour.cs index 278b3428e..a05339afc 100644 --- a/src/Domain/ValueObjects/Colour.cs +++ b/src/Domain/ValueObjects/Colour.cs @@ -7,10 +7,6 @@ namespace CleanArchitecture.Blazor.Domain.ValueObjects; #nullable disable public class Colour : ValueObject { - static Colour() - { - } - private Colour() { } @@ -20,18 +16,6 @@ private Colour(string code) Code = code; } - public static Colour From(string code) - { - var colour = new Colour { Code = code }; - - if (!SupportedColours.Contains(colour)) - { - throw new UnsupportedColourException(code); - } - - return colour; - } - public static Colour White => new("#FFFFFF"); public static Colour Red => new("#FF5733"); @@ -50,21 +34,6 @@ public static Colour From(string code) public string Code { get; private set; } - public static implicit operator string(Colour colour) - { - return colour.ToString(); - } - - public static explicit operator Colour(string code) - { - return From(code); - } - - public override string ToString() - { - return Code; - } - protected static IEnumerable SupportedColours { get @@ -80,8 +49,32 @@ protected static IEnumerable SupportedColours } } + public static Colour From(string code) + { + var colour = new Colour { Code = code }; + + if (!SupportedColours.Contains(colour)) throw new UnsupportedColourException(code); + + return colour; + } + + public static implicit operator string(Colour colour) + { + return colour.ToString(); + } + + public static explicit operator Colour(string code) + { + return From(code); + } + + public override string ToString() + { + return Code; + } + protected override IEnumerable GetEqualityComponents() { yield return Code; } -} +} \ No newline at end of file diff --git a/src/Domain/_Imports.cs b/src/Domain/_Imports.cs index ed41b95af..e84114f06 100644 --- a/src/Domain/_Imports.cs +++ b/src/Domain/_Imports.cs @@ -3,4 +3,4 @@ global using CleanArchitecture.Blazor.Domain.Common; global using CleanArchitecture.Blazor.Domain.Entities; -global using Microsoft.AspNetCore.Identity; +global using Microsoft.AspNetCore.Identity; \ No newline at end of file diff --git a/src/Infrastructure/Configurations/DashbordSettings.cs b/src/Infrastructure/Configurations/DashbordSettings.cs index be39c05bc..4b4088442 100644 --- a/src/Infrastructure/Configurations/DashbordSettings.cs +++ b/src/Infrastructure/Configurations/DashbordSettings.cs @@ -33,22 +33,6 @@ public class DashboardSettings : IApplicationSettings /// public int LoadingTransitionScreenDuration { get; set; } = 600; - /// - /// Current application version - /// - public string Version { get; set; } = "1.3.0"; - - /// - /// Application framework - /// - - public string App { get; set; } = "Blazor"; - - /// - /// The application name / title - /// - public string AppName { get; set; } = "Blazor Dashboard"; - /// /// Application framework including the version /// @@ -69,4 +53,20 @@ public class DashboardSettings : IApplicationSettings /// Copyright watermark /// public string Copyright { get; set; } = "@2023 Copyright"; + + /// + /// Current application version + /// + public string Version { get; set; } = "1.3.0"; + + /// + /// Application framework + /// + + public string App { get; set; } = "Blazor"; + + /// + /// The application name / title + /// + public string AppName { get; set; } = "Blazor Dashboard"; } \ No newline at end of file diff --git a/src/Infrastructure/Configurations/DatabaseSettings.cs b/src/Infrastructure/Configurations/DatabaseSettings.cs index 54cc579ca..9709fb5a6 100644 --- a/src/Infrastructure/Configurations/DatabaseSettings.cs +++ b/src/Infrastructure/Configurations/DatabaseSettings.cs @@ -30,17 +30,13 @@ public class DatabaseSettings : IValidatableObject public IEnumerable Validate(ValidationContext validationContext) { if (string.IsNullOrEmpty(DBProvider)) - { yield return new ValidationResult( $"{nameof(DatabaseSettings)}.{nameof(DBProvider)} is not configured", new[] { nameof(DBProvider) }); - } if (string.IsNullOrEmpty(ConnectionString)) - { yield return new ValidationResult( $"{nameof(DatabaseSettings)}.{nameof(ConnectionString)} is not configured", new[] { nameof(ConnectionString) }); - } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Configurations/IdentitySettings.cs b/src/Infrastructure/Configurations/IdentitySettings.cs index 7a7d2180f..b73baf2c3 100644 --- a/src/Infrastructure/Configurations/IdentitySettings.cs +++ b/src/Infrastructure/Configurations/IdentitySettings.cs @@ -9,38 +9,38 @@ public class IdentitySettings : IIdentitySettings // Password settings. /// - /// Gets or sets a value indicating whether a password should require a digit. + /// Gets or sets a value indicating whether a password should require a digit. /// public bool RequireDigit { get; set; } = true; /// - /// Gets or sets a value indicating what the minimum required length of a password should be. + /// Gets or sets a value indicating what the minimum required length of a password should be. /// public int RequiredLength { get; set; } = 6; /// - /// Gets or sets a value indicating what the maximum required length of a password should be. + /// Gets or sets a value indicating what the maximum required length of a password should be. /// public int MaxLength { get; set; } = 16; /// - /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. + /// Gets or sets a value indicating whether the password should require a non-alphanumeric(not: 0-9, A-Z) character. /// public bool RequireNonAlphanumeric { get; set; } = true; /// - /// Gets or sets a value indicating whether a password should require an upper-case character. + /// Gets or sets a value indicating whether a password should require an upper-case character. /// public bool RequireUpperCase { get; set; } = true; /// - /// Gets or sets a value indicating whether a password should require an lower-case character. + /// Gets or sets a value indicating whether a password should require an lower-case character. /// public bool RequireLowerCase { get; set; } = false; // Lockout settings. /// - /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. + /// Gets or sets a value indicating what the default lockout TimeSpan should be, measured in minutes. /// public int DefaultLockoutTimeSpan { get; set; } = 30; } \ No newline at end of file diff --git a/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs b/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs index 3fb35ec81..d8fbd48a3 100644 --- a/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs +++ b/src/Infrastructure/Constants/ClaimTypes/ApplicationClaimTypes.cs @@ -14,4 +14,4 @@ public static class ApplicationClaimTypes public const string Permission = "Permission"; public const string AssignedRoles = "AssignedRoles"; public const string ProfilePictureDataUrl = "ProfilePictureDataUrl"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/ConstantString.cs b/src/Infrastructure/Constants/ConstantString.cs index 45af74f3c..1df639455 100644 --- a/src/Infrastructure/Constants/ConstantString.cs +++ b/src/Infrastructure/Constants/ConstantString.cs @@ -2,9 +2,12 @@ using System.Resources; namespace CleanArchitecture.Blazor.Infrastructure.Constants; + public static class ConstantString { - public const string CONSTANTSTRINGRESOURCEID = "CleanArchitecture.Blazor.Infrastructure.Resources.Constants.ConstantString"; + public const string CONSTANTSTRINGRESOURCEID = + "CleanArchitecture.Blazor.Infrastructure.Resources.Constants.ConstantString"; + private static readonly ResourceManager rm; static ConstantString() @@ -12,11 +15,6 @@ static ConstantString() rm = new ResourceManager(CONSTANTSTRINGRESOURCEID, typeof(ConstantString).Assembly); } - public static string Localize(string key) - { - return rm.GetString(key, CultureInfo.CurrentCulture) ?? key; - } - //==========================================================// //for button text public static string Refresh => Localize("Refresh"); @@ -84,13 +82,25 @@ public static string Localize(string key) public static string DeleteTheItem => Localize("Delete the {0}"); public static string DeleteItems => Localize("Delete selected items: {0}"); public static string DeleteConfirmation => Localize("Are you sure you want to delete this item: {0}?"); - public static string DeleteConfirmationWithId => Localize("Are you sure you want to delete this item with Id: {0}?"); - public static string DeleteConfirmWithSelected => Localize("Are you sure you want to delete the selected items: {0}?"); + + public static string DeleteConfirmationWithId => + Localize("Are you sure you want to delete this item with Id: {0}?"); + + public static string DeleteConfirmWithSelected => + Localize("Are you sure you want to delete the selected items: {0}?"); + public static string NoRecords => Localize("There are no records to view."); public static string Loading => Localize("Loading..."); public static string Waiting => Localize("Wating..."); public static string Processing => Localize("Processing..."); public static string DeleteConfirmationTitle => Localize("Delete Confirmation"); public static string LogoutConfirmationTitle => Localize("Logout Confirmation"); - public static string LogoutConfirmation => Localize("You are attempting to log out of application. Do you really want to log out?"); -} + + public static string LogoutConfirmation => + Localize("You are attempting to log out of application. Do you really want to log out?"); + + public static string Localize(string key) + { + return rm.GetString(key, CultureInfo.CurrentCulture) ?? key; + } +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Database/DbProviderKeys.cs b/src/Infrastructure/Constants/Database/DbProviderKeys.cs index 6babb2510..e716f27d2 100644 --- a/src/Infrastructure/Constants/Database/DbProviderKeys.cs +++ b/src/Infrastructure/Constants/Database/DbProviderKeys.cs @@ -1,7 +1,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Database; + internal class DbProviderKeys { public const string Npgsql = "postgresql"; public const string SqlServer = "mssql"; public const string SqLite = "sqlite"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/GlobalVariable.cs b/src/Infrastructure/Constants/GlobalVariable.cs index b2c765147..70eb9c647 100644 --- a/src/Infrastructure/Constants/GlobalVariable.cs +++ b/src/Infrastructure/Constants/GlobalVariable.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants; + public static class GlobalVariable { public static long MaxAllowedSize => 512000 * 100; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs b/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs index c7c819d3b..fe2aff779 100644 --- a/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs +++ b/src/Infrastructure/Constants/LocalStorage/LocalStorage.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.LocalStorage; + public static class LocalStorage { public const string UserId = "UserId"; @@ -6,4 +7,4 @@ public static class LocalStorage public const string TenantId = "TenantId"; public const string TenantName = "TenantName"; public const string ClaimsIdentity = "ClaimsIdentity"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Localization/LocalizationConstants.cs b/src/Infrastructure/Constants/Localization/LocalizationConstants.cs index 4add2dc5c..5b1139305 100644 --- a/src/Infrastructure/Constants/Localization/LocalizationConstants.cs +++ b/src/Infrastructure/Constants/Localization/LocalizationConstants.cs @@ -6,62 +6,64 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Localization; public static class LocalizationConstants { public const string ResourcesPath = "Resources"; - public static readonly LanguageCode[] SupportedLanguages = { - new LanguageCode - { - Code = "en-US", - DisplayName= "English" - }, - new LanguageCode - { - Code = "de-DE", - DisplayName = "Deutsch" - }, - new LanguageCode - { - Code = "ru", - DisplayName = "Russian" - }, - new LanguageCode - { - Code = "fr-FR", - DisplayName = "French" - }, - new LanguageCode - { - Code = "ja-JP", - DisplayName = "Japanese" - }, - new LanguageCode - { - Code = "km-KH", - DisplayName = "Khmer" - }, - new LanguageCode - { - Code = "ca-ES", - DisplayName = "Catalan" - }, - new LanguageCode - { - Code = "es-ES", - DisplayName = "Spanish" - }, - new LanguageCode - { - Code = "zh-CN", - DisplayName = "中文" - }, - new LanguageCode - { - Code = "ar-iq", - DisplayName = "Arabic Iraq" - } - }; + + public static readonly LanguageCode[] SupportedLanguages = + { + new() + { + Code = "en-US", + DisplayName = "English" + }, + new() + { + Code = "de-DE", + DisplayName = "Deutsch" + }, + new() + { + Code = "ru", + DisplayName = "Russian" + }, + new() + { + Code = "fr-FR", + DisplayName = "French" + }, + new() + { + Code = "ja-JP", + DisplayName = "Japanese" + }, + new() + { + Code = "km-KH", + DisplayName = "Khmer" + }, + new() + { + Code = "ca-ES", + DisplayName = "Catalan" + }, + new() + { + Code = "es-ES", + DisplayName = "Spanish" + }, + new() + { + Code = "zh-CN", + DisplayName = "中文" + }, + new() + { + Code = "ar-iq", + DisplayName = "Arabic Iraq" + } + }; } public class LanguageCode { public string DisplayName { get; set; } = "en-US"; public string Code { get; set; } = "English"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Permission/PermissionModules.cs b/src/Infrastructure/Constants/Permission/PermissionModules.cs index 7d5fea58e..88b12832a 100644 --- a/src/Infrastructure/Constants/Permission/PermissionModules.cs +++ b/src/Infrastructure/Constants/Permission/PermissionModules.cs @@ -5,32 +5,32 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Permission; public static class PermissionModules { + public const string Users = "Users"; + public const string Roles = "Roles"; + public const string Products = "Products"; + public const string Brands = "Brands"; + public const string Companies = "Companies"; + public static List GeneratePermissionsForModule(string module) { - return new List() - { - $"Permissions.{module}.Create", - $"Permissions.{module}.View", - $"Permissions.{module}.Edit", - $"Permissions.{module}.Delete" - }; + return new List + { + $"Permissions.{module}.Create", + $"Permissions.{module}.View", + $"Permissions.{module}.Edit", + $"Permissions.{module}.Delete" + }; } public static List GetAllPermissionsModules() { - return new List() - { - Users, - Roles, - Products, - Brands, - Companies - }; + return new List + { + Users, + Roles, + Products, + Brands, + Companies + }; } - - public const string Users = "Users"; - public const string Roles = "Roles"; - public const string Products = "Products"; - public const string Brands = "Brands"; - public const string Companies = "Companies"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Permission/Permissions.cs b/src/Infrastructure/Constants/Permission/Permissions.cs index 98a6cf566..6f49c7ad2 100644 --- a/src/Infrastructure/Constants/Permission/Permissions.cs +++ b/src/Infrastructure/Constants/Permission/Permissions.cs @@ -8,6 +8,24 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Permission; public static class Permissions { + /// + /// Returns a list of Permissions. + /// + /// + public static List GetRegisteredPermissions() + { + var permissions = new List(); + foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => + c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) + { + var propertyValue = prop.GetValue(null); + if (propertyValue is not null) + permissions.Add((string)propertyValue); + } + + return permissions; + } + [DisplayName("AuditTrails")] [Description("AuditTrails Permissions")] public static class AuditTrails @@ -16,6 +34,7 @@ public static class AuditTrails public const string Search = "Permissions.AuditTrails.Search"; public const string Export = "Permissions.AuditTrails.Export"; } + [DisplayName("Logs")] [Description("Logs Permissions")] public static class Logs @@ -39,6 +58,7 @@ public static class Products public const string Export = "Permissions.Products.Export"; public const string Import = "Permissions.Products.Import"; } + [DisplayName("Customers")] [Description("Customers Permissions")] public static class Customers @@ -78,6 +98,7 @@ public static class Documents public const string Import = "Permissions.Documents.Import"; public const string Download = "Permissions.Documents.Download"; } + [DisplayName("Dictionaries")] [Description("Dictionaries Permissions")] public static class Dictionaries @@ -122,6 +143,7 @@ public static class Roles public const string ManagePermissions = "Permissions.Roles.Permissions"; public const string ManageNavigation = "Permissions.Roles.Navigation"; } + [DisplayName("Multi-Tenant")] [Description("Multi-Tenant Permissions")] public static class Tenants @@ -132,6 +154,7 @@ public static class Tenants public const string Delete = "Permissions.Tenants.Delete"; public const string Search = "Permissions.Tenants.Search"; } + [DisplayName("Role Claims")] [Description("Role Claims Permissions")] public static class RoleClaims @@ -144,7 +167,6 @@ public static class RoleClaims } - [DisplayName("Dashboards")] [Description("Dashboards Permissions")] public static class Dashboards @@ -159,23 +181,4 @@ public static class Hangfire public const string View = "Permissions.Hangfire.View"; public const string Jobs = "Permissions.Hangfire.Jobs"; } - - - /// - /// Returns a list of Permissions. - /// - /// - public static List GetRegisteredPermissions() - { - var permissions = new List(); - foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) - { - var propertyValue = prop.GetValue(null); - if (propertyValue is not null) - permissions.Add((string)propertyValue); - } - return permissions; - } - - -} +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/Role/RoleNameConstants.cs b/src/Infrastructure/Constants/Role/RoleNameConstants.cs index f2dc12a87..6a3ef516e 100644 --- a/src/Infrastructure/Constants/Role/RoleNameConstants.cs +++ b/src/Infrastructure/Constants/Role/RoleNameConstants.cs @@ -6,7 +6,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Constants.Role; public abstract class RoleName { public const string Admin = nameof(Admin); - public const string Basic =nameof(Basic); - public const string Users =nameof(Users); - -} + public const string Basic = nameof(Basic); + public const string Users = nameof(Users); +} \ No newline at end of file diff --git a/src/Infrastructure/Constants/User/UserNameConstants.cs b/src/Infrastructure/Constants/User/UserNameConstants.cs index 7b8932d5f..f0e290269 100644 --- a/src/Infrastructure/Constants/User/UserNameConstants.cs +++ b/src/Infrastructure/Constants/User/UserNameConstants.cs @@ -9,4 +9,4 @@ public abstract class UserName public const string Demo = nameof(Demo); public const string Users = nameof(Users); public const string DefaultPassword = "Password123!"; -} +} \ No newline at end of file diff --git a/src/Infrastructure/DependencyInjection.cs b/src/Infrastructure/DependencyInjection.cs index 46ab1cfeb..13bf2d2cc 100644 --- a/src/Infrastructure/DependencyInjection.cs +++ b/src/Infrastructure/DependencyInjection.cs @@ -43,38 +43,42 @@ public static IServiceCollection AddInfrastructure(this IServiceCollection servi { options.UseCookie = false; - options.AccessSigningOptions = new JwtSigningOptions() + options.AccessSigningOptions = new JwtSigningOptions { - SigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), + SigningKey = + new SymmetricSecurityKey( + Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), Algorithm = SecurityAlgorithms.HmacSha256, - ExpirationMinutes = 120, + ExpirationMinutes = 120 }; - options.RefreshSigningOptions = new JwtSigningOptions() + options.RefreshSigningOptions = new JwtSigningOptions { - SigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("e_qmg*)=vr9yxpp^g^#((wkwk7fh#+3qy!zzq+r-hifw2(_u+=")), + SigningKey = + new SymmetricSecurityKey( + Encoding.UTF8.GetBytes("e_qmg*)=vr9yxpp^g^#((wkwk7fh#+3qy!zzq+r-hifw2(_u+=")), Algorithm = SecurityAlgorithms.HmacSha256, - ExpirationMinutes = 2880, + ExpirationMinutes = 2880 }; - options.AccessValidationParameters = new TokenValidationParameters() + options.AccessValidationParameters = new TokenValidationParameters { IssuerSigningKey = options.AccessSigningOptions.SigningKey, ValidIssuer = options.Issuer, ValidAudience = options.Audience, ValidateIssuerSigningKey = true, - ClockSkew = TimeSpan.Zero, + ClockSkew = TimeSpan.Zero }; - options.RefreshValidationParameters = new TokenValidationParameters() + options.RefreshValidationParameters = new TokenValidationParameters { IssuerSigningKey = options.RefreshSigningOptions.SigningKey, ValidIssuer = options.Issuer, ValidAudience = options.Audience, ValidateIssuerSigningKey = true, - ClockSkew = TimeSpan.Zero, + ClockSkew = TimeSpan.Zero }; }); - + services.AddSingleton(); return services; @@ -110,22 +114,18 @@ private static IServiceCollection AddDatabase(this IServiceCollection services, .AddScoped(); if (configuration.GetValue("UseInMemoryDatabase")) - { services.AddDbContext(options => { options.UseInMemoryDatabase("BlazorDashboardDb"); options.EnableSensitiveDataLogging(); }); - } else - { services.AddDbContext((p, m) => { var databaseSettings = p.GetRequiredService>().Value; m.AddInterceptors(p.GetServices()); m.UseDatabase(databaseSettings.DBProvider, databaseSettings.ConnectionString); }); - } services.AddScoped, BlazorContextFactory>(); services.AddTransient(provider => @@ -143,7 +143,7 @@ private static DbContextOptionsBuilder UseDatabase(this DbContextOptionsBuilder case DbProviderKeys.Npgsql: AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true); return builder.UseNpgsql(connectionString, - e => e.MigrationsAssembly("CleanArchitecture.Blazor.Migrators.PostgreSQL")) + e => e.MigrationsAssembly("CleanArchitecture.Blazor.Migrators.PostgreSQL")) .UseSnakeCaseNamingConvention(); case DbProviderKeys.SqlServer: @@ -200,8 +200,8 @@ private static IServiceCollection AddMessageServices(this IServiceCollection ser // configure your sender and template choices with dependency injection. services.AddFluentEmail("support@blazorserver.com") - .AddRazorRenderer(Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates")) - .AddMailKitSender(smtpClientOptions); + .AddRazorRenderer(Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates")) + .AddMailKitSender(smtpClientOptions); return services; } @@ -218,7 +218,7 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti { var identitySettings = configuration.GetRequiredSection(IdentitySettings.Key).Get(); - + // Password settings options.Password.RequireDigit = identitySettings!.RequireDigit; options.Password.RequiredLength = identitySettings.RequiredLength; @@ -237,7 +237,6 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti // User settings options.User.RequireUniqueEmail = true; - }); services.AddScoped() @@ -245,30 +244,31 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti { options.AddPolicy("CanPurge", policy => policy.RequireUserName(UserName.Administrator)); // Here I stored necessary permissions/roles in a constant - foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) + foreach (var prop in typeof(Permissions).GetNestedTypes().SelectMany(c => + c.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy))) { var propertyValue = prop.GetValue(null); if (propertyValue is not null) - { - options.AddPolicy((string)propertyValue, policy => policy.RequireClaim(ApplicationClaimTypes.Permission, (string)propertyValue)); - } + options.AddPolicy((string)propertyValue, + policy => policy.RequireClaim(ApplicationClaimTypes.Permission, (string)propertyValue)); } }) .AddAuthentication() .AddJwtBearer(options => { - options.SaveToken = true; options.RequireHttpsMetadata = false; - options.TokenValidationParameters = new TokenValidationParameters() + options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = false, - IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), + IssuerSigningKey = + new SymmetricSecurityKey( + Encoding.UTF8.GetBytes("yn4$#cr=+i@eljzlhhr2xlgf98aud&(3&!po3r60wlm^3*huh#")), ValidateIssuer = false, ValidateAudience = false, RoleClaimType = ClaimTypes.Role, ClockSkew = TimeSpan.Zero, - ValidateLifetime = false, + ValidateLifetime = false }; options.Events = new JwtBearerEvents { @@ -278,17 +278,12 @@ private static IServiceCollection AddAuthenticationService(this IServiceCollecti var path = context.HttpContext.Request.Path; if (!string.IsNullOrEmpty(accessToken) && path.StartsWithSegments("/signalRHub")) // TODO: move in server? - { context.Token = accessToken.ToString().Substring(7); - } return Task.CompletedTask; } }; }); - services.ConfigureApplicationCookie(options => - { - options.LoginPath = "/pages/authentication/login"; - }); + services.ConfigureApplicationCookie(options => { options.LoginPath = "/pages/authentication/login"; }); services.AddSingleton() .AddSingleton(sp => { @@ -307,7 +302,7 @@ private static IServiceCollection AddFusionCacheService(this IServiceCollection { // CACHE DURATION Duration = TimeSpan.FromMinutes(30), - // FAIL-SAFE OPTIONS + // FAIL-SAFE OPTIONS IsFailSafeEnabled = true, FailSafeMaxDuration = TimeSpan.FromHours(2), FailSafeThrottleDuration = TimeSpan.FromSeconds(30), @@ -337,6 +332,4 @@ private static IServiceCollection AddSimpleJwtService(this IServiceCollection se return services; } - - } \ No newline at end of file diff --git a/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs b/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs index 3ae863d33..45995e918 100644 --- a/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs +++ b/src/Infrastructure/Extensions/AuthenticationProvidersServiceCollectionExtensions.cs @@ -1,24 +1,30 @@ using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.OAuth; using Microsoft.Extensions.Configuration; namespace CleanArchitecture.Blazor.Infrastructure.Extensions; + /// -/// Extensions for configuring login via third party authentication providers. +/// Extensions for configuring login via third party authentication providers. /// public static class AuthenticationProvidersServiceCollectionExtensions { /// - /// Try to configure Microsoft account login if the application configuration has ClientId and ClientSecret. + /// Try to configure Microsoft account login if the application configuration has ClientId and ClientSecret. /// /// Authentication Builder. /// Application configuration. - /// Authentication builder configured to sign in with a Microsoft account, - /// if the required keys are specified in the application configuration. - public static AuthenticationBuilder TryConfigureMicrosoftAccount(this AuthenticationBuilder authenticationBuilder, IConfiguration configuration) + /// + /// Authentication builder configured to sign in with a Microsoft account, + /// if the required keys are specified in the application configuration. + /// + public static AuthenticationBuilder TryConfigureMicrosoftAccount(this AuthenticationBuilder authenticationBuilder, + IConfiguration configuration) { var microsoftAccountClientId = configuration["Authentication:Microsoft:ClientId"]; var microsoftAccountClientSecret = configuration["Authentication:Microsoft:ClientSecret"]; - if (string.IsNullOrWhiteSpace(microsoftAccountClientId) || string.IsNullOrWhiteSpace(microsoftAccountClientSecret)) + if (string.IsNullOrWhiteSpace(microsoftAccountClientId) || + string.IsNullOrWhiteSpace(microsoftAccountClientSecret)) return authenticationBuilder; return authenticationBuilder.AddMicrosoftAccount(options => @@ -30,13 +36,16 @@ public static AuthenticationBuilder TryConfigureMicrosoftAccount(this Authentica } /// - /// Try to configure Google account login if the application configuration has ClientId and ClientSecret. + /// Try to configure Google account login if the application configuration has ClientId and ClientSecret. /// /// Authentication Builder. /// Application configuration. - /// Authentication builder configured for Google account login, - /// if the required keys are specified in the application configuration. - public static AuthenticationBuilder TryConfigureGoogleAccount(this AuthenticationBuilder authenticationBuilder, IConfiguration configuration) + /// + /// Authentication builder configured for Google account login, + /// if the required keys are specified in the application configuration. + /// + public static AuthenticationBuilder TryConfigureGoogleAccount(this AuthenticationBuilder authenticationBuilder, + IConfiguration configuration) { var googleAccountClientId = configuration["Authentication:Google:ClientId"]; var googleAccountClientSecret = configuration["Authentication:Google:ClientSecret"]; @@ -47,16 +56,13 @@ public static AuthenticationBuilder TryConfigureGoogleAccount(this Authenticatio { options.ClientId = googleAccountClientId; options.ClientSecret = googleAccountClientSecret; - options.Events = new Microsoft.AspNetCore.Authentication.OAuth.OAuthEvents + options.Events = new OAuthEvents { OnCreatingTicket = c => { var identity = (ClaimsIdentity?)c?.Principal?.Identity; var avatar = c?.User.GetProperty("picture").GetString(); - if (!string.IsNullOrEmpty(avatar)) - { - identity?.AddClaim(new Claim("avatar", avatar)); - } + if (!string.IsNullOrEmpty(avatar)) identity?.AddClaim(new Claim("avatar", avatar)); return Task.CompletedTask; } }; diff --git a/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs b/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs index 3fcf6c2e8..1fc408011 100644 --- a/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs +++ b/src/Infrastructure/Extensions/ClaimsPrincipalExtensions.cs @@ -8,32 +8,72 @@ namespace CleanArchitecture.Blazor.Infrastructure.Extensions; public static class ClaimsPrincipalExtensions { public static string? GetEmail(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.Email); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.Email); + } + public static string? GetPhoneNumber(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.MobilePhone); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.MobilePhone); + } + public static string? GetUserId(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.NameIdentifier); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.NameIdentifier); + } + public static string? GetUserName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.Name); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.Name); + } + public static string? GetProvider(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Provider); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Provider); + } + public static string? GetDisplayName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ClaimTypes.GivenName); + { + return claimsPrincipal.FindFirstValue(ClaimTypes.GivenName); + } + public static string? GetProfilePictureDataUrl(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.ProfilePictureDataUrl); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.ProfilePictureDataUrl); + } + public static string? GetSuperiorName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorName); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorName); + } + public static string? GetSuperiorId(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorId); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.SuperiorId); + } + public static string? GetTenantName(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantName); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantName); + } + public static string? GetTenantId(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantId); + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.TenantId); + } + public static bool GetStatus(this ClaimsPrincipal claimsPrincipal) - => Convert.ToBoolean(claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Status)); + { + return Convert.ToBoolean(claimsPrincipal.FindFirstValue(ApplicationClaimTypes.Status)); + } + public static string? GetAssignRoles(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.FindFirstValue(ApplicationClaimTypes.AssignedRoles); - public static string[]? GetRoles(this ClaimsPrincipal claimsPrincipal) - => claimsPrincipal.Claims.Where(x => x.Type == ClaimTypes.Role).Select(x => x.Value).ToArray(); -} + { + return claimsPrincipal.FindFirstValue(ApplicationClaimTypes.AssignedRoles); + } + public static string[]? GetRoles(this ClaimsPrincipal claimsPrincipal) + { + return claimsPrincipal.Claims.Where(x => x.Type == ClaimTypes.Role).Select(x => x.Value).ToArray(); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Extensions/IdentityResultExtensions.cs b/src/Infrastructure/Extensions/IdentityResultExtensions.cs index c23ef8db1..03b2f5e9b 100644 --- a/src/Infrastructure/Extensions/IdentityResultExtensions.cs +++ b/src/Infrastructure/Extensions/IdentityResultExtensions.cs @@ -11,4 +11,4 @@ public static Result ToApplicationResult(this IdentityResult result) ? Result.Success() : Result.Failure(result.Errors.Select(e => e.Description).ToArray()); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Extensions/SerilogExtensions.cs b/src/Infrastructure/Extensions/SerilogExtensions.cs index c623a55f5..9320fff20 100644 --- a/src/Infrastructure/Extensions/SerilogExtensions.cs +++ b/src/Infrastructure/Extensions/SerilogExtensions.cs @@ -77,7 +77,6 @@ private static void EnrichWithClientInfo(LoggerConfiguration serilogConfig, ICon if (privacySettings == null) return; if (privacySettings.LogClientIpAddresses) serilogConfig.Enrich.WithClientIp(); if (privacySettings.LogClientAgents) serilogConfig.Enrich.WithRequestHeader("User-Agent"); - } private static void WriteToSqlServer(LoggerConfiguration serilogConfig, string? connectionString) diff --git a/src/Infrastructure/Infrastructure.csproj b/src/Infrastructure/Infrastructure.csproj index 4cd045a03..f9804008b 100644 --- a/src/Infrastructure/Infrastructure.csproj +++ b/src/Infrastructure/Infrastructure.csproj @@ -8,39 +8,39 @@ default - - - - - - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - + + + + + + + + + + + + - + \ No newline at end of file diff --git a/src/Infrastructure/Persistence/ApplicationDbContext.cs b/src/Infrastructure/Persistence/ApplicationDbContext.cs index 1712f95ee..d759c810b 100644 --- a/src/Infrastructure/Persistence/ApplicationDbContext.cs +++ b/src/Infrastructure/Persistence/ApplicationDbContext.cs @@ -3,7 +3,6 @@ using System.Reflection; using CleanArchitecture.Blazor.Domain.Common.Entities; -using CleanArchitecture.Blazor.Domain.Entities; using CleanArchitecture.Blazor.Domain.Identity; namespace CleanArchitecture.Blazor.Infrastructure.Persistence; @@ -15,7 +14,9 @@ public class ApplicationDbContext : IdentityDbContext< ApplicationRoleClaim, ApplicationUserToken>, IApplicationDbContext { public ApplicationDbContext(DbContextOptions options) - : base(options) { } + : base(options) + { + } public DbSet Tenants { get; set; } public DbSet Loggers { get; set; } @@ -38,8 +39,6 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { - } } - } \ No newline at end of file diff --git a/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs b/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs index 8593aaa98..67d9a44e9 100644 --- a/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs +++ b/src/Infrastructure/Persistence/ApplicationDbContextInitializer.cs @@ -1,5 +1,4 @@ using System.Reflection; -using CleanArchitecture.Blazor.Domain.Entities; using CleanArchitecture.Blazor.Domain.Identity; using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes; using CleanArchitecture.Blazor.Infrastructure.Constants.Permission; @@ -7,28 +6,30 @@ using CleanArchitecture.Blazor.Infrastructure.Constants.User; namespace CleanArchitecture.Blazor.Infrastructure.Persistence; + public class ApplicationDbContextInitializer { - private readonly ILogger _logger; private readonly ApplicationDbContext _context; - private readonly UserManager _userManager; + private readonly ILogger _logger; private readonly RoleManager _roleManager; + private readonly UserManager _userManager; - public ApplicationDbContextInitializer(ILogger logger, ApplicationDbContext context, UserManager userManager, RoleManager roleManager) + public ApplicationDbContextInitializer(ILogger logger, + ApplicationDbContext context, UserManager userManager, + RoleManager roleManager) { _logger = logger; _context = context; _userManager = userManager; _roleManager = roleManager; } + public async Task InitialiseAsync() { try { if (_context.Database.IsSqlServer() || _context.Database.IsNpgsql() || _context.Database.IsSqlite()) - { await _context.Database.MigrateAsync(); - } } catch (Exception ex) { @@ -36,6 +37,7 @@ public async Task InitialiseAsync() throw; } } + public async Task SeedAsync() { try @@ -49,6 +51,7 @@ public async Task SeedAsync() throw; } } + private static IEnumerable GetAllPermissions() { var allPermissions = new List(); @@ -81,7 +84,6 @@ private async Task TrySeedAsync() _context.Tenants.Add(new Tenant { Name = "Master", Description = "Master Site" }); _context.Tenants.Add(new Tenant { Name = "Slave", Description = "Slave Site" }); await _context.SaveChangesAsync(); - } // Default roles @@ -93,22 +95,33 @@ private async Task TrySeedAsync() await _roleManager.CreateAsync(administratorRole); foreach (var permission in permissions) - { - await _roleManager.AddClaimAsync(administratorRole, new Claim(ApplicationClaimTypes.Permission, permission)); - } + await _roleManager.AddClaimAsync(administratorRole, + new Claim(ApplicationClaimTypes.Permission, permission)); } + if (_roleManager.Roles.All(r => r.Name != userRole.Name)) { await _roleManager.CreateAsync(userRole); foreach (var permission in permissions) - { if (permission.StartsWith("Permissions.Products")) await _roleManager.AddClaimAsync(userRole, new Claim(ApplicationClaimTypes.Permission, permission)); - } } + // Default users - var administrator = new ApplicationUser { UserName = UserName.Administrator, Provider = "Local", IsActive = true, TenantId = _context.Tenants.First().Id, TenantName = _context.Tenants.First().Name, DisplayName = UserName.Administrator, Email = "new163@163.com", EmailConfirmed = true, ProfilePictureDataUrl = "https://s.gravatar.com/avatar/78be68221020124c23c665ac54e07074?s=80" }; - var demo = new ApplicationUser { UserName = UserName.Demo, IsActive = true, Provider = "Local", TenantId = _context.Tenants.First().Id, TenantName = _context.Tenants.First().Name, DisplayName = UserName.Demo, Email = "neozhu@126.com", EmailConfirmed = true, ProfilePictureDataUrl = "https://s.gravatar.com/avatar/ea753b0b0f357a41491408307ade445e?s=80" }; + var administrator = new ApplicationUser + { + UserName = UserName.Administrator, Provider = "Local", IsActive = true, + TenantId = _context.Tenants.First().Id, TenantName = _context.Tenants.First().Name, + DisplayName = UserName.Administrator, Email = "new163@163.com", EmailConfirmed = true, + ProfilePictureDataUrl = "https://s.gravatar.com/avatar/78be68221020124c23c665ac54e07074?s=80" + }; + var demo = new ApplicationUser + { + UserName = UserName.Demo, IsActive = true, Provider = "Local", TenantId = _context.Tenants.First().Id, + TenantName = _context.Tenants.First().Name, DisplayName = UserName.Demo, Email = "neozhu@126.com", + EmailConfirmed = true, + ProfilePictureDataUrl = "https://s.gravatar.com/avatar/ea753b0b0f357a41491408307ade445e?s=80" + }; if (_userManager.Users.All(u => u.UserName != administrator.UserName)) @@ -116,6 +129,7 @@ private async Task TrySeedAsync() await _userManager.CreateAsync(administrator, UserName.DefaultPassword); await _userManager.AddToRolesAsync(administrator, new[] { administratorRole.Name! }); } + if (_userManager.Users.All(u => u.UserName != demo.UserName)) { await _userManager.CreateAsync(demo, UserName.DefaultPassword); @@ -126,29 +140,65 @@ private async Task TrySeedAsync() // Seed, if necessary if (!_context.KeyValues.Any()) { - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "initialization", Text = "initialization", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "processing", Text = "processing", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "pending", Text = "pending", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Status, Value = "finished", Text = "finished", Description = "Status of workflow" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "Apple", Text = "Apple", Description = "Brand of production" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "MI", Text = "MI", Description = "Brand of production" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "Logitech", Text = "Logitech", Description = "Brand of production" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Brand, Value = "Linksys", Text = "Linksys", Description = "Brand of production" }); - - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "EA", Text = "EA", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "KM", Text = "KM", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "PC", Text = "PC", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "KG", Text = "KG", Description = "Unit of product" }); - _context.KeyValues.Add(new KeyValue { Name = Picklist.Unit, Value = "ST", Text = "ST", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { + Name = Picklist.Status, Value = "initialization", Text = "initialization", + Description = "Status of workflow" + }); + _context.KeyValues.Add(new KeyValue + { + Name = Picklist.Status, Value = "processing", Text = "processing", Description = "Status of workflow" + }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Status, Value = "pending", Text = "pending", Description = "Status of workflow" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Status, Value = "finished", Text = "finished", Description = "Status of workflow" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "Apple", Text = "Apple", Description = "Brand of production" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "MI", Text = "MI", Description = "Brand of production" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "Logitech", Text = "Logitech", Description = "Brand of production" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Brand, Value = "Linksys", Text = "Linksys", Description = "Brand of production" }); + + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "EA", Text = "EA", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "KM", Text = "KM", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "PC", Text = "PC", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "KG", Text = "KG", Description = "Unit of product" }); + _context.KeyValues.Add(new KeyValue + { Name = Picklist.Unit, Value = "ST", Text = "ST", Description = "Unit of product" }); await _context.SaveChangesAsync(); - } + if (!_context.Products.Any()) { - _context.Products.Add(new Product { Brand = "Apple", Name = "IPhone 13 Pro", Description = "Apple iPhone 13 Pro smartphone. Announced Sep 2021. Features 6.1″ display, Apple A15 Bionic chipset, 3095 mAh battery, 1024 GB storage.", Unit = "EA", Price = 999.98m }); - _context.Products.Add(new Product { Brand = "MI", Name = "MI 12 Pro", Description = "Xiaomi 12 Pro Android smartphone. Announced Dec 2021. Features 6.73″ display, Snapdragon 8 Gen 1 chipset, 4600 mAh battery, 256 GB storage.", Unit = "EA", Price = 199.00m }); - _context.Products.Add(new Product { Brand = "Logitech", Name = "MX KEYS Mini", Description = "Logitech MX Keys Mini Introducing MX Keys Mini – a smaller, smarter, and mightier keyboard made for creators. Type with confidence on a keyboard crafted for efficiency, stability, and...", Unit = "PA", Price = 99.90m }); + _context.Products.Add(new Product + { + Brand = "Apple", Name = "IPhone 13 Pro", + Description = + "Apple iPhone 13 Pro smartphone. Announced Sep 2021. Features 6.1″ display, Apple A15 Bionic chipset, 3095 mAh battery, 1024 GB storage.", + Unit = "EA", Price = 999.98m + }); + _context.Products.Add(new Product + { + Brand = "MI", Name = "MI 12 Pro", + Description = + "Xiaomi 12 Pro Android smartphone. Announced Dec 2021. Features 6.73″ display, Snapdragon 8 Gen 1 chipset, 4600 mAh battery, 256 GB storage.", + Unit = "EA", Price = 199.00m + }); + _context.Products.Add(new Product + { + Brand = "Logitech", Name = "MX KEYS Mini", + Description = + "Logitech MX Keys Mini Introducing MX Keys Mini – a smaller, smarter, and mightier keyboard made for creators. Type with confidence on a keyboard crafted for efficiency, stability, and...", + Unit = "PA", Price = 99.90m + }); await _context.SaveChangesAsync(); } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/BlazorContextFactory.cs b/src/Infrastructure/Persistence/BlazorContextFactory.cs index 43aa76ca0..797463d05 100644 --- a/src/Infrastructure/Persistence/BlazorContextFactory.cs +++ b/src/Infrastructure/Persistence/BlazorContextFactory.cs @@ -1,21 +1,20 @@ namespace CleanArchitecture.Blazor.Infrastructure.Persistence; + public class BlazorContextFactory : IDbContextFactory where TContext : DbContext { private readonly IServiceProvider _provider; public BlazorContextFactory(IServiceProvider provider) { - this._provider = provider; + _provider = provider; } public TContext CreateDbContext() { if (_provider == null) - { throw new InvalidOperationException( - $"You must configure an instance of IServiceProvider"); - } + "You must configure an instance of IServiceProvider"); return ActivatorUtilities.CreateInstance(_provider); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs b/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs index bae12a09f..3528ec153 100644 --- a/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/AuditTrailConfiguration.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; using CleanArchitecture.Blazor.Infrastructure.Persistence.Conversions; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -13,12 +12,12 @@ public class AuditTrailConfiguration : IEntityTypeConfiguration public void Configure(EntityTypeBuilder builder) { builder.HasOne(x => x.Owner) - .WithMany() - .HasForeignKey(x => x.UserId) - .OnDelete(DeleteBehavior.SetNull); + .WithMany() + .HasForeignKey(x => x.UserId) + .OnDelete(DeleteBehavior.SetNull); builder.Navigation(e => e.Owner).AutoInclude(); builder.Property(t => t.AuditType) - .HasConversion(); + .HasConversion(); builder.Property(e => e.AffectedColumns).HasStringListConversion(); builder.Property(u => u.OldValues).HasJsonConversion(); builder.Property(u => u.NewValues).HasJsonConversion(); @@ -26,4 +25,4 @@ public void Configure(EntityTypeBuilder builder) builder.Ignore(x => x.TemporaryProperties); builder.Ignore(x => x.HasTemporaryProperties); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs b/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs index 09709f915..75089e3d5 100644 --- a/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/CustomerConfiguration.cs @@ -13,6 +13,4 @@ public void Configure(EntityTypeBuilder builder) builder.Property(t => t.Name).HasMaxLength(50).IsRequired(); builder.Ignore(e => e.DomainEvents); } -} - - +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs b/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs index a3485765a..0dcc30707 100644 --- a/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/DocumentConfiguration.cs @@ -13,14 +13,14 @@ public void Configure(EntityTypeBuilder builder) builder.Property(t => t.DocumentType).HasConversion(); builder.Ignore(e => e.DomainEvents); builder.HasOne(x => x.Owner) - .WithMany() - .HasForeignKey(x => x.CreatedBy) - .OnDelete(DeleteBehavior.Restrict); + .WithMany() + .HasForeignKey(x => x.CreatedBy) + .OnDelete(DeleteBehavior.Restrict); builder.HasOne(x => x.Editor) - .WithMany() - .HasForeignKey(x => x.LastModifiedBy) - .OnDelete(DeleteBehavior.Restrict); + .WithMany() + .HasForeignKey(x => x.LastModifiedBy) + .OnDelete(DeleteBehavior.Restrict); builder.Navigation(e => e.Owner).AutoInclude(); builder.Navigation(e => e.Editor).AutoInclude(); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs b/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs index 381a95927..39957e77f 100644 --- a/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/IdentityUserConfiguration.cs @@ -37,61 +37,61 @@ public void Configure(EntityTypeBuilder builder) } } - public class ApplicationRoleClaimConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.Role) - .WithMany(p => p.RoleClaims) - .HasForeignKey(d => d.RoleId) - .OnDelete(DeleteBehavior.Cascade); + .WithMany(p => p.RoleClaims) + .HasForeignKey(d => d.RoleId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserRoleConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.Role) - .WithMany(p => p.UserRoles) - .HasForeignKey(d => d.RoleId) - .OnDelete(DeleteBehavior.Cascade); + .WithMany(p => p.UserRoles) + .HasForeignKey(d => d.RoleId) + .OnDelete(DeleteBehavior.Cascade); builder.HasOne(d => d.User) - .WithMany(p => p.UserRoles) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); + .WithMany(p => p.UserRoles) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserClaimConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.User) - .WithMany(p => p.UserClaims) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); - + .WithMany(p => p.UserClaims) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserLoginConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.User) - .WithMany(p => p.Logins) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); - + .WithMany(p => p.Logins) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } } + public class ApplicationUserTokenConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasOne(d => d.User) - .WithMany(p => p.Tokens) - .HasForeignKey(d => d.UserId) - .OnDelete(DeleteBehavior.Cascade); - + .WithMany(p => p.Tokens) + .HasForeignKey(d => d.UserId) + .OnDelete(DeleteBehavior.Cascade); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs b/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs index c71aa539f..0afd60cba 100644 --- a/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/KeyValueConfiguration.cs @@ -13,4 +13,4 @@ public void Configure(EntityTypeBuilder builder) builder.Property(t => t.Name).HasConversion(); builder.Ignore(e => e.DomainEvents); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs b/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs index c4c29e9a8..504e92ee2 100644 --- a/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs +++ b/src/Infrastructure/Persistence/Configurations/TenantConfiguration.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using CleanArchitecture.Blazor.Domain.Entities; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Configurations; @@ -12,4 +11,4 @@ public void Configure(EntityTypeBuilder builder) { //builder.Ignore(e => e.DomainEvents); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs b/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs index 7fe41db04..5f93c35ae 100644 --- a/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs +++ b/src/Infrastructure/Persistence/Conversions/ValueConversionExtensions.cs @@ -10,14 +10,18 @@ public static class ValueConversionExtensions { public static PropertyBuilder HasJsonConversion(this PropertyBuilder propertyBuilder) { - ValueConverter converter = new ValueConverter( + var converter = new ValueConverter( v => JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), - v => string.IsNullOrEmpty(v)? default: JsonSerializer.Deserialize(v, DefaultJsonSerializerOptions.Options)); + v => string.IsNullOrEmpty(v) + ? default + : JsonSerializer.Deserialize(v, DefaultJsonSerializerOptions.Options)); - ValueComparer comparer = new ValueComparer( - (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), + var comparer = new ValueComparer( + (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == + JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), v => v == null ? 0 : JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options).GetHashCode(), - v => JsonSerializer.Deserialize(JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), DefaultJsonSerializerOptions.Options)); + v => JsonSerializer.Deserialize(JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), + DefaultJsonSerializerOptions.Options)); propertyBuilder.HasConversion(converter); propertyBuilder.Metadata.SetValueConverter(converter); @@ -25,20 +29,26 @@ public static PropertyBuilder HasJsonConversion(this PropertyBuilder pr return propertyBuilder; } - public static PropertyBuilder> HasStringListConversion(this PropertyBuilder> propertyBuilder) + public static PropertyBuilder> HasStringListConversion( + this PropertyBuilder> propertyBuilder) { - ValueConverter, String> converter = new ValueConverter, String>( - v => JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), - v => string.IsNullOrEmpty(v) ? default : JsonSerializer.Deserialize>(v, DefaultJsonSerializerOptions.Options)); + var converter = new ValueConverter, string>( + v => JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), + v => string.IsNullOrEmpty(v) + ? default + : JsonSerializer.Deserialize>(v, DefaultJsonSerializerOptions.Options)); - ValueComparer> comparer = new ValueComparer>( - (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), + var comparer = new ValueComparer>( + (l, r) => JsonSerializer.Serialize(l, DefaultJsonSerializerOptions.Options) == + JsonSerializer.Serialize(r, DefaultJsonSerializerOptions.Options), v => v == null ? 0 : JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options).GetHashCode(), - v => JsonSerializer.Deserialize>(JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), DefaultJsonSerializerOptions.Options)); + v => JsonSerializer.Deserialize>( + JsonSerializer.Serialize(v, DefaultJsonSerializerOptions.Options), + DefaultJsonSerializerOptions.Options)); propertyBuilder.HasConversion(converter); propertyBuilder.Metadata.SetValueConverter(converter); propertyBuilder.Metadata.SetValueComparer(comparer); return propertyBuilder; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs b/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs index 93beab9cc..6b01cbd51 100644 --- a/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs +++ b/src/Infrastructure/Persistence/Extensions/ModelBuilderExtensions.cs @@ -8,7 +8,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Extensions; public static class ModelBuilderExtensions { - public static void ApplyGlobalFilters(this ModelBuilder modelBuilder, Expression> expression) + public static void ApplyGlobalFilters(this ModelBuilder modelBuilder, + Expression> expression) { var entities = modelBuilder.Model .GetEntityTypes() @@ -21,4 +22,4 @@ public static void ApplyGlobalFilters(this ModelBuilder modelBuilder modelBuilder.Entity(entity).HasQueryFilter(Expression.Lambda(newBody, newParam)); } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs b/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs index 205ff95d8..dbefcc283 100644 --- a/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs +++ b/src/Infrastructure/Persistence/Interceptors/AuditableEntityInterceptor.cs @@ -1,6 +1,5 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; using CleanArchitecture.Blazor.Domain.Common.Entities; -using CleanArchitecture.Blazor.Domain.Entities; using MediatR; using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Diagnostics; @@ -9,14 +8,15 @@ namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Interceptors; #nullable disable warnings public class AuditableEntityInterceptor : SaveChangesInterceptor { - private readonly ITenantProvider _tenantProvider; private readonly ICurrentUserService _currentUserService; private readonly IDateTime _dateTime; + private readonly ITenantProvider _tenantProvider; private List _temporaryAuditTrailList = new(); + public AuditableEntityInterceptor( ITenantProvider tenantProvider, ICurrentUserService currentUserService, - IMediator mediator, + IMediator mediator, IDateTime dateTime) { _tenantProvider = tenantProvider; @@ -24,38 +24,34 @@ public AuditableEntityInterceptor( _dateTime = dateTime; } - public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) + public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, + InterceptionResult result, CancellationToken cancellationToken = default) { - UpdateEntities(eventData.Context!); _temporaryAuditTrailList = TryInsertTemporaryAuditTrail(eventData.Context!, cancellationToken); return await base.SavingChangesAsync(eventData, result, cancellationToken); } - public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, CancellationToken cancellationToken = default) + + public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, + CancellationToken cancellationToken = default) { var resultValueTask = await base.SavedChangesAsync(eventData, result, cancellationToken); await TryUpdateTemporaryPropertiesForAuditTrail(eventData.Context!, cancellationToken).ConfigureAwait(false); return resultValueTask; } + private void UpdateEntities(DbContext context) { var userId = _currentUserService.UserId; var tenantId = _tenantProvider.TenantId; foreach (var entry in context.ChangeTracker.Entries()) - { switch (entry.State) { case EntityState.Added: entry.Entity.CreatedBy = userId; entry.Entity.Created = _dateTime.Now; - if (entry.Entity is IMustHaveTenant mustTenant) - { - mustTenant.TenantId = tenantId; - } - if (entry.Entity is IMayHaveTenant mayTenant) - { - mayTenant.TenantId = tenantId; - } + if (entry.Entity is IMustHaveTenant mustTenant) mustTenant.TenantId = tenantId; + if (entry.Entity is IMayHaveTenant mayTenant) mayTenant.TenantId = tenantId; break; case EntityState.Modified: @@ -69,6 +65,7 @@ private void UpdateEntities(DbContext context) softDelete.Deleted = _dateTime.Now; entry.State = EntityState.Modified; } + break; case EntityState.Unchanged: if (entry.HasChangedOwnedEntities()) @@ -76,14 +73,14 @@ private void UpdateEntities(DbContext context) entry.Entity.LastModifiedBy = userId; entry.Entity.LastModified = _dateTime.Now; } + break; } - } } - private List TryInsertTemporaryAuditTrail(DbContext context, CancellationToken cancellationToken = default) + private List TryInsertTemporaryAuditTrail(DbContext context, + CancellationToken cancellationToken = default) { - var userId = _currentUserService.UserId; var tenantId = _tenantProvider.TenantId; context.ChangeTracker.DetectChanges(); @@ -95,24 +92,24 @@ private List TryInsertTemporaryAuditTrail(DbContext context, Cancell entry.State == EntityState.Unchanged) continue; - var auditEntry = new AuditTrail() + var auditEntry = new AuditTrail { TableName = entry.Entity.GetType().Name, UserId = userId, DateTime = _dateTime.Now, AffectedColumns = new List(), - NewValues = new(), - OldValues = new(), + NewValues = new Dictionary(), + OldValues = new Dictionary() }; foreach (var property in entry.Properties) { - if (property.IsTemporary) { auditEntry.TemporaryProperties.Add(property); continue; } - string propertyName = property.Metadata.Name; + + var propertyName = property.Metadata.Name; if (property.Metadata.IsPrimaryKey() && property.CurrentValue is not null) { auditEntry.PrimaryKey[propertyName] = property.CurrentValue; @@ -124,55 +121,46 @@ private List TryInsertTemporaryAuditTrail(DbContext context, Cancell case EntityState.Added: auditEntry.AuditType = AuditType.Create; if (property.CurrentValue is not null) - { auditEntry.NewValues[propertyName] = property.CurrentValue; - } break; case EntityState.Deleted: auditEntry.AuditType = AuditType.Delete; if (property.OriginalValue is not null) - { auditEntry.OldValues[propertyName] = property.OriginalValue; - } break; - case EntityState.Modified when property.IsModified && ((property.OriginalValue is null && property.CurrentValue is not null) || (property.OriginalValue is not null && property.OriginalValue.Equals(property.CurrentValue) == false)): + case EntityState.Modified when property.IsModified && + ((property.OriginalValue is null && + property.CurrentValue is not null) || + (property.OriginalValue is not null && + property.OriginalValue.Equals(property.CurrentValue) == false)): auditEntry.AffectedColumns.Add(propertyName); auditEntry.AuditType = AuditType.Update; auditEntry.OldValues[propertyName] = property.OriginalValue; if (property.CurrentValue is not null) - { auditEntry.NewValues[propertyName] = property.CurrentValue; - } break; - } } + temporaryAuditEntries.Add(auditEntry); } + return temporaryAuditEntries; } - private async Task TryUpdateTemporaryPropertiesForAuditTrail(DbContext context, CancellationToken cancellationToken = default) + private async Task TryUpdateTemporaryPropertiesForAuditTrail(DbContext context, + CancellationToken cancellationToken = default) { if (_temporaryAuditTrailList.Any()) { foreach (var auditEntry in _temporaryAuditTrailList) - { - foreach (var prop in auditEntry.TemporaryProperties) - { - if (prop.Metadata.IsPrimaryKey() && prop.CurrentValue is not null) - { - auditEntry.PrimaryKey[prop.Metadata.Name] = prop.CurrentValue; - } - else if (auditEntry.NewValues is not null && prop.CurrentValue is not null) - { - auditEntry.NewValues[prop.Metadata.Name] = prop.CurrentValue; - } - } - - } + foreach (var prop in auditEntry.TemporaryProperties) + if (prop.Metadata.IsPrimaryKey() && prop.CurrentValue is not null) + auditEntry.PrimaryKey[prop.Metadata.Name] = prop.CurrentValue; + else if (auditEntry.NewValues is not null && prop.CurrentValue is not null) + auditEntry.NewValues[prop.Metadata.Name] = prop.CurrentValue; await context.AddRangeAsync(_temporaryAuditTrailList); await context.SaveChangesAsync(cancellationToken).ConfigureAwait(false); _temporaryAuditTrailList.Clear(); @@ -182,9 +170,11 @@ private async Task TryUpdateTemporaryPropertiesForAuditTrail(DbContext context, public static class Extensions { - public static bool HasChangedOwnedEntities(this EntityEntry entry) => - entry.References.Any(r => + public static bool HasChangedOwnedEntities(this EntityEntry entry) + { + return entry.References.Any(r => r.TargetEntry != null && r.TargetEntry.Metadata.IsOwned() && (r.TargetEntry.State == EntityState.Added || r.TargetEntry.State == EntityState.Modified)); + } } \ No newline at end of file diff --git a/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs b/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs index 6adede382..40c35768b 100644 --- a/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs +++ b/src/Infrastructure/Persistence/Interceptors/DispatchDomainEventsInterceptor.cs @@ -3,6 +3,7 @@ using Microsoft.EntityFrameworkCore.Diagnostics; namespace CleanArchitecture.Blazor.Infrastructure.Persistence.Interceptors; + public class DispatchDomainEventsInterceptor : SaveChangesInterceptor { private readonly IMediator _mediator; @@ -12,24 +13,28 @@ public DispatchDomainEventsInterceptor(IMediator mediator) _mediator = mediator; } - public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, InterceptionResult result, CancellationToken cancellationToken = default) + public override async ValueTask> SavingChangesAsync(DbContextEventData eventData, + InterceptionResult result, CancellationToken cancellationToken = default) { await DispatchDomainEventsForDelete(eventData.Context); return await base.SavingChangesAsync(eventData, result, cancellationToken); } - public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, CancellationToken cancellationToken = default) + + public override async ValueTask SavedChangesAsync(SaveChangesCompletedEventData eventData, int result, + CancellationToken cancellationToken = default) { var resultValueTask = await base.SavedChangesAsync(eventData, result, cancellationToken); await DispatchDomainEventsForChanged(eventData.Context); return resultValueTask; } + public async Task DispatchDomainEventsForDelete(DbContext? context) { if (context == null) return; var entities = context.ChangeTracker .Entries() - .Where(e => e.Entity.DomainEvents.Any() && e.State== EntityState.Deleted) + .Where(e => e.Entity.DomainEvents.Any() && e.State == EntityState.Deleted) .Select(e => e.Entity); var domainEvents = entities @@ -41,6 +46,7 @@ public async Task DispatchDomainEventsForDelete(DbContext? context) foreach (var domainEvent in domainEvents) await _mediator.Publish(domainEvent); } + public async Task DispatchDomainEventsForChanged(DbContext? context) { if (context == null) return; @@ -59,5 +65,4 @@ public async Task DispatchDomainEventsForChanged(DbContext? context) foreach (var domainEvent in domainEvents) await _mediator.Publish(domainEvent); } -} - +} \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx b/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx index 997119deb..536fd7535 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmació de tancar de sessió - + Accions - + Afegir - + Búsqueda Avançada - + Està segur que vol eliminar els elements seleccionats: {0}? - + Està segur que vol eliminar aquest element amb Id: {0}? - + Està segur que vol eliminar aquest element: {0}? - + Cancel·lar - + Netejar - + Tancar - + Nou - + Crear un nou {0} - + Creat amb èxit - + Eliminar - + Confirmació d'eliminar - + Eliminar elements seleccionats: {0} - + Eliminat amb èxi - + Eliminar el {0} - + Descarregant... - + Editar - + Editar el {0} - + Error al exportar - + Exportat amb èxit - + Exportar a Excel - + Importació fallida - + Importar desde Excel - + Importat correctament - + Carregant... - + Error d'inici de sessió - + Inici de sessió amb èxit - + Tancar sessió - + Error al tancar la sessió - + Sessió tancada amb èxit - + Pròxim - + No - + No permés - + D'ACORD - + ordenar per - + Anterior - + Actualizar - + Reinicialitzar - + Guardar - + Guardar canvis - + Guardat amb èxit - + Búsqueda - + Iniciar sessió amb {0} - + Actualizat correctament - + Carregant... - + Si - + Confirmar - + Esteu provant de tancar la sessió de l'aplicació. Realment voleu tancar la sessió? - + Registrar-se - + Export to PDF - + Presentar - + Clonar - + Desa i nou \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx b/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx index e255dd5c2..5f7239abc 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Abmeldebestätigung - + Aktionen - + Hinzufügen - + Erweiterte Suche - + Möchten Sie die ausgewählten Elemente wirklich löschen: {0}? - + Möchten Sie dieses Element mit der ID: {0} wirklich löschen? - + Möchten Sie dieses Element wirklich löschen: {0}? - + Absagen - + Klar - + Schließen - + Neu - + Erstellen Sie ein neues {0} - + Erfolgreich erstellen - + Löschen - + Bestätigung löschen - + Ausgewählte Elemente löschen: {0} - + Erfolgreich löschen - + Löschen Sie die {0} - + Wird heruntergeladen... - + Bearbeiten - + Bearbeiten Sie die {0} - + Export fehlgeschlagen - + Export erfolgreich - + Nach Excel exportieren - + Import fehlgeschlagen - + Aus Excel importieren - + Import erfolgreich - + Wird geladen... - + Login gescheitert - + Anmeldung erfolgreich - + Ausloggen - + Abmeldung fehlgeschlagen - + Abmeldung erfolgreich - + Nächste - + Nein - + Nicht erlaubt - + OK - + Sortieren nach - + Bisherige - + Aktualisierung - + Zurücksetzen - + Speichern - + Änderungen speichern - + Erfolgreich gespeichert - + Suche - + Melden Sie sich mit {0} an - + Update erfolgreich - + Hochladen... - + Ja - + Bestätigen - + Sie versuchen, sich von der Anwendung abzumelden. Möchten Sie sich wirklich abmelden? - + Einloggen - + Als PDF exportieren - + Soumettre - + Klon - + Speichern und neu \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.en.resx b/src/Infrastructure/Resources/Constants/ConstantString.en.resx index 01fae4c4f..18e285005 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.en.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.en.resx @@ -1,294 +1,299 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Logout Confirmation - + Actions - + Add - + Advanced Search - + Are you sure you want to delete the selected items: {0}? - + Are you sure you want to delete this item with Id: {0}? - + Are you sure you want to delete this item: {0}? - + Cancel - + Clear - + Close - + New - + Create a new {0} - + Create successfully - + Delete - + Delete Confirmation - + Delete selected items: {0} - + Delete successfully - + Delete the {0} - + Downloading... - + Edit - + Edit the {0} - + Export fail - + Export successfully - + Export to Excel - + Import fail - + Import from Excel - + Import successfully - + Loading... - + Login fail - + Login successfully - + Logout - + Logout fail - + Logout successfully - + Next - + No - + No Allowed - + OK - + Order By - + Previous - + Refresh - + Reset - + Save - + Save Changes - + Save successfully - + Search - + Sign in with {0} - + Update successfully - + Uploading... - + Yes - + Confirm - + You are attempting to log out of application. Do you really want to log out? - + Sign In - + Export to PDF - + Submit - + Clone - + Save & New - + Selected - + Selected Total \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx b/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx index 04227f578..80074e7b3 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmación de cierre de sesión - + Comportamiento - + Agregar - + Búsqueda Avanzada - + ¿Está seguro de que desea eliminar los elementos seleccionados: {0}? - + ¿Está seguro de que desea eliminar este elemento con Id: {0}? - + ¿Está seguro de que desea eliminar este elemento: {0}? - + Cancelar - + Claro - + Cerrar - + Nuevo - + Crear un nuevo {0} - + Crear con éxito - + Borrar - + Eliminar Confirmación - + Eliminar elementos seleccionados: {0} - + Eliminar con éxito - + Eliminar el {0} - + Descargando... - + Editar - + Editar el {0} - + Error al exportar - + Exportar con éxito - + Exportar a Excel - + Importación fallida - + Importar desde Excel - + Importar correctamente - + Cargando... - + Carga fallida - + Iniciar sesión con éxito - + Cerrar sesión - + Error de cierre de sesión - + Cerrar sesión con éxito - + próximo - + No - + No permitido - + DE ACUERDO - + ordenar por - + Anterior - + Actualizar - + Reiniciar - + Guardar - + Guardar cambios - + Guardar con éxito - + Búsqueda - + Iniciar sesión con {0} - + Actualizar correctamente - + Subiendo... - + - + Confirmar - + Está intentando cerrar sesión en la aplicación. ¿Realmente quieres cerrar sesión? - + Registrarse - + Exportar a PDF - + Entregar - + Clon - + Guardar y nueva \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx b/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx index 4f584b211..96b801831 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmation de déconnexion - + Actions - + Ajouter - + Recherche Avancée - + Voulez-vous vraiment supprimer les éléments sélectionnés : {0} ? - + Voulez-vous vraiment supprimer cet élément avec l'identifiant : {0} ? - + Voulez-vous vraiment supprimer cet élément : {0} ? - + Annuler - + Dégager - + proche - + Nouvelle - + Créer un nouveau {0} - + Créer avec succès - + Supprimer - + Supprimer la confirmation - + Supprimer les éléments sélectionnés : {0} - + Supprimer avec succès - + Supprimer le {0} - + Téléchargement... - + Modifier - + Modifier le {0} - + Échec de l'exportation - + Exporter avec succès - + Exporter vers Excel - + Échec de l'importation - + Importer depuis Excel - + Importation réussie - + Chargement... - + Échec de la connexion - + Connectez-vous avec succès - + Se déconnecter - + Échec de la déconnexion - + Déconnectez-vous avec succès - + Suivant - + Non - + N'est pas permis - + D'ACCORD - + Commandé par - + Précédent - + Rafraîchir - + Réinitialiser - + Sauver - + Sauvegarder les modifications - + Sauvegarde réussie - + Recherche - + Connectez-vous avec {0} - + Mise à jour réussie - + Téléchargement... - + Oui - + Confirmer - + Vous essayez de vous déconnecter de l’application. Voulez-vous vraiment vous déconnecter? - + S'identifier - + Exporter au format PDF - + Soumettre - + Cloner - + Enregistrer et nouveau \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx b/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx index 1a0f293a5..684944966 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ログアウト確認 - + 行動 - + 追加 - + 高度な検索 - + 選択したアイテムを削除してもよろしいですか:{0}? - + ID:{0}のこのアイテムを削除してもよろしいですか? - + このアイテムを削除してもよろしいですか:{0}? - + キャンセル - + クリア - + 選ぶ - + 新しい - + 新しい{0}を作成します - + 正常に作成 - + 消去 - + 確認を削除 - + 選択したアイテムを削除します:{0} - + 正常に削除 - + {0}を削除します - + ダウンロード中... - + 編集 - + {0}を編集します - + エクスポートに失敗する - + 正常にエクスポート - + Excelにエクスポート - + インポートに失敗する - + Excelからインポート - + 正常にインポート - + 読み込んでいます... - + ログイン失敗 - + 正常にログイン - + ログアウト - + ログアウトに失敗する - + 正常にログアウトします - + - + いいえ - + 許可されていません - + わかった - + 注文者 - + - + 更新 - + リセット - + 保存する - + 変更内容を保存 - + 保存完了 - + 探す - + {0}でサインイン - + 正常に更新 - + アップロード中... - + はい - + 確認する - + アプリケーションからログアウトしようとしています。ログアウトしてもよろしいですか? - + ログイン - + PDFにエクスポート - + 送信 - + クローン - + 保存して新規作成 \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx b/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx index 7d4b8c7a2..a9009324d 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 로그아웃 확인 - + 행위 - + 추가하다 - + 고급 검색 - + 선택한 항목({0})을 삭제하시겠습니까? - + ID가 {0}인 이 항목을 삭제하시겠습니까? - + 이 항목을 삭제하시겠습니까: {0}? - + 취소 - + 분명한 - + 닫다 - + 새로운 - + 새 {0} 만들기 - + 성공적으로 생성 - + 삭제 - + 삭제 확인 - + 선택한 항목 삭제: {0} - + 성공적으로 삭제 - + {0} 삭제 - + 다운로드 중... - + 편집하다 - + {0} 수정 - + 내보내기 실패 - + 성공적으로 내보내기 - + 엑셀로 내보내기 - + 가져오기 실패 - + 엑셀에서 가져오기 - + 가져오기 성공 - + 로드 중... - + 로그인 실패 - + 로그인 성공 - + 로그 아웃 - + 로그아웃 실패 - + 성공적으로 로그아웃 - + 다음 - + 아니요 - + 허용되지 않음 - + 확인 - + 주문 - + 이전의 - + 새로 고치다 - + 초기화 - + 구하다 - + 변경 사항을 저장하다 - + 성공적으로 저장 - + 검색 - + {0}으로 로그인 - + 업데이트 성공 - + 업로드 중... - + - + បញ្ជាក់ - + អ្នក កំពុង ព្យាយាម log ចេញ ពី កម្មវិធី & # 160; ។ តើ អ្នក ពិត ជា ចង់ ចុះ កំណត់ ហេតុ ឬ ទេ ? - + 로그인 - + PDF로 내보내기 - + 제출하다 - + 클론 - + 저장 후 새로 만들기 \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.resx b/src/Infrastructure/Resources/Constants/ConstantString.resx index f854657bf..d82e43fb7 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.resx @@ -1,294 +1,299 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Actions - + Add - + Advanced Search - + Are you sure you want to delete the selected items: {0}? - + Are you sure you want to delete this item with Id: {0}? - + Are you sure you want to delete this item: {0}? - + Cancel - + Clear - + Close - + Confirm - + New - + Create a new {0} - + Create successfully - + Delete - + Delete Confirmation - + Delete selected items: {0} - + Delete successfully - + Delete the {0} - + Downloading... - + Edit - + Edit the {0} - + Export fail - + Export successfully - + Export to Excel - + Import fail - + Import from Excel - + Import successfully - + Loading... - + Login fail - + Login successfully - + Logout - + Logout Confirmation - + Logout fail - + Logout successfully - + Next - + No - + No Allowed - + OK - + Order By - + Previous - + Refresh - + Reset - + Save - + Save Changes - + Save successfully - + Search - + Sign in with {0} - + Update successfully - + Uploading... - + Yes - + You are attempting to log out of application. Do you really want to log out? - + Sign In - + Export to PDF - + Submit - + Clone - + Save & New - + Selected - + Selected Total \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ru.resx b/src/Infrastructure/Resources/Constants/ConstantString.ru.resx index 689c7e32b..7fcff9753 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ru.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ru.resx @@ -1,288 +1,293 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Подтверждение выхода - + Действия - + Добавлять - + Расширенный поиск - + Вы уверены, что хотите удалить выбранные элементы: {0}? - + Вы уверены, что хотите удалить этот элемент с идентификатором: {0}? - + Вы уверены, что хотите удалить этот элемент: {0}? - + Отмена - + Прозрачный - + Закрывать - + Новый - + Создать новый {0} - + Создать успешно - + Удалить - + Удалить подтверждение - + Удалить выбранные элементы: {0} - + Удалить успешно - + Удалить {0} - + Загрузка... - + Редактировать - + Изменить {0} - + Ошибка экспорта - + Экспорт успешно - + Экспорт в Excel - + Ошибка импорта - + Импорт из Excel - + Импорт успешно - + Загрузка... - + Неверный логин - + Войти успешно - + Выйти - + Ошибка выхода - + Выйти успешно - + Следующий - + Нет - + Не разрешено - + ХОРОШО - + Сортировать по - + Предыдущий - + Обновить - + Перезагрузить - + Сохранять - + Сохранить изменения - + Сохранить успешно - + Поиск - + Войдите с помощью {0} - + Обновление успешно - + Загрузка... - + Да - + Подтверждать - + Вы пытаетесь выйти из приложения. Вы действительно хотите выйти из системы? - + Войти - + Экспорт в PDF - + Представлять на рассмотрение - + Клон - + Сохранить и создать \ No newline at end of file diff --git a/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx b/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx index ee53e831e..ac1eb9cdf 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx @@ -1,294 +1,299 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 操作 - + 新增 - + 新建 - + 删除 - + 编辑 - + 导出Excel - + 导入Excel - + 刷新 - + 保存 - + 保存变更 - + 你确认要删除选中的记录: {0}? - + 你确认要删除这行记录 Id: {0}? - + 你确认要删除这行记录: {0}? - + 创建新{0} - + 创建成功 - + 删除选中的记录: {0} - + 删除成功 - + 删除{0} - + 编辑{0} - + 导出失败 - + 导出成功 - + 导入失败 - + 导入成功 - + 登录失败 - + 登录成功 - + 注销失败 - + 注销成功 - + 保存成功 - + 更新成功 - + 取消 - + 清除 - + 关闭 - + 下载中... - + 下一个 - + - + 不允许 - + 确认 - + 上一个 - + 重置 - + 搜索 - + 上传中... - + - + 用{0}登录 - + 高级查询 - + 排序 - + 删除确认 - + 加载中... - + 注销 - + 注销确认 - + 您正试图注销应用程序.您真的想退出吗? - + 确认 - + 登录 - + 导出PDF - + 提交 - + 克隆 - + 保存 & 新增 - + 选中 - + 选中的汇总 \ No newline at end of file diff --git a/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs b/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs index 558e4d02f..89e0f0296 100644 --- a/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs +++ b/src/Infrastructure/Services/ApplicationUserClaimsPrincipalFactory.cs @@ -8,56 +8,51 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; #nullable disable public class ApplicationUserClaimsPrincipalFactory : UserClaimsPrincipalFactory { - - public ApplicationUserClaimsPrincipalFactory(UserManager userManager, RoleManager roleManager, IOptions optionsAccessor) : base(userManager, roleManager, optionsAccessor) { - } + public override async Task CreateAsync(ApplicationUser user) { var principal = await base.CreateAsync(user); if (!string.IsNullOrEmpty(user.TenantId)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.TenantId, user.TenantId) }); - } if (!string.IsNullOrEmpty(user.TenantName)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.TenantName, user.TenantName) }); - } if (!string.IsNullOrEmpty(user.SuperiorId)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.SuperiorId, user.SuperiorId) }); - } if (!string.IsNullOrEmpty(user.DisplayName)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ClaimTypes.GivenName, user.DisplayName) }); - } if (!string.IsNullOrEmpty(user.ProfilePictureDataUrl)) - { - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.ProfilePictureDataUrl, user.ProfilePictureDataUrl) }); - } var appuser = await UserManager.FindByIdAsync(user.Id); var roles = await UserManager.GetRolesAsync(appuser); if (roles != null && roles.Count > 0) { var rolesStr = string.Join(",", roles); - ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] { + ((ClaimsIdentity)principal.Identity)?.AddClaims(new[] + { new Claim(ApplicationClaimTypes.AssignedRoles, rolesStr) }); } + return principal; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs b/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs index 83039c603..f09942e26 100644 --- a/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs +++ b/src/Infrastructure/Services/ConfigureCookieAuthenticationOptions.cs @@ -6,7 +6,7 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; #nullable disable public class ConfigureCookieAuthenticationOptions - : IPostConfigureOptions + : IPostConfigureOptions { private readonly ITicketStore _ticketStore; @@ -16,8 +16,8 @@ public ConfigureCookieAuthenticationOptions(ITicketStore ticketStore) } public void PostConfigure(string name, - CookieAuthenticationOptions options) + CookieAuthenticationOptions options) { options.SessionStore = _ticketStore; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/CurrentUserService.cs b/src/Infrastructure/Services/CurrentUserService.cs index 70e8fafe3..5964fff7a 100644 --- a/src/Infrastructure/Services/CurrentUserService.cs +++ b/src/Infrastructure/Services/CurrentUserService.cs @@ -9,4 +9,4 @@ public class CurrentUserService : ICurrentUserService public string? UserName { get; set; } public string? TenantId { get; set; } public string? TenantName { get; set; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/DateTimeService.cs b/src/Infrastructure/Services/DateTimeService.cs index a3a624393..75051bcc4 100644 --- a/src/Infrastructure/Services/DateTimeService.cs +++ b/src/Infrastructure/Services/DateTimeService.cs @@ -6,4 +6,4 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; public class DateTimeService : IDateTime { public DateTime Now => DateTime.UtcNow; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/ExcelService.cs b/src/Infrastructure/Services/ExcelService.cs index 687cb77b2..5fa2a2cdc 100644 --- a/src/Infrastructure/Services/ExcelService.cs +++ b/src/Infrastructure/Services/ExcelService.cs @@ -40,6 +40,7 @@ public async Task CreateTemplateAsync(IEnumerable fields, string colIndex++; } + using (var stream = new MemoryStream()) { workbook.SaveAs(stream); @@ -77,6 +78,7 @@ public async Task ExportAsync(IEnumerable data colIndex++; } + var dataList = data.ToList(); foreach (var item in dataList) { @@ -86,10 +88,9 @@ public async Task ExportAsync(IEnumerable data var result = headers.Select(header => mappers[header](item)); foreach (var value in result) - { ws.Cell(rowIndex, colIndex++).Value = value == null ? Blank.Value : value.ToString(); - } } + using (var stream = new MemoryStream()) { workbook.SaveAs(stream); @@ -100,67 +101,53 @@ public async Task ExportAsync(IEnumerable data } } - public async Task>> ImportAsync(byte[] data, Dictionary> mappers, string sheetName = "Sheet1") + public async Task>> ImportAsync(byte[] data, + Dictionary> mappers, string sheetName = "Sheet1") { - using (var workbook = new XLWorkbook(new MemoryStream(data))) { if (!workbook.Worksheets.Contains(sheetName)) - { - return await Result>.FailureAsync(new string[] { string.Format(_localizer["Sheet with name {0} does not exist!"], sheetName) }); - } + return await Result>.FailureAsync( + string.Format(_localizer["Sheet with name {0} does not exist!"], sheetName)); var ws = workbook.Worksheet(sheetName); var dt = new DataTable(); var titlesInFirstRow = true; foreach (var firstRowCell in ws.Range(1, 1, 1, ws.LastCellUsed().Address.ColumnNumber).Cells()) - { - dt.Columns.Add(titlesInFirstRow ? firstRowCell.GetString() : $"Column {firstRowCell.Address.ColumnNumber}"); - } + dt.Columns.Add(titlesInFirstRow + ? firstRowCell.GetString() + : $"Column {firstRowCell.Address.ColumnNumber}"); var startRow = titlesInFirstRow ? 2 : 1; var headers = mappers.Keys.Select(x => x).ToList(); var errors = new List(); foreach (var header in headers) - { if (!dt.Columns.Contains(header)) - { errors.Add(string.Format(_localizer["Header '{0}' does not exist in table!"], header)); - } - } - if (errors.Any()) - { - return await Result>.FailureAsync(errors.ToArray()); - } + if (errors.Any()) return await Result>.FailureAsync(errors.ToArray()); var lastRow = ws.LastRowUsed(); var list = new List(); - foreach (IXLRow row in ws.Rows(startRow, lastRow.RowNumber())) - { + foreach (var row in ws.Rows(startRow, lastRow.RowNumber())) try { - DataRow dataRow = dt.Rows.Add(); - var item = (TEntity?)Activator.CreateInstance(typeof(TEntity)) ?? throw new NullReferenceException($"{nameof(TEntity)}"); - foreach (IXLCell cell in row.Cells()) - { + var dataRow = dt.Rows.Add(); + var item = (TEntity?)Activator.CreateInstance(typeof(TEntity)) ?? + throw new NullReferenceException($"{nameof(TEntity)}"); + foreach (var cell in row.Cells()) if (cell.DataType == XLDataType.DateTime) - { dataRow[cell.Address.ColumnNumber - 1] = cell.GetDateTime().ToString("yyyy-MM-dd HH:mm:ss"); - } else - { dataRow[cell.Address.ColumnNumber - 1] = cell.Value.ToString(); - } - } headers.ForEach(x => mappers[x](dataRow, item)); list.Add(item); } catch (Exception e) { - return await Result>.FailureAsync(new string[] { string.Format(_localizer["Sheet name {0}:{1}"], sheetName, e.Message) }); + return await Result>.FailureAsync( + string.Format(_localizer["Sheet name {0}:{1}"], sheetName, e.Message)); } - } return await Result>.SuccessAsync(list); } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/Identity/IdentityService.cs b/src/Infrastructure/Services/Identity/IdentityService.cs index d51b71436..4ffa03a11 100644 --- a/src/Infrastructure/Services/Identity/IdentityService.cs +++ b/src/Infrastructure/Services/Identity/IdentityService.cs @@ -16,71 +16,84 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.Identity; public class IdentityService : IIdentityService { - private readonly UserManager _userManager; - private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; private readonly IAuthorizationService _authorizationService; private readonly IAppCache _cache; - private readonly IMapper _mapper; private readonly IStringLocalizer _localizer; - private TimeSpan RefreshInterval => TimeSpan.FromSeconds(60); - private LazyCacheEntryOptions Options => new LazyCacheEntryOptions().SetAbsoluteExpiration(RefreshInterval, ExpirationMode.LazyExpiration); + private readonly IMapper _mapper; + private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; + private readonly UserManager _userManager; + public IdentityService( IServiceScopeFactory scopeFactory, AppConfigurationSettings appConfig, IAppCache cache, - IMapper mapper, + IMapper mapper, IStringLocalizer localizer) { var scope = scopeFactory.CreateScope(); _userManager = scope.ServiceProvider.GetRequiredService>(); - _userClaimsPrincipalFactory = scope.ServiceProvider.GetRequiredService>(); + _userClaimsPrincipalFactory = + scope.ServiceProvider.GetRequiredService>(); _authorizationService = scope.ServiceProvider.GetRequiredService(); _cache = cache; _mapper = mapper; _localizer = localizer; } + private TimeSpan RefreshInterval => TimeSpan.FromSeconds(60); + + private LazyCacheEntryOptions Options => + new LazyCacheEntryOptions().SetAbsoluteExpiration(RefreshInterval, ExpirationMode.LazyExpiration); + public async Task GetUserNameAsync(string userId, CancellationToken cancellation = default) { var key = $"GetUserNameAsync:{userId}"; - var user = await _cache.GetOrAddAsync(key, async () => await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId), Options); + var user = await _cache.GetOrAddAsync(key, + async () => await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId), Options); return user?.UserName; } + public string GetUserName(string userId) { var key = $"GetUserName-byId:{userId}"; var user = _cache.GetOrAdd(key, () => _userManager.Users.SingleOrDefault(u => u.Id == userId), Options); return user?.UserName ?? string.Empty; } + public async Task IsInRoleAsync(string userId, string role, CancellationToken cancellation = default) { - var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? throw new NotFoundException(_localizer["User Not Found."]); + var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? + throw new NotFoundException(_localizer["User Not Found."]); return await _userManager.IsInRoleAsync(user, role); } public async Task AuthorizeAsync(string userId, string policyName, CancellationToken cancellation = default) { - var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? throw new NotFoundException(_localizer["User Not Found."]); + var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? + throw new NotFoundException(_localizer["User Not Found."]); var principal = await _userClaimsPrincipalFactory.CreateAsync(user); var result = await _authorizationService.AuthorizeAsync(principal, policyName); return result.Succeeded; - } public async Task DeleteUserAsync(string userId, CancellationToken cancellation = default) { - var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? throw new NotFoundException(_localizer["User Not Found."]); + var user = await _userManager.Users.SingleOrDefaultAsync(u => u.Id == userId, cancellation) ?? + throw new NotFoundException(_localizer["User Not Found."]); var result = await _userManager.DeleteAsync(user); return result.ToApplicationResult(); } - public async Task> FetchUsers(string roleName, CancellationToken cancellation = default) + + public async Task> FetchUsers(string roleName, + CancellationToken cancellation = default) { var result = await _userManager.Users - .Where(x => x.UserRoles.Any(y => y.Role.Name == roleName)) - .Include(x => x.UserRoles) - .ToDictionaryAsync(x => x.UserName!, y => y.DisplayName, cancellation); + .Where(x => x.UserRoles.Any(y => y.Role.Name == roleName)) + .Include(x => x.UserRoles) + .ToDictionaryAsync(x => x.UserName!, y => y.DisplayName, cancellation); return result; } + public async Task UpdateLiveStatus(string userId, bool isLive, CancellationToken cancellation = default) { var user = await _userManager.Users.FirstOrDefaultAsync(x => x.Id == userId && x.IsLive != isLive); @@ -90,31 +103,31 @@ public async Task UpdateLiveStatus(string userId, bool isLive, CancellationToken var result = await _userManager.UpdateAsync(user); } } + public async Task GetApplicationUserDto(string userId, CancellationToken cancellation = default) { var key = $"GetApplicationUserDto:{userId}"; - var result = await _cache.GetOrAddAsync(key, async () => await _userManager.Users.Where(x => x.Id == userId).Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(cancellation) ?? new ApplicationUserDto(), Options); + var result = await _cache.GetOrAddAsync(key, + async () => await _userManager.Users.Where(x => x.Id == userId).Include(x => x.UserRoles) + .ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider) + .FirstOrDefaultAsync(cancellation) ?? new ApplicationUserDto(), Options); return result; } + public async Task?> GetUsers(string? tenantId, CancellationToken cancellation = default) { var key = $"GetApplicationUserDtoListWithTenantId:{tenantId}"; - Func?>> getUsersByTenantId = async (tenantId, token) => - { - if (string.IsNullOrEmpty(tenantId)) - { - return await _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - } - else + Func?>> getUsersByTenantId = + async (tenantId, token) => { - return await _userManager.Users.Where(x => x.TenantId == tenantId).Include(x => x.UserRoles).ThenInclude(x => x.Role) - .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); - } - - - }; + if (string.IsNullOrEmpty(tenantId)) + return await _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + return await _userManager.Users.Where(x => x.TenantId == tenantId).Include(x => x.UserRoles) + .ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).ToListAsync(); + }; var result = await _cache.GetOrAddAsync(key, () => getUsersByTenantId(tenantId, cancellation), Options); return result; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/Identity/UserDataProvider.cs b/src/Infrastructure/Services/Identity/UserDataProvider.cs index 734859cba..73dc00f50 100644 --- a/src/Infrastructure/Services/Identity/UserDataProvider.cs +++ b/src/Infrastructure/Services/Identity/UserDataProvider.cs @@ -5,15 +5,13 @@ using LazyCache; namespace CleanArchitecture.Blazor.Infrastructure.Services.Identity; + public class UserDataProvider : IUserDataProvider { private const string CACHEKEY = "ALL-ApplicationUserDto"; private readonly IAppCache _cache; private readonly IMapper _mapper; private readonly UserManager _userManager; - public List DataSource { get; private set; } - - public event Action? OnChange; public UserDataProvider( IAppCache cache, @@ -26,23 +24,33 @@ public UserDataProvider( _userManager = scope.ServiceProvider.GetRequiredService>(); DataSource = new List(); } + + public List DataSource { get; private set; } + + public event Action? OnChange; + public void Initialize() { - DataSource = _cache.GetOrAdd(CACHEKEY,()=>_userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x=>x.UserName).ToList()); + DataSource = _cache.GetOrAdd(CACHEKEY, + () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToList()); OnChange?.Invoke(); } public async Task InitializeAsync() { - DataSource =await _cache.GetOrAddAsync(CACHEKEY,()=> _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); + DataSource = await _cache.GetOrAddAsync(CACHEKEY, + () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); OnChange?.Invoke(); } public async Task Refresh() { _cache.Remove(CACHEKEY); - DataSource = await _cache.GetOrAddAsync(CACHEKEY, () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role).ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); + DataSource = await _cache.GetOrAddAsync(CACHEKEY, + () => _userManager.Users.Include(x => x.UserRoles).ThenInclude(x => x.Role) + .ProjectTo(_mapper.ConfigurationProvider).OrderBy(x => x.UserName).ToListAsync()); OnChange?.Invoke(); - } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/Identity/UsersStateContainer.cs b/src/Infrastructure/Services/Identity/UsersStateContainer.cs index e1dfa79c6..5cfbbc1d2 100644 --- a/src/Infrastructure/Services/Identity/UsersStateContainer.cs +++ b/src/Infrastructure/Services/Identity/UsersStateContainer.cs @@ -1,20 +1,27 @@ using System.Collections.Concurrent; namespace CleanArchitecture.Blazor.Infrastructure.Services.Identity; + public class UsersStateContainer : IUsersStateContainer { - public ConcurrentDictionary UsersByConnectionId { get; } = new ConcurrentDictionary(); + public ConcurrentDictionary UsersByConnectionId { get; } = new(); public event Action? OnChange; + public void AddOrUpdate(string connectionId, string? name) { - UsersByConnectionId.AddOrUpdate(connectionId, name??String.Empty, (key, oldValue) => name??String.Empty); + UsersByConnectionId.AddOrUpdate(connectionId, name ?? string.Empty, (key, oldValue) => name ?? string.Empty); NotifyStateChanged(); } + public void Remove(string connectionId) { UsersByConnectionId.TryRemove(connectionId, out var _); NotifyStateChanged(); } - private void NotifyStateChanged() => OnChange?.Invoke(); -} + + private void NotifyStateChanged() + { + OnChange?.Invoke(); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Services/InMemoryTicketStore.cs b/src/Infrastructure/Services/InMemoryTicketStore.cs index 2799121d0..e015e0795 100644 --- a/src/Infrastructure/Services/InMemoryTicketStore.cs +++ b/src/Infrastructure/Services/InMemoryTicketStore.cs @@ -3,11 +3,12 @@ using Microsoft.Extensions.Caching.Memory; namespace CleanArchitecture.Blazor.Infrastructure.Services; + /// -/// Adapted from https://github.com/aspnet/Security/blob/dev/samples/CookieSessionSample/MemoryCacheTicketStore.cs -/// to manage large identity cookies. -/// More info: http://www.dotnettips.info/post/2581 -/// And http://www.dotnettips.info/post/2575 +/// Adapted from https://github.com/aspnet/Security/blob/dev/samples/CookieSessionSample/MemoryCacheTicketStore.cs +/// to manage large identity cookies. +/// More info: http://www.dotnettips.info/post/2581 +/// And http://www.dotnettips.info/post/2575 /// #nullable disable warnings public class InMemoryTicketStore : ITicketStore @@ -16,7 +17,8 @@ public class InMemoryTicketStore : ITicketStore public InMemoryTicketStore(IMemoryCache cache) { - _cache = cache ?? throw new ArgumentNullException(nameof(cache)); ; + _cache = cache ?? throw new ArgumentNullException(nameof(cache)); + ; } public Task RemoveAsync(string key) @@ -36,15 +38,10 @@ public Task RenewAsync(string key, AuthenticationTicket ticket) { var options = new MemoryCacheEntryOptions().SetSize(1); var expiresUtc = ticket.Properties.ExpiresUtc; - if (expiresUtc.HasValue) - { - options.SetAbsoluteExpiration(expiresUtc.Value); - } + if (expiresUtc.HasValue) options.SetAbsoluteExpiration(expiresUtc.Value); if (ticket.Properties.AllowRefresh ?? false) - { - options.SetSlidingExpiration(TimeSpan.FromMinutes(60));//TODO: configurable. - } + options.SetSlidingExpiration(TimeSpan.FromMinutes(60)); //TODO: configurable. _cache.Set(key, ticket, options); @@ -54,7 +51,7 @@ public Task RenewAsync(string key, AuthenticationTicket ticket) public async Task StoreAsync(AuthenticationTicket ticket) { var key = ticket.Principal.Claims - .First(c => c.Type == ClaimTypes.Name).Value; + .First(c => c.Type == ClaimTypes.Name).Value; await RenewAsync(key, ticket); return key; diff --git a/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs b/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs index e27c6624c..62cb41f4f 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenGenerator.cs @@ -5,8 +5,9 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public class AccessTokenGenerator : IAccessTokenGenerator { - private readonly JwtSecurityTokenHandler _tokenHandler; private readonly SimpleJwtOptions _options; + private readonly JwtSecurityTokenHandler _tokenHandler; + public AccessTokenGenerator(JwtSecurityTokenHandler tokenHandler, IOptions options) { _tokenHandler = tokenHandler; @@ -27,4 +28,4 @@ public string GenerateAccessToken(ClaimsPrincipal user) ); return _tokenHandler.WriteToken(new JwtSecurityToken(header, payload)); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs index 552880336..c55d76799 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs @@ -4,29 +4,27 @@ using CleanArchitecture.Blazor.Domain.Identity; using CleanArchitecture.Blazor.Infrastructure.Extensions; using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; -using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class AccessTokenProvider : IAccessTokenProvider { - private readonly string _tokenKey = nameof(_tokenKey); - private readonly string _refreshTokenKey = nameof(_refreshTokenKey); + private readonly ICurrentUserService _currentUser; private readonly ProtectedLocalStorage _localStorage; private readonly ILoginService _loginService; - private readonly IAccessTokenValidator _tokenValidator; + private readonly string _refreshTokenKey = nameof(_refreshTokenKey); private readonly IRefreshTokenValidator _refreshTokenValidator; - private readonly IAccessTokenGenerator _tokenGenerator; private readonly ITenantProvider _tenantProvider; - private readonly ICurrentUserService _currentUser; - private readonly UserManager _userManager; + private readonly IAccessTokenGenerator _tokenGenerator; + private readonly string _tokenKey = nameof(_tokenKey); + private readonly IAccessTokenValidator _tokenValidator; private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; - public string? AccessToken { get; private set; } - public string? RefreshToken { get; private set; } + private readonly UserManager _userManager; - public AccessTokenProvider(IServiceScopeFactory scopeFactory, + public AccessTokenProvider(IServiceScopeFactory scopeFactory, ProtectedLocalStorage localStorage, - ILoginService loginService, - IAccessTokenValidator tokenValidator, + ILoginService loginService, + IAccessTokenValidator tokenValidator, IRefreshTokenValidator refreshTokenValidator, IAccessTokenGenerator tokenGenerator, ITenantProvider tenantProvider, @@ -34,7 +32,8 @@ public AccessTokenProvider(IServiceScopeFactory scopeFactory, { var scope = scopeFactory.CreateScope(); _userManager = scope.ServiceProvider.GetRequiredService>(); - _userClaimsPrincipalFactory = scope.ServiceProvider.GetRequiredService>(); + _userClaimsPrincipalFactory = + scope.ServiceProvider.GetRequiredService>(); _localStorage = localStorage; _loginService = loginService; _tokenValidator = tokenValidator; @@ -43,26 +42,30 @@ public AccessTokenProvider(IServiceScopeFactory scopeFactory, _tenantProvider = tenantProvider; _currentUser = currentUser; } + + public string? AccessToken { get; private set; } + public string? RefreshToken { get; private set; } + public async Task Login(ApplicationUser applicationUser) { var principal = await _userClaimsPrincipalFactory.CreateAsync(applicationUser); var token = await _loginService.LoginAsync(principal); - await _localStorage.SetAsync(_tokenKey, token); + await _localStorage.SetAsync(_tokenKey, token); AccessToken = token.AccessToken; RefreshToken = token.RefreshToken; SetUserPropertiesFromClaimsPrincipal(principal); return AccessToken; } + public async Task ParseClaimsFromJwt(string? accessToken) { - if(string.IsNullOrEmpty(accessToken)) return new ClaimsPrincipal(new ClaimsIdentity()); + if (string.IsNullOrEmpty(accessToken)) return new ClaimsPrincipal(new ClaimsIdentity()); var validationResult = await _tokenValidator.ValidateTokenAsync(accessToken); if (validationResult.IsValid) - { return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationResult.ClaimsIdentity)); - } return new ClaimsPrincipal(new ClaimsIdentity()); } + public async Task GetClaimsPrincipal() { try @@ -75,19 +78,13 @@ public async Task GetClaimsPrincipal() var validationResult = await _tokenValidator.ValidateTokenAsync(AccessToken!); if (validationResult.IsValid) { - return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationResult.ClaimsIdentity)); } - else - { - var validationRefreshResult = await _refreshTokenValidator.ValidateTokenAsync(RefreshToken!); - if (validationRefreshResult.IsValid) - { - - return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationRefreshResult.ClaimsIdentity)); - } - } + var validationRefreshResult = await _refreshTokenValidator.ValidateTokenAsync(RefreshToken!); + if (validationRefreshResult.IsValid) + return SetUserPropertiesFromClaimsPrincipal( + new ClaimsPrincipal(validationRefreshResult.ClaimsIdentity)); } } catch (CryptographicException) @@ -98,9 +95,16 @@ public async Task GetClaimsPrincipal() { return new ClaimsPrincipal(new ClaimsIdentity()); } + return new ClaimsPrincipal(new ClaimsIdentity()); } + + public ValueTask RemoveAuthDataFromStorage() + { + return _localStorage.DeleteAsync(_tokenKey); + } + private ClaimsPrincipal SetUserPropertiesFromClaimsPrincipal(ClaimsPrincipal principal) { _tenantProvider.TenantId = principal.GetTenantId(); @@ -108,29 +112,21 @@ private ClaimsPrincipal SetUserPropertiesFromClaimsPrincipal(ClaimsPrincipal pri _currentUser.UserId = principal.GetUserId(); _currentUser.UserName = principal.GetUserName(); _currentUser.TenantId = principal.GetTenantId(); - _currentUser.TenantName = principal.GetTenantName(); // This seems to be an error in original code. Fixing it here. + _currentUser.TenantName = + principal.GetTenantName(); // This seems to be an error in original code. Fixing it here. return principal; } - - public ValueTask RemoveAuthDataFromStorage() => _localStorage.DeleteAsync(_tokenKey); - public async Task Refresh(string refreshToken) { - TokenValidationResult validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); - if (!validationResult.IsValid) - { - throw validationResult.Exception; - } - JwtSecurityToken? jwt = validationResult.SecurityToken as JwtSecurityToken; - string userId = jwt!.Claims.First(claim => claim.Type == "id").Value; + var validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); + if (!validationResult.IsValid) throw validationResult.Exception; + var jwt = validationResult.SecurityToken as JwtSecurityToken; + var userId = jwt!.Claims.First(claim => claim.Type == "id").Value; var user = await _userManager.FindByIdAsync(userId); - if (user == null) - { - throw new Exception($"no found user by userId:{userId}"); - } + if (user == null) throw new Exception($"no found user by userId:{userId}"); var principal = await _userClaimsPrincipalFactory.CreateAsync(user); - string accessToken = _tokenGenerator.GenerateAccessToken(principal); + var accessToken = _tokenGenerator.GenerateAccessToken(principal); return accessToken; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AccessTokenValidator.cs b/src/Infrastructure/Services/JWT/AccessTokenValidator.cs index 8ea8843dd..3fc615777 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenValidator.cs @@ -1,10 +1,10 @@ using System.IdentityModel.Tokens.Jwt; - using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use this class to validate refresh tokens +/// Use this class to validate refresh tokens /// public class AccessTokenValidator : IAccessTokenValidator { @@ -15,36 +15,30 @@ public AccessTokenValidator(JwtSecurityTokenHandler tokenHandler, IOptions - /// Validate a refresh token + /// Validate a refresh token /// /// /// public async Task ValidateTokenAsync(string token) { - // if not exists: return invalid validation result. if (token is null) - { return new TokenValidationResult { IsValid = false, - Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired"), + Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired") }; - } // if jwt is invalid: delete token from db? and return validation result. var result = await _tokenHandler.ValidateTokenAsync(token, _validationParameters); if (!result.IsValid) - { // delete token from db // ... return result; - } return result; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AuthStore.cs b/src/Infrastructure/Services/JWT/AuthStore.cs index cd45df21b..8f67162fb 100644 --- a/src/Infrastructure/Services/JWT/AuthStore.cs +++ b/src/Infrastructure/Services/JWT/AuthStore.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -public class AuthStore:BaseAuthStore +public class AuthStore : BaseAuthStore { -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs b/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs index 1c69c0326..0ea35b680 100644 --- a/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs +++ b/src/Infrastructure/Services/JWT/AuthenticatedUserResponse.cs @@ -1,9 +1,10 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// the dto used to send an authenticated user response containing access Token and refresh Token +/// the dto used to send an authenticated user response containing access Token and refresh Token /// public class AuthenticatedUserResponse { public string? AccessToken { get; set; } public string? RefreshToken { get; set; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/BaseAuthStore.cs b/src/Infrastructure/Services/JWT/BaseAuthStore.cs index 6ec23cfab..52b49203b 100644 --- a/src/Infrastructure/Services/JWT/BaseAuthStore.cs +++ b/src/Infrastructure/Services/JWT/BaseAuthStore.cs @@ -1,16 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Text.Json; -using System.Threading.Tasks; +namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; -namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public abstract class BaseAuthStore { + public delegate void OnSaveEventHandler(object sender, BaseAuthStore authStore); + public string? AccessToken { get; set; } public string? RefreshToken { get; set; } - public delegate void OnSaveEventHandler(object sender, BaseAuthStore authStore); public event OnSaveEventHandler? OnSave; public void Save(string accessToken, string refreshToken) @@ -26,8 +21,4 @@ public void Clear() AccessToken = null; OnSave?.Invoke(this, this); } - - - - } \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs b/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs index e45da0ec2..3ab436ca0 100644 --- a/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs +++ b/src/Infrastructure/Services/JWT/DefaultAuthenticator.cs @@ -1,58 +1,49 @@ using System.IdentityModel.Tokens.Jwt; using CleanArchitecture.Blazor.Domain.Identity; -using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class DefaultAuthenticator : IAuthenticator { - private readonly UserManager _userManager; - private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; - private readonly IAccessTokenValidator _tokenValidator; private readonly IAccessTokenGenerator _tokenGenerator; + private readonly IAccessTokenValidator _tokenValidator; + private readonly IUserClaimsPrincipalFactory _userClaimsPrincipalFactory; + private readonly UserManager _userManager; - public DefaultAuthenticator(IServiceScopeFactory scopeFactory, IAccessTokenValidator tokenValidator, IAccessTokenGenerator tokenGenerator) + public DefaultAuthenticator(IServiceScopeFactory scopeFactory, IAccessTokenValidator tokenValidator, + IAccessTokenGenerator tokenGenerator) { var scope = scopeFactory.CreateScope(); _userManager = scope.ServiceProvider.GetRequiredService>(); - _userClaimsPrincipalFactory = scope.ServiceProvider.GetRequiredService>(); + _userClaimsPrincipalFactory = + scope.ServiceProvider.GetRequiredService>(); _tokenValidator = tokenValidator; _tokenGenerator = tokenGenerator; } + public async Task Authenticate(string username, string password) { var user = await _userManager.FindByNameAsync(username); - if (user == null) - { - return null; - } + if (user == null) return null; var correctPassword = await _userManager.CheckPasswordAsync(user, password); - if (!correctPassword) - { - return null; - } + if (!correctPassword) return null; return user; } public async Task Refresh(string refreshToken) { - TokenValidationResult validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); - if (!validationResult.IsValid) - { - return string.Empty; - } - JwtSecurityToken? jwt = validationResult.SecurityToken as JwtSecurityToken; - string userId = jwt!.Claims.First(claim => claim.Type == "id").Value; + var validationResult = await _tokenValidator.ValidateTokenAsync(refreshToken!); + if (!validationResult.IsValid) return string.Empty; + var jwt = validationResult.SecurityToken as JwtSecurityToken; + var userId = jwt!.Claims.First(claim => claim.Type == "id").Value; var user = await _userManager.FindByIdAsync(userId); - if (user == null) - { - return string.Empty; - } + if (user == null) return string.Empty; var principal = await _userClaimsPrincipalFactory.CreateAsync(user); - string accessToken =_tokenGenerator.GenerateAccessToken(principal); + var accessToken = _tokenGenerator.GenerateAccessToken(principal); return accessToken; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs b/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs index 27cc6b9d3..423497cf7 100644 --- a/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs +++ b/src/Infrastructure/Services/JWT/DefaultClaimsProvider.cs @@ -1,13 +1,14 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use to get access token claims and refresh token claims +/// Use to get access token claims and refresh token claims /// /// /// public class DefaultClaimsProvider : IClaimsProvider { /// - /// Provide claims for access token + /// Provide claims for access token /// /// /// @@ -17,7 +18,7 @@ public virtual IEnumerable ProvideAccessClaims(ClaimsPrincipal user) } /// - /// Provide claims for refresh token + /// Provide claims for refresh token /// /// /// @@ -28,14 +29,11 @@ public virtual IEnumerable ProvideRefreshClaims(ClaimsPrincipal user) private static IEnumerable GetUserClaims(ClaimsPrincipal user) { - Claim? identitfierClaim = user.FindFirst(ClaimTypes.NameIdentifier); - if (identitfierClaim == null) - { - throw new InvalidOperationException("Null identifier claim"); - } - return new List() + var identitfierClaim = user.FindFirst(ClaimTypes.NameIdentifier); + if (identitfierClaim == null) throw new InvalidOperationException("Null identifier claim"); + return new List { - new Claim("id", identitfierClaim.Value), + new("id", identitfierClaim.Value) }; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs b/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs index 875abe347..75f06d9d7 100644 --- a/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/IAccessTokenGenerator.cs @@ -3,4 +3,4 @@ public interface IAccessTokenGenerator { string GenerateAccessToken(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs b/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs index 987627730..f40a45e0f 100644 --- a/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/IAccessTokenValidator.cs @@ -1,7 +1,8 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IAccessTokenValidator { Task ValidateTokenAsync(string token); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IAuthenticator.cs b/src/Infrastructure/Services/JWT/IAuthenticator.cs index 5fea9fc5c..397d47b74 100644 --- a/src/Infrastructure/Services/JWT/IAuthenticator.cs +++ b/src/Infrastructure/Services/JWT/IAuthenticator.cs @@ -1,8 +1,9 @@ using CleanArchitecture.Blazor.Domain.Identity; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IAuthenticator { Task Authenticate(string username, string password); Task Refresh(string refreshToken); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IClaimsProvider.cs b/src/Infrastructure/Services/JWT/IClaimsProvider.cs index 84f19af2e..a3de86307 100644 --- a/src/Infrastructure/Services/JWT/IClaimsProvider.cs +++ b/src/Infrastructure/Services/JWT/IClaimsProvider.cs @@ -1,21 +1,22 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Implements to define your claims provider +/// Implements to define your claims provider /// /// public interface IClaimsProvider { /// - /// Use this method to get a list of claims for the given user + /// Use this method to get a list of claims for the given user /// /// /// IEnumerable ProvideAccessClaims(ClaimsPrincipal user); /// - /// Use this method to get a list of claims for the given user + /// Use this method to get a list of claims for the given user /// /// /// IEnumerable ProvideRefreshClaims(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/ILoginService.cs b/src/Infrastructure/Services/JWT/ILoginService.cs index 2ce83b7bf..abec83281 100644 --- a/src/Infrastructure/Services/JWT/ILoginService.cs +++ b/src/Infrastructure/Services/JWT/ILoginService.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface ILoginService { Task LoginAsync(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs b/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs index 1ec203aa9..7246b35d8 100644 --- a/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/IRefreshTokenGenerator.cs @@ -1,5 +1,6 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IRefreshTokenGenerator { string GenerateRefreshToken(ClaimsPrincipal user); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs b/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs index e66b53494..e111df0a9 100644 --- a/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/IRefreshTokenValidator.cs @@ -1,7 +1,8 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public interface IRefreshTokenValidator { Task ValidateTokenAsync(string token); -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs b/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs index 9344d87c4..42e85a718 100644 --- a/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs +++ b/src/Infrastructure/Services/JWT/ITokenGeneratorService.cs @@ -2,4 +2,4 @@ public interface ITokenGeneratorService : IAccessTokenGenerator, IRefreshTokenGenerator { -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/JwtLoginService.cs b/src/Infrastructure/Services/JWT/JwtLoginService.cs index fa768adf7..0cceb52e0 100644 --- a/src/Infrastructure/Services/JWT/JwtLoginService.cs +++ b/src/Infrastructure/Services/JWT/JwtLoginService.cs @@ -1,6 +1,7 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use this class to log a user in. +/// Use this class to log a user in. /// /// public class JwtLoginService : ILoginService @@ -13,19 +14,18 @@ public JwtLoginService(ITokenGeneratorService tokenGenerator) } /// - /// Use this method to get an access Token and a refresh Token for the given TUser + /// Use this method to get an access Token and a refresh Token for the given TUser /// /// - /// An instance of , containing an access Token and a refresh Token + /// An instance of , containing an access Token and a refresh Token public Task LoginAsync(ClaimsPrincipal user) { var accessToken = tokenGenerator.GenerateAccessToken(user); var refreshToken = tokenGenerator.GenerateRefreshToken(user); - return Task.FromResult(new AuthenticatedUserResponse() + return Task.FromResult(new AuthenticatedUserResponse { AccessToken = accessToken, - RefreshToken = refreshToken, + RefreshToken = refreshToken }); } -} - +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/JwtSigningOptions.cs b/src/Infrastructure/Services/JWT/JwtSigningOptions.cs index 7a913641d..0b5f41e57 100644 --- a/src/Infrastructure/Services/JWT/JwtSigningOptions.cs +++ b/src/Infrastructure/Services/JWT/JwtSigningOptions.cs @@ -1,23 +1,27 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Signing options for Jwt +/// Signing options for Jwt /// public class JwtSigningOptions { /// - /// The signing key that is used to sign the content of generated tokens. + /// The signing key that is used to sign the content of generated tokens. /// - public SecurityKey? SigningKey { get; set; } + public SecurityKey? SigningKey { get; set; } /// - /// To use symmetric HMAC signing and verification, the following algorithms may be used: 'HS256', 'HS384', 'HS512'. - /// When an HMAC algorithm is chosen, the SigningKey setting will be used as both the signing key and the verifying key. - /// To use asymmetric RSA signing and verification, the following algorithms may be used: 'RS256', 'RS384', 'RS512'. - /// When an RSA algorithm is chosen, the SigningKey setting must be set to an RsaSecurityKey that contains an RSA private key. - /// Likewise, the TokenValidationParammeters setting must be set to an RsaSecurityKey that contains an RSA public key. + /// To use symmetric HMAC signing and verification, the following algorithms may be used: 'HS256', 'HS384', 'HS512'. + /// When an HMAC algorithm is chosen, the SigningKey setting will be used as both the signing key and the verifying + /// key. + /// To use asymmetric RSA signing and verification, the following algorithms may be used: 'RS256', 'RS384', 'RS512'. + /// When an RSA algorithm is chosen, the SigningKey setting must be set to an RsaSecurityKey that contains an RSA + /// private key. + /// Likewise, the TokenValidationParammeters setting must be set to an RsaSecurityKey that contains an RSA public key. /// public string Algorithm { get; set; } = SecurityAlgorithms.HmacSha256; + public int ExpirationMinutes { get; set; } = 120; -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs b/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs index 3cb088085..b28aaae71 100644 --- a/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs +++ b/src/Infrastructure/Services/JWT/RefreshTokenGenerator.cs @@ -5,8 +5,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; public class RefreshTokenGenerator : IRefreshTokenGenerator { - private readonly JwtSecurityTokenHandler _tokenHandler; private readonly SimpleJwtOptions _options; + private readonly JwtSecurityTokenHandler _tokenHandler; public RefreshTokenGenerator(JwtSecurityTokenHandler tokenHandler, IOptions options) { @@ -28,4 +28,4 @@ public string GenerateRefreshToken(ClaimsPrincipal user) ); return _tokenHandler.WriteToken(new JwtSecurityToken(header, payload)); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs b/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs index 6445c2927..fce241f36 100644 --- a/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs +++ b/src/Infrastructure/Services/JWT/RefreshTokenNotFoundException.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class RefreshTokenNotFoundException : Exception { public RefreshTokenNotFoundException() @@ -14,4 +15,4 @@ public RefreshTokenNotFoundException(string message, Exception inner) : base(message, inner) { } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs b/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs index 32ed7ae75..2b6765fae 100644 --- a/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs +++ b/src/Infrastructure/Services/JWT/RefreshTokenValidator.cs @@ -1,10 +1,10 @@ using System.IdentityModel.Tokens.Jwt; - using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + /// -/// Use this class to validate refresh tokens +/// Use this class to validate refresh tokens /// public class RefreshTokenValidator : IRefreshTokenValidator { @@ -15,36 +15,30 @@ public RefreshTokenValidator(JwtSecurityTokenHandler tokenHandler, IOptions - /// Validate a refresh token + /// Validate a refresh token /// /// /// public async Task ValidateTokenAsync(string token) { - // if not exists: return invalid validation result. if (token is null) - { return new TokenValidationResult { IsValid = false, - Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired"), + Exception = new RefreshTokenNotFoundException("Refresh token might be invalid or expired") }; - } // if jwt is invalid: delete token from db? and return validation result. var result = await _tokenHandler.ValidateTokenAsync(token, _validationParameters); if (!result.IsValid) - { // delete token from db // ... return result; - } return result; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs b/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs index 022cd3783..d35a42813 100644 --- a/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs +++ b/src/Infrastructure/Services/JWT/SimpleJwtOptions.cs @@ -2,45 +2,47 @@ using Microsoft.IdentityModel.Tokens; namespace CleanArchitecture.Blazor.Infrastructure.Services.JWT; + public class SimpleJwtOptions { public const string Key = nameof(SimpleJwtOptions); public bool UseCookie { get; set; } = false; - public CookieOptions CookieOptions { get; set; } = new CookieOptions() + + public CookieOptions CookieOptions { get; set; } = new() { HttpOnly = true, - SameSite = SameSiteMode.Lax, + SameSite = SameSiteMode.Lax }; + public string Issuer { get; set; } = "blazorserver"; public string Audience { get; set; } = "blazorserver"; /// - /// Signing options used for signing access jwts + /// Signing options used for signing access jwts /// - public JwtSigningOptions AccessSigningOptions { get; set; } = new JwtSigningOptions() + public JwtSigningOptions AccessSigningOptions { get; set; } = new() { Algorithm = SecurityAlgorithms.HmacSha256, ExpirationMinutes = 120 }; /// - /// Signing options used for signing refresh jwts + /// Signing options used for signing refresh jwts /// - public JwtSigningOptions RefreshSigningOptions { get; set; } = new JwtSigningOptions() + public JwtSigningOptions RefreshSigningOptions { get; set; } = new() { Algorithm = SecurityAlgorithms.HmacSha256, ExpirationMinutes = 1440 }; /// - /// Validation parameters used for verifying access jwts + /// Validation parameters used for verifying access jwts /// public TokenValidationParameters? AccessValidationParameters { get; set; } /// - /// Validation parameters used for verifying refresh jwts + /// Validation parameters used for verifying refresh jwts /// public TokenValidationParameters? RefreshValidationParameters { get; set; } -} - +} \ No newline at end of file diff --git a/src/Infrastructure/Services/JWT/TokenGeneratorService.cs b/src/Infrastructure/Services/JWT/TokenGeneratorService.cs index 08cb9caf9..a02081286 100644 --- a/src/Infrastructure/Services/JWT/TokenGeneratorService.cs +++ b/src/Infrastructure/Services/JWT/TokenGeneratorService.cs @@ -5,7 +5,8 @@ public class TokenGeneratorService : ITokenGeneratorService protected readonly IAccessTokenGenerator _accessTokenGenerator; protected readonly IRefreshTokenGenerator _refreshTokenGenerator; - public TokenGeneratorService(IAccessTokenGenerator accessTokenGenerator, IRefreshTokenGenerator refreshTokenGenerator) + public TokenGeneratorService(IAccessTokenGenerator accessTokenGenerator, + IRefreshTokenGenerator refreshTokenGenerator) { _accessTokenGenerator = accessTokenGenerator; _refreshTokenGenerator = refreshTokenGenerator; @@ -20,4 +21,4 @@ public string GenerateRefreshToken(ClaimsPrincipal user) { return _refreshTokenGenerator.GenerateRefreshToken(user); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/MailService.cs b/src/Infrastructure/Services/MailService.cs index 3f39d60a4..636fbcaa0 100644 --- a/src/Infrastructure/Services/MailService.cs +++ b/src/Infrastructure/Services/MailService.cs @@ -12,11 +12,12 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; public class MailService : IMailService { + private const string TemplatePath = "Server.UI.Resources.EmailTemplates.{0}.cshtml"; private readonly AppConfigurationSettings _appConfig; private readonly IFluentEmail _fluentEmail; private readonly ILogger _logger; private readonly AsyncRetryPolicy _policy; - private const string TemplatePath = "Server.UI.Resources.EmailTemplates.{0}.cshtml"; + public MailService( AppConfigurationSettings appConfig, IFluentEmail fluentEmail, @@ -25,7 +26,8 @@ public MailService( _appConfig = appConfig; _fluentEmail = fluentEmail; _logger = logger; - _policy = Policy.Handle().WaitAndRetryAsync(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt) / 2)); + _policy = Policy.Handle() + .WaitAndRetryAsync(2, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt) / 2)); } public Task SendAsync(string to, string subject, string body) @@ -33,22 +35,16 @@ public Task SendAsync(string to, string subject, string body) try { if (_appConfig.Resilience) - { return _policy.ExecuteAsync(() => _fluentEmail + .To(to) + .Subject(subject) + .Body(body, true) + .SendAsync()); + return _fluentEmail .To(to) .Subject(subject) .Body(body, true) - .SendAsync()); - } - else - { - return _fluentEmail - .To(to) - .Subject(subject) - .Body(body, true) - .SendAsync(); - } - + .SendAsync(); } catch (Exception e) { @@ -56,31 +52,29 @@ public Task SendAsync(string to, string subject, string body) throw; } } + public Task SendAsync(string to, string subject, string template, object model) { try { if (_appConfig.Resilience) - { return _policy.ExecuteAsync(() => _fluentEmail .To(to) .Subject(subject) - .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, Assembly.GetEntryAssembly()) + .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, + Assembly.GetEntryAssembly()) .SendAsync()); - } - else - { - return _fluentEmail - .To(to) - .Subject(subject) - .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, Assembly.GetEntryAssembly()) - .SendAsync(); - } + return _fluentEmail + .To(to) + .Subject(subject) + .UsingTemplateFromEmbedded(string.Format(TemplatePath, template), model, Assembly.GetEntryAssembly()) + .SendAsync(); } catch (Exception e) { - _logger.LogError(e, "Error sending an email to {Unknown} with subject {Subject} and template {Template}", to, subject, template); + _logger.LogError(e, "Error sending an email to {Unknown} with subject {Subject} and template {Template}", + to, subject, template); throw; } } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/MultiTenant/TenantProvider.cs b/src/Infrastructure/Services/MultiTenant/TenantProvider.cs index fd55b60a8..bf36537f8 100644 --- a/src/Infrastructure/Services/MultiTenant/TenantProvider.cs +++ b/src/Infrastructure/Services/MultiTenant/TenantProvider.cs @@ -1,28 +1,26 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant; namespace CleanArchitecture.Blazor.Infrastructure.Services.MultiTenant; + public sealed class TenantProvider : ITenantProvider { private readonly IDictionary _callbacks = new Dictionary(); public string? TenantId { get; set; } public string? TenantName { get; set; } + public void Unregister(Guid id) { - if (_callbacks.ContainsKey(id)) - { - _callbacks.Remove(id); - } + if (_callbacks.ContainsKey(id)) _callbacks.Remove(id); } + public void Clear() { _callbacks.Clear(); } + public void Update() { - foreach (var callback in _callbacks.Values) - { - callback(); - } + foreach (var callback in _callbacks.Values) callback(); } public Guid Register(Action callback) @@ -31,4 +29,4 @@ public Guid Register(Action callback) _callbacks.Add(id, callback); return id; } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/PDFService.cs b/src/Infrastructure/Services/PDFService.cs index 97bdb325d..f4731f760 100644 --- a/src/Infrastructure/Services/PDFService.cs +++ b/src/Infrastructure/Services/PDFService.cs @@ -20,125 +20,134 @@ public async Task ExportAsync(IEnumerable data var stream = new MemoryStream(); //QuestPDF.Settings.DocumentLayoutExceptionThreshold = 1000; Document.Create(container => + { + container.Page(page => { - container.Page(page => - { - page.Size(landscape? PageSizes.A4.Landscape() : PageSizes.A4); - page.Margin(MarginPTs, Unit.Point); - page.PageColor(QuestPDF.Helpers.Colors.White); - page.DefaultTextStyle(x => x.FontSize(FontSize).FontFamily(FontFamilyName).Fallback(TextStyle.Default.FontFamily("simhei"))); - - page.Header() - .Text(title) - .SemiBold().FontSize(16).FontColor(QuestPDF.Helpers.Colors.Black); - - page.Content() - .PaddingVertical(5, Unit.Millimetre) - .Table(table => + page.Size(landscape ? PageSizes.A4.Landscape() : PageSizes.A4); + page.Margin(MarginPTs); + page.PageColor(Colors.White); + page.DefaultTextStyle(x => + x.FontSize(FontSize).FontFamily(FontFamilyName) + .Fallback(TextStyle.Default.FontFamily("simhei"))); + + page.Header() + .Text(title) + .SemiBold().FontSize(16).FontColor(Colors.Black); + + page.Content() + .PaddingVertical(5, Unit.Millimetre) + .Table(table => + { + var headers = mappers.Keys.Select(x => x).ToList(); + var dataList = data.ToList(); + + // Rough fit columns calculation + var tableWidth = landscape + ? (int)(PageSizes.A4.Landscape().Width - MarginPTs * 2) + : (int)(PageSizes.A4.Width - MarginPTs * 2); + var columnsWidth = new int[headers.Count]; + + for (uint c = 0; c < headers.Count; c++) { - var headers = mappers.Keys.Select(x => x).ToList(); - var dataList = data.ToList(); + var cellWidth = Math.Max(MinCharsPerCell, + Math.Min($"{headers[(int)c]}".Length, MaxCharsPerCell)); - // Rough fit columns calculation - int tableWidth = landscape ? (int)(PageSizes.A4.Landscape().Width - (MarginPTs * 2)) : (int)(PageSizes.A4.Width - (MarginPTs * 2)); - int[] columnsWidth = new int[headers.Count]; + if (columnsWidth[c] < cellWidth) + columnsWidth[c] = cellWidth; + } - for (uint c = 0; c < headers.Count; c++) - { - var cellWidth = Math.Max(MinCharsPerCell, Math.Min($"{headers[(int)c]}".Length,MaxCharsPerCell)); + foreach (var item in dataList) + { + var result = headers.Select(header => mappers[header](item)); + uint c = 0; + foreach (var value in result) + { + var cellWidth = Math.Max(MinCharsPerCell, + Math.Min($"{value}".Length, MaxCharsPerCell)); if (columnsWidth[c] < cellWidth) columnsWidth[c] = cellWidth; + c += 1; } + } - foreach (var item in dataList) - { - var result = headers.Select(header => mappers[header](item)); - - uint c = 0; - foreach (var value in result) - { - var cellWidth = Math.Max(MinCharsPerCell, Math.Min($"{value}".Length, MaxCharsPerCell)); - if (columnsWidth[c] < cellWidth) - columnsWidth[c] = cellWidth; - c += 1; - } - } - - int sumWidth = columnsWidth.Sum(); - float ratio = (float)tableWidth / (float)sumWidth; - for (int i = 0;i < columnsWidth.Length; i++) - columnsWidth[i] = (int)(columnsWidth[i] * ratio); + var sumWidth = columnsWidth.Sum(); + var ratio = tableWidth / (float)sumWidth; + for (var i = 0; i < columnsWidth.Length; i++) + columnsWidth[i] = (int)(columnsWidth[i] * ratio); - // Create columns - table.ColumnsDefinition(columns => - { - for(uint c=0; c + { + for (uint c = 0; c < headers.Count; c++) { - uint colIndex = 1; - rowIndex++; - - var result = headers.Select(header => mappers[header](item)); - - foreach (var value in result) - { - if (IsNumber(value)) - table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignRight().Text($"{value}"); - else - table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignLeft().Text($"{value}"); ; - - colIndex+=1; - } + columns.ConstantColumn(columnsWidth[c]); + table.Cell().Row(1).Column(c + 1).Element(BlockHeader).Text(headers[(int)c]); } }); - page.Footer() - .AlignRight() - .Text(x => + // Create rows + uint rowIndex = 1; + foreach (var item in dataList) { - x.Span("Page "); - x.CurrentPageNumber(); - x.Span(" of "); - x.TotalPages(); - }); - }); - }) + uint colIndex = 1; + rowIndex++; + + var result = headers.Select(header => mappers[header](item)); + + foreach (var value in result) + { + if (IsNumber(value)) + table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignRight() + .Text($"{value}"); + else + table.Cell().Row(rowIndex).Column(colIndex).Element(BlockCell).AlignLeft() + .Text($"{value}"); + ; + + colIndex += 1; + } + } + }); + + page.Footer() + .AlignRight() + .Text(x => + { + x.Span("Page "); + x.CurrentPageNumber(); + x.Span(" of "); + x.TotalPages(); + }); + }); + }) .GeneratePdf(stream); return await Task.FromResult(stream.ToArray()); } - static bool IsNumber(object? value) + private static bool IsNumber(object? value) { if (value == null) return false; return value is sbyte or byte or short or ushort or int or uint or long or ulong or float or double or decimal; } - static IContainer BlockCell(IContainer container) + private static IContainer BlockCell(IContainer container) { return container .Border(1) - .Background(QuestPDF.Helpers.Colors.White) + .Background(Colors.White) .Padding(1, Unit.Millimetre) .ShowOnce() .AlignMiddle(); } - static IContainer BlockHeader(IContainer container) + private static IContainer BlockHeader(IContainer container) { return container .Border(1) - .Background(QuestPDF.Helpers.Colors.Grey.Lighten3) + .Background(Colors.Grey.Lighten3) .Padding(1, Unit.Millimetre) .AlignCenter() .AlignMiddle(); diff --git a/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs b/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs index 84f50f9c7..d2a3d9b43 100644 --- a/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs +++ b/src/Infrastructure/Services/PaddleOCR/DocumentOcrJob.cs @@ -3,19 +3,21 @@ using System.Diagnostics; using System.Drawing; +using System.Net; using System.Text.Json; using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; using CleanArchitecture.Blazor.Application.Features.Documents.Caching; using CleanArchitecture.Blazor.Domain.Common.Enums; namespace CleanArchitecture.Blazor.Infrastructure.Services.PaddleOCR; + public class DocumentOcrJob : IDocumentOcrJob { - private readonly IApplicationHubWrapper _notificationService; private readonly IApplicationDbContext _context; private readonly IHttpClientFactory _httpClientFactory; - private readonly ISerializer _serializer; private readonly ILogger _logger; + private readonly IApplicationHubWrapper _notificationService; + private readonly ISerializer _serializer; private readonly Stopwatch _timer; public DocumentOcrJob( @@ -32,26 +34,12 @@ public DocumentOcrJob( _logger = logger; _timer = new Stopwatch(); } - private string ReadBase64String(string path) - { - using (Image image = Image.FromFile(path)) - { - using (MemoryStream m = new MemoryStream()) - { - image.Save(m, image.RawFormat); - byte[] imageBytes = m.ToArray(); - - // Convert byte[] to Base64 String - string base64String = Convert.ToBase64String(imageBytes); - return base64String; - } - } - } public void Do(int id) { Recognition(id, CancellationToken.None).Wait(); } + public async Task Recognition(int id, CancellationToken cancellationToken) { try @@ -71,10 +59,11 @@ public async Task Recognition(int id, CancellationToken cancellationToken) using var fileStream = new FileStream(imgFile, FileMode.Open); using var fileContent = new StreamContent(fileStream); - form.Add(fileContent, "file", Path.GetFileName(imgFile)); // "image" is the form parameter name for the file + form.Add(fileContent, "file", + Path.GetFileName(imgFile)); // "image" is the form parameter name for the file var response = await client.PostAsync("", form); - if (response.StatusCode == System.Net.HttpStatusCode.OK) + if (response.StatusCode == HttpStatusCode.OK) { var result = await response.Content.ReadAsStringAsync(); var ocrResult = JsonSerializer.Deserialize(result); @@ -83,32 +72,46 @@ public async Task Recognition(int id, CancellationToken cancellationToken) if (ocrResult is not null) { var content = string.Join(',', ocrResult.data); - doc.Description = $"recognize the result: success"; + doc.Description = "recognize the result: success"; doc.Content = content; } + await _context.SaveChangesAsync(cancellationToken); await _notificationService.JobCompleted(doc.Title!); DocumentCacheKey.SharedExpiryTokenSource().Cancel(); _timer.Stop(); var elapsedMilliseconds = _timer.ElapsedMilliseconds; - _logger.LogInformation("Id: {Id}, elapsed: {ElapsedMilliseconds}, recognize the result: {@Result},{@Content}", id, elapsedMilliseconds, ocrResult, doc.Content); - + _logger.LogInformation( + "Id: {Id}, elapsed: {ElapsedMilliseconds}, recognize the result: {@Result},{@Content}", id, + elapsedMilliseconds, ocrResult, doc.Content); } - } } catch (Exception ex) { _logger.LogError(ex, "{Id}: recognize error {ExMessage}", id, ex.Message); } - } + private string ReadBase64String(string path) + { + using (var image = Image.FromFile(path)) + { + using (var m = new MemoryStream()) + { + image.Save(m, image.RawFormat); + var imageBytes = m.ToArray(); + + // Convert byte[] to Base64 String + var base64String = Convert.ToBase64String(imageBytes); + return base64String; + } + } + } } #pragma warning disable CS8981 internal class OcrResult { public string[] data { get; set; } = Array.Empty(); } -#pragma warning restore CS8981 - +#pragma warning restore CS8981 \ No newline at end of file diff --git a/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs b/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs index 291684c2d..52786b1d3 100644 --- a/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs +++ b/src/Infrastructure/Services/Serialization/SystemTextJsonSerializer.cs @@ -2,13 +2,26 @@ using CleanArchitecture.Blazor.Application.Common.Interfaces.Serialization; namespace CleanArchitecture.Blazor.Infrastructure.Services.Serialization; + internal sealed class SystemTextJsonSerializer : ISerializer { - public string Serialize(T value) where T : class => JsonSerializer.Serialize(value, DefaultJsonSerializerOptions.Options); + public string Serialize(T value) where T : class + { + return JsonSerializer.Serialize(value, DefaultJsonSerializerOptions.Options); + } - public T? Deserialize(string value) where T : class => JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); + public T? Deserialize(string value) where T : class + { + return JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); + } - public byte[] SerializeBytes(T value) where T : class => JsonSerializer.SerializeToUtf8Bytes(value, DefaultJsonSerializerOptions.Options); + public byte[] SerializeBytes(T value) where T : class + { + return JsonSerializer.SerializeToUtf8Bytes(value, DefaultJsonSerializerOptions.Options); + } - public T? DeserializeBytes(byte[] value) where T : class => JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); -} + public T? DeserializeBytes(byte[] value) where T : class + { + return JsonSerializer.Deserialize(value, DefaultJsonSerializerOptions.Options); + } +} \ No newline at end of file diff --git a/src/Infrastructure/Services/UploadService.cs b/src/Infrastructure/Services/UploadService.cs index a54838ab7..0cbe50ad2 100644 --- a/src/Infrastructure/Services/UploadService.cs +++ b/src/Infrastructure/Services/UploadService.cs @@ -7,6 +7,8 @@ namespace CleanArchitecture.Blazor.Infrastructure.Services; public class UploadService : IUploadService { + private static readonly string NumberPattern = " ({0})"; + public async Task UploadAsync(UploadRequest request) { if (request.Data == null) return string.Empty; @@ -16,7 +18,7 @@ public async Task UploadAsync(UploadRequest request) var folder = request.UploadType.GetDescription(); var folderName = Path.Combine("Files", folder); var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), folderName); - bool exists = Directory.Exists(pathToSave); + var exists = Directory.Exists(pathToSave); if (!exists) Directory.CreateDirectory(pathToSave); var fileName = request.FileName.Trim('"'); var fullPath = Path.Combine(pathToSave, fileName); @@ -26,19 +28,17 @@ public async Task UploadAsync(UploadRequest request) dbPath = NextAvailableFilename(dbPath); fullPath = NextAvailableFilename(fullPath); } + using (var stream = new FileStream(fullPath, FileMode.Create)) { await streamData.CopyToAsync(stream); } + return dbPath; } - else - { - return string.Empty; - } - } - private static readonly string NumberPattern = " ({0})"; + return string.Empty; + } public static string NextAvailableFilename(string path) { @@ -56,7 +56,7 @@ public static string NextAvailableFilename(string path) private static string GetNextFilename(string pattern) { - string tmp = string.Format(pattern, 1); + var tmp = string.Format(pattern, 1); //if (tmp == pattern) //throw new ArgumentException("The pattern must include an index place-holder", "pattern"); @@ -73,7 +73,7 @@ private static string GetNextFilename(string pattern) while (max != min + 1) { - int pivot = (max + min) / 2; + var pivot = (max + min) / 2; if (File.Exists(string.Format(pattern, pivot))) min = pivot; else @@ -82,4 +82,4 @@ private static string GetNextFilename(string pattern) return string.Format(pattern, max); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/Services/ValidationService.cs b/src/Infrastructure/Services/ValidationService.cs index 001c4c674..c32572a59 100644 --- a/src/Infrastructure/Services/ValidationService.cs +++ b/src/Infrastructure/Services/ValidationService.cs @@ -3,6 +3,7 @@ using FluentValidation.Internal; namespace CleanArchitecture.Blazor.Infrastructure.Services; + public class ValidationService : IValidationService { private readonly IServiceProvider _serviceProvider; @@ -19,13 +20,18 @@ public ValidationService(IServiceProvider serviceProvider) } public Func>> ValidateValue() - => async (model, propertyName) - => await ValidatePropertyAsync((TRequest)model, propertyName); + { + return async (model, propertyName) + => await ValidatePropertyAsync((TRequest)model, propertyName); + } public Func>> ValidateValue(TRequest _) - => ValidateValue(); + { + return ValidateValue(); + } - public async Task> ValidateAsync(TRequest model, CancellationToken cancellationToken = default) + public async Task> ValidateAsync(TRequest model, + CancellationToken cancellationToken = default) { var validators = _serviceProvider.GetServices>(); @@ -34,7 +40,8 @@ public async Task> ValidateAsync(TReques return (await validators.ValidateAsync(context, cancellationToken)).ToDictionary(); } - public async Task> ValidateAsync(TRequest model, Action> options, CancellationToken cancellationToken = default) + public async Task> ValidateAsync(TRequest model, + Action> options, CancellationToken cancellationToken = default) { var validators = _serviceProvider.GetServices>(); @@ -44,14 +51,12 @@ public async Task> ValidateAsync(TReques return (await validators.ValidateAsync(context, cancellationToken)).ToDictionary(); } - public async Task> ValidatePropertyAsync(TRequest model, string propertyName, CancellationToken cancellationToken = default) + public async Task> ValidatePropertyAsync(TRequest model, string propertyName, + CancellationToken cancellationToken = default) { var validationResult = await ValidateAsync(model, - options => - { - options.IncludeProperties(propertyName); - }, cancellationToken); + options => { options.IncludeProperties(propertyName); }, cancellationToken); return validationResult.Where(x => x.Key == propertyName).SelectMany(x => x.Value); } -} +} \ No newline at end of file diff --git a/src/Infrastructure/_Imports.cs b/src/Infrastructure/_Imports.cs index 1bc80cfbb..fce16c5ff 100644 --- a/src/Infrastructure/_Imports.cs +++ b/src/Infrastructure/_Imports.cs @@ -16,4 +16,4 @@ global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.Extensions.Logging; -global using Microsoft.Extensions.Options; +global using Microsoft.Extensions.Options; \ No newline at end of file diff --git a/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj b/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj index 942e1d03f..d534cb8aa 100644 --- a/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj +++ b/src/Migrators/Migrators.MSSQL/Migrators.MSSQL.csproj @@ -1,16 +1,16 @@  - - net8.0 - enable - enable - CleanArchitecture.Blazor.Migrators.MSSQL - CleanArchitecture.Blazor.Migrators.MSSQL - default - + + net8.0 + enable + enable + CleanArchitecture.Blazor.Migrators.MSSQL + CleanArchitecture.Blazor.Migrators.MSSQL + default + - - - + + + diff --git a/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj b/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj index 188634969..0af4538f0 100644 --- a/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj +++ b/src/Migrators/Migrators.PostgreSQL/Migrators.PostgreSQL.csproj @@ -1,16 +1,16 @@  - - net8.0 - enable - enable - CleanArchitecture.Blazor.Migrators.PostgreSQL - CleanArchitecture.Blazor.Migrators.PostgreSQL - default - + + net8.0 + enable + enable + CleanArchitecture.Blazor.Migrators.PostgreSQL + CleanArchitecture.Blazor.Migrators.PostgreSQL + default + - - - + + + diff --git a/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj b/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj index 617ee886e..ebf76a19c 100644 --- a/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj +++ b/src/Migrators/Migrators.SqLite/Migrators.SqLite.csproj @@ -1,16 +1,16 @@  - - net8.0 - enable - enable - CleanArchitecture.Blazor.Migrators.SqLite - CleanArchitecture.Blazor.Migrators.SqLite - default - + + net8.0 + enable + enable + CleanArchitecture.Blazor.Migrators.SqLite + CleanArchitecture.Blazor.Migrators.SqLite + default + - - - + + + diff --git a/src/Server.UI/Components/App.razor b/src/Server.UI/Components/App.razor index f6a0d3730..abef9be0b 100644 --- a/src/Server.UI/Components/App.razor +++ b/src/Server.UI/Components/App.razor @@ -2,14 +2,14 @@ - - - - - - - - + + + + + + + + - + - - - - - - - - - - - + + + + + + + + + - + \ No newline at end of file diff --git a/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs index 24f0e166c..440740338 100644 --- a/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/MultiTenantAutocomplete.razor.cs @@ -4,8 +4,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class MultiTenantAutocomplete : MudAutocomplete { - [Inject] - private ITenantService TenantsService { get; set; } = default!; + [Inject] private ITenantService TenantsService { get; set; } = default!; protected override void OnInitialized() { @@ -42,8 +41,10 @@ private Task> SearchKeyValues(string value, CancellationToke var result = TenantsService.DataSource.OrderBy(x => x.Name).Select(x => x.Id).ToList(); return Task.FromResult>(result); } - return Task.FromResult>(TenantsService.DataSource.Where(x => x.Name!.Contains(value, StringComparison.InvariantCultureIgnoreCase) || - (x.Description != null && x.Description.Contains(value, StringComparison.InvariantCultureIgnoreCase)) + + return Task.FromResult>(TenantsService.DataSource.Where(x => + x.Name!.Contains(value, StringComparison.InvariantCultureIgnoreCase) || + (x.Description != null && x.Description.Contains(value, StringComparison.InvariantCultureIgnoreCase)) ).OrderBy(x => x.Name).Select(x => x.Id).ToList()); } @@ -51,4 +52,4 @@ private string ToTenantNameStringFunc(string val) { return TenantsService.DataSource.Where(x => x.Id == val).Select(x => x.Name).FirstOrDefault() ?? ""; } -} +} \ No newline at end of file diff --git a/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs index 927f35ccb..bc64af1ed 100644 --- a/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/PickSuperiorIdAutocomplete.razor.cs @@ -5,13 +5,12 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class PickSuperiorIdAutocomplete : MudAutocomplete { + private List? _userList; [Parameter] public string? TenantId { get; set; } [Parameter] public string OwnerName { get; set; } = string.Empty; [Inject] private IIdentityService IdentityService { get; set; } = default!; - private List? _userList; - public override Task SetParametersAsync(ParameterView parameters) { SearchFuncWithCancel = SearchKeyValues; @@ -52,13 +51,13 @@ private string ToString(string str) if (_userList is not null && !string.IsNullOrEmpty(str) && _userList.Any(x => x.Id.Equals(str, StringComparison.OrdinalIgnoreCase))) { - ApplicationUserDto userDto = _userList.First(x => x.Id == str); + var userDto = _userList.First(x => x.Id == str); return userDto.UserName; } if (_userList is null && !string.IsNullOrEmpty(str)) { - string userName = IdentityService.GetUserName(str); + var userName = IdentityService.GetUserName(str); return userName; } diff --git a/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs index 2a0d68d8f..ab7b8713f 100644 --- a/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/PickUserAutocomplete.razor.cs @@ -5,13 +5,11 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class PickUserAutocomplete : MudAutocomplete { - [Parameter] - public string TenantId { get; set; } = string.Empty; + private List? _userList; - [Inject] - private IUserDataProvider DataProvider { get; set; } = default!; + [Parameter] public string TenantId { get; set; } = string.Empty; - private List? _userList; + [Inject] private IUserDataProvider DataProvider { get; set; } = default!; public override Task SetParametersAsync(ParameterView parameters) { @@ -31,24 +29,30 @@ private Task> SearchKeyValues(string value, CancellationToke var result = new List(); if (_userList is not null && string.IsNullOrEmpty(value)) - { result = _userList.Select(x => x.UserName).ToList(); - } else if (_userList is not null) - { - result = _userList.Where(x => x.UserName.Contains(value, StringComparison.OrdinalIgnoreCase) || x.Email.Contains(value, StringComparison.OrdinalIgnoreCase)).Select(x => x.UserName).ToList(); - } + result = _userList + .Where(x => x.UserName.Contains(value, StringComparison.OrdinalIgnoreCase) || + x.Email.Contains(value, StringComparison.OrdinalIgnoreCase)).Select(x => x.UserName) + .ToList(); return Task.FromResult(result.AsEnumerable()); } private string ToString(string str) { - if (!string.IsNullOrEmpty(str) && _userList != null && _userList.Any(x => x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase) || x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))) + if (!string.IsNullOrEmpty(str) && _userList != null && _userList.Any(x => + (x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase)) || + x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))) { - var userDto = _userList.Find(x => x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase) || x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase)); - return _userList.Find(x => x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase) || x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))?.DisplayName ?? str; + var userDto = _userList.Find(x => + (x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase)) || + x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase)); + return _userList.Find(x => + (x.DisplayName != null && x.DisplayName.Contains(str, StringComparison.OrdinalIgnoreCase)) || + x.UserName.Contains(str, StringComparison.OrdinalIgnoreCase))?.DisplayName ?? str; } + return str; } } \ No newline at end of file diff --git a/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs b/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs index de4d4fbd3..8d50b406f 100644 --- a/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs +++ b/src/Server.UI/Components/Autocompletes/PicklistAutocomplete.razor.cs @@ -1,16 +1,12 @@ using CleanArchitecture.Blazor.Application.Features.KeyValues.DTOs; - - namespace CleanArchitecture.Blazor.Server.UI.Components.Autocompletes; public class PicklistAutocomplete : MudAutocomplete { - [Parameter] - public Picklist Picklist { get; set; } + [Parameter] public Picklist Picklist { get; set; } - [Inject] - private IPicklistService PicklistService { get; set; } = default!; + [Inject] private IPicklistService PicklistService { get; set; } = default!; protected override async Task OnInitializedAsync() { @@ -53,6 +49,6 @@ private Task> SearchKeyValues(string value) private static bool Contains(KeyValueDto model, string value) { return (model.Value != null && model.Value.Contains(value, StringComparison.InvariantCultureIgnoreCase)) - || (model.Text != null && model.Text.Contains(value, StringComparison.InvariantCultureIgnoreCase)); + || (model.Text != null && model.Text.Contains(value, StringComparison.InvariantCultureIgnoreCase)); } } \ No newline at end of file diff --git a/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor b/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor index a84e55bc1..14cd0920f 100644 --- a/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor +++ b/src/Server.UI/Components/Dialogs/ConfirmationDialog.razor @@ -11,18 +11,19 @@ -@code +@code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [Parameter] - public string? ContentText { get; set; } + [Parameter] public string? ContentText { get; set; } private void Submit() { MudDialog.Close(DialogResult.Ok(true)); } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } } \ No newline at end of file diff --git a/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor b/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor index 5d15259cf..5b49d5efe 100644 --- a/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor +++ b/src/Server.UI/Components/Dialogs/DeleteConfirmation.razor @@ -1,10 +1,11 @@ +@using Severity = MudBlazor.Severity @inject IStringLocalizer L @inject IMediator Mediator - + @ConstantString.DeleteConfirmationTitle @@ -19,30 +20,27 @@ @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public string? ContentText { get; set; } - [EditorRequired] - [Parameter] - public IRequest> Command { get; set; } = default!; + [EditorRequired] [Parameter] public string? ContentText { get; set; } + [EditorRequired] [Parameter] public IRequest> Command { get; set; } = default!; private async Task Submit() { var result = await Mediator.Send(Command); if (result.Succeeded) { - Snackbar.Add($"{ConstantString.DeleteSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); MudDialog.Close(DialogResult.Ok(true)); } else { - Snackbar.Add($"{result.ErrorMessage}", MudBlazor.Severity.Error); + Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } - } - private void Cancel() => MudDialog.Cancel(); -} + private void Cancel() + { + MudDialog.Cancel(); + } +} \ No newline at end of file diff --git a/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor b/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor index 0c9020a7d..ffaef7dd3 100644 --- a/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor +++ b/src/Server.UI/Components/Dialogs/LogoutConfirmation.razor @@ -1,9 +1,10 @@ +@using Severity = MudBlazor.Severity @inject NavigationManager Navigation - + @ConstantString.LogoutConfirmationTitle @@ -17,23 +18,23 @@ -@code +@code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [Parameter] - public string? ContentText { get; set; } + [Parameter] public string? ContentText { get; set; } - [Parameter] - public Color Color { get; set; } + [Parameter] public Color Color { get; set; } private Task Submit() { MudDialog.Close(DialogResult.Ok(true)); - Snackbar.Add(@ConstantString.LogoutSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.LogoutSuccess, Severity.Info); return Task.CompletedTask; } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } } \ No newline at end of file diff --git a/src/Server.UI/Components/Identity/UserLoginState.razor b/src/Server.UI/Components/Identity/UserLoginState.razor index 32f7ef3b9..2c2e06142 100644 --- a/src/Server.UI/Components/Identity/UserLoginState.razor +++ b/src/Server.UI/Components/Identity/UserLoginState.razor @@ -1,21 +1,14 @@ -@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity -@using CleanArchitecture.Blazor.Server.UI.Hubs -@using CleanArchitecture.Blazor.Server.UI.Models -@using Microsoft.AspNetCore.Components.Authorization -@using Microsoft.Extensions.Localization - +@using CleanArchitecture.Blazor.Server.UI.Hubs +@using Severity = MudBlazor.Severity +@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity @implements IDisposable @code { - [CascadingParameter] - protected Task AuthState { get; set; } = default!; - [Inject] - private AuthenticationStateProvider AuthenticationStateProvider { get; set; } = default!; - [Inject] - public IDispatcher Dispatcher { get; set; } = null!; - [Inject] - public IStringLocalizer L { get; set; } = null!; + [CascadingParameter] protected Task AuthState { get; set; } = default!; + [Inject] private AuthenticationStateProvider AuthenticationStateProvider { get; set; } = default!; + [Inject] public IDispatcher Dispatcher { get; set; } = null!; + [Inject] public IStringLocalizer L { get; set; } = null!; public void Dispose() { @@ -24,10 +17,10 @@ AuthenticationStateProvider.AuthenticationStateChanged -= _authenticationStateProvider_AuthenticationStateChanged; GC.SuppressFinalize(this); } - [Inject] - private HubClient Client { get; set; } = default!; - [Inject] - private IUsersStateContainer UsersStateContainer { get; set; } = default!; + + [Inject] private HubClient Client { get; set; } = default!; + [Inject] private IUsersStateContainer UsersStateContainer { get; set; } = default!; + protected override async Task OnInitializedAsync() { Client.LoginEvent += _client_Login; @@ -46,7 +39,7 @@ { InvokeAsync(() => { - Snackbar.Add(string.Format(L["{0} has logged in."], args.UserName), MudBlazor.Severity.Info); + Snackbar.Add(string.Format(L["{0} has logged in."], args.UserName), Severity.Info); UsersStateContainer.AddOrUpdate(args.ConnectionId, args.UserName); }); } @@ -55,11 +48,11 @@ { InvokeAsync(() => { - Snackbar.Add(string.Format(L["{0} has logged out."], args.UserName), MudBlazor.Severity.Normal); + Snackbar.Add(string.Format(L["{0} has logged out."], args.UserName)); UsersStateContainer.Remove(args.ConnectionId); - }); } + private void _authenticationStateProvider_AuthenticationStateChanged(Task authenticationState) { InvokeAsync(async () => @@ -72,9 +65,10 @@ } }); } + private void SetProfile(string userId) { - Dispatcher.Dispatch(new FetchUserDtoAction() { UserId = userId }); + Dispatcher.Dispatch(new FetchUserDtoAction { UserId = userId }); } -} +} \ No newline at end of file diff --git a/src/Server.UI/Components/Localization/LanguageSelector.razor b/src/Server.UI/Components/Localization/LanguageSelector.razor index c31760d7e..c8c94f8d9 100644 --- a/src/Server.UI/Components/Localization/LanguageSelector.razor +++ b/src/Server.UI/Components/Localization/LanguageSelector.razor @@ -1,9 +1,5 @@ @using System.Globalization -@using Microsoft.AspNetCore.Builder @using Microsoft.Extensions.Options -@using CleanArchitecture.Blazor.Server.UI.Services -@using CleanArchitecture.Blazor.Server.UI.Services.Layout - @inject NavigationManager Navigation @inject IOptions LocalizationOptions @inject LayoutService LayoutService @@ -20,7 +16,7 @@ } else { - @language.DisplayName + @language.DisplayName } } } @@ -42,7 +38,7 @@ private async Task ChangeLanguageAsync(string languageCode) { CurrentLanguage = languageCode; - Navigation.NavigateTo(Navigation.BaseUri + "?culture=" + languageCode, forceLoad: true); + Navigation.NavigateTo(Navigation.BaseUri + "?culture=" + languageCode, true); if (new CultureInfo(languageCode).TextInfo.IsRightToLeft) await LayoutService.SetRightToLeft(); diff --git a/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor b/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor index 40d78e474..ae38cb752 100644 --- a/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor +++ b/src/Server.UI/Components/OptionSelect/MudEnumSelect.razor @@ -1,7 +1,6 @@ -@using System.Reflection +@typeparam TEnum +@using System.Reflection @using System.ComponentModel - -@typeparam TEnum @inherits MudSelect @{ @@ -57,9 +56,9 @@ private T SetFlag(T flag, bool set) { - Enum? value = Value as Enum; + var value = Value as Enum; - Type underlyingType = Enum.GetUnderlyingType(EnumOrUnderlyingType!); + var underlyingType = Enum.GetUnderlyingType(EnumOrUnderlyingType!); // note: AsInt mean: math integer vs enum (not the c# int type) dynamic valueAsInt = Convert.ChangeType(value!, underlyingType); @@ -78,9 +77,9 @@ { ChildContent = __builder => { - @foreach (TEnum item in EnumValueList) + @foreach (var item in EnumValueList) { - @(MudEnumSelect.GetDescriptionText(item)) + @GetDescriptionText(item) } }; } diff --git a/src/Server.UI/Components/Redirections/RedirectToHome.razor b/src/Server.UI/Components/Redirections/RedirectToHome.razor index 179c56470..171b0a147 100644 --- a/src/Server.UI/Components/Redirections/RedirectToHome.razor +++ b/src/Server.UI/Components/Redirections/RedirectToHome.razor @@ -1,9 +1,10 @@ - -@inject NavigationManager NavigationManager +@inject NavigationManager NavigationManager @code { + protected override void OnInitialized() { - NavigationManager.NavigateTo($"/", forceLoad: false); + NavigationManager.NavigateTo("/", false); } + } \ No newline at end of file diff --git a/src/Server.UI/Components/Redirections/RedirectToLogin.razor b/src/Server.UI/Components/Redirections/RedirectToLogin.razor index 2212ebf29..fbb8379f6 100644 --- a/src/Server.UI/Components/Redirections/RedirectToLogin.razor +++ b/src/Server.UI/Components/Redirections/RedirectToLogin.razor @@ -1,9 +1,10 @@ - -@inject NavigationManager NavigationManager +@inject NavigationManager NavigationManager @code { + protected override void OnInitialized() { - NavigationManager.NavigateTo($"/pages/authentication/login", forceLoad: false); + NavigationManager.NavigateTo("/pages/authentication/login", false); } + } \ No newline at end of file diff --git a/src/Server.UI/Components/Routes.razor b/src/Server.UI/Components/Routes.razor index bf607a180..e270177aa 100644 --- a/src/Server.UI/Components/Routes.razor +++ b/src/Server.UI/Components/Routes.razor @@ -1,40 +1,36 @@ -@using CleanArchitecture.Blazor.Server.UI.Constants -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Authentication - - -@inject IStringLocalizer L +@inject IStringLocalizer L @inject NavigationManager NavManager @inject LayoutService LayoutService - + + + + + + + + @L["Please wait, we are authorizing you..."] + + + + + + + + Not found + + +

+ @L["Sorry, there's nothing at this address."] @L["Go Home"] +

+
+
+
+
+
- - - - - - @L["Please wait, we are authorizing you..."] - - - - - - - - Not found - - -

- @L["Sorry, there's nothing at this address."] @L["Go Home"] -

-
-
-
-
-
+@code +{ - @code - { - } \ No newline at end of file diff --git a/src/Server.UI/Components/Shared/CustomError.razor b/src/Server.UI/Components/Shared/CustomError.razor index 1d4694db9..79a6743bf 100644 --- a/src/Server.UI/Components/Shared/CustomError.razor +++ b/src/Server.UI/Components/Shared/CustomError.razor @@ -1,6 +1,4 @@ @using System.Net -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers - @inject NavigationManager Navigation @inject ILogger Logger @@ -10,20 +8,20 @@
- +
@Message @DateTime.Now - More + More
@Message For more information, contact your system administrator @if (ShowStackTrace) { @StackTrace } - - + +
@@ -33,11 +31,9 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; - [EditorRequired][Parameter] - public Exception Exception { get; set; } = default!; + [EditorRequired] [Parameter] public Exception Exception { get; set; } = default!; private string? Message { get; set; } private bool ShowStackTrace { get; set; } @@ -57,6 +53,7 @@ { Message = string.Join(", ", e.ErrorMessages.ToArray()); } + break; default: if (Exception.InnerException != null) @@ -66,6 +63,7 @@ Exception = Exception.InnerException; } } + Message = Exception.Message; break; } diff --git a/src/Server.UI/Components/Shared/CustomValidation.razor.cs b/src/Server.UI/Components/Shared/CustomValidation.razor.cs index 76035a8b2..c0581162c 100644 --- a/src/Server.UI/Components/Shared/CustomValidation.razor.cs +++ b/src/Server.UI/Components/Shared/CustomValidation.razor.cs @@ -5,23 +5,20 @@ namespace CleanArchitecture.Blazor.Server.UI.Components.Shared; // See https://docs.microsoft.com/en-us/aspnet/core/blazor/forms-validation?view=aspnetcore-6.0#server-validation-with-a-validator-component public class CustomModelValidation : ComponentBase { - [CascadingParameter] - private EditContext? CurrentEditContext { get; set; } - private ValidationMessageStore? _messageStore; + [CascadingParameter] private EditContext? CurrentEditContext { get; set; } + protected override void OnInitialized() { if (CurrentEditContext is null) - { throw new InvalidOperationException( $"{nameof(CustomModelValidation)} requires a cascading " + $"parameter of type {nameof(EditContext)}. " + $"For example, you can use {nameof(CustomModelValidation)} " + $"inside an {nameof(EditForm)}."); - } - _messageStore = new(CurrentEditContext); + _messageStore = new ValidationMessageStore(CurrentEditContext); CurrentEditContext.OnValidationRequested += (s, e) => _messageStore?.Clear(); @@ -33,10 +30,7 @@ public void DisplayErrors(IDictionary> errors) { if (CurrentEditContext is not null && errors is not null) { - foreach (var err in errors) - { - _messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); - } + foreach (var err in errors) _messageStore?.Add(CurrentEditContext.Field(err.Key), err.Value); CurrentEditContext.NotifyValidationStateChanged(); } diff --git a/src/Server.UI/Components/Shared/ErrorHandler.razor b/src/Server.UI/Components/Shared/ErrorHandler.razor index 96433ec3c..0836e682c 100644 --- a/src/Server.UI/Components/Shared/ErrorHandler.razor +++ b/src/Server.UI/Components/Shared/ErrorHandler.razor @@ -1,7 +1,8 @@ -@inherits ErrorBoundary +@using Severity = MudBlazor.Severity +@inherits ErrorBoundary @ChildContent -@code +@code { public List ReceivedExceptions = new(); @@ -11,9 +12,10 @@ switch (exception) { case UnauthorizedAccessException: - Snackbar.Add("Authentication Failed", MudBlazor.Severity.Error); + Snackbar.Add("Authentication Failed", Severity.Error); break; } + return Task.CompletedTask; } diff --git a/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor b/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor index c641c02af..3208e14c9 100644 --- a/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/HeaderMenu.razor @@ -1,4 +1,3 @@ -@using CleanArchitecture.Blazor.Server.UI.Components.Localization @@ -10,7 +9,7 @@ Toggled="NavigationMenuDrawerOpen" ToggledChanged="ToggleNavigationMenuDrawer" ToggledColor="@Color.Default" - ToggledIcon="@Icons.Material.Filled.Close" /> + ToggledIcon="@Icons.Material.Filled.Close"/> @@ -19,24 +18,24 @@ + OnClick="OpenSearchDialog"/> - + + Target="_blank"/> - - - + + + + OnClick="@(e => RightToLeftToggle.InvokeAsync())"/> @@ -45,23 +44,25 @@ + OnClick="OpenSearchDialog"/> - - + + - + - @Settings.Company + + @Settings.Company + -@code +@code { - [EditorRequired][Parameter] public bool IsDarkMode { get; set; } - [EditorRequired][Parameter] public bool NavigationMenuDrawerOpen { get; set; } - [EditorRequired][Parameter] public EventCallback ToggleNavigationMenuDrawer { get; set; } - [EditorRequired][Parameter] public EventCallback OpenSearchDialog { get; set; } - [EditorRequired][Parameter] public bool RightToLeft { get; set; } - [EditorRequired][Parameter] public EventCallback RightToLeftToggle { get; set; } + [EditorRequired] [Parameter] public bool IsDarkMode { get; set; } + [EditorRequired] [Parameter] public bool NavigationMenuDrawerOpen { get; set; } + [EditorRequired] [Parameter] public EventCallback ToggleNavigationMenuDrawer { get; set; } + [EditorRequired] [Parameter] public EventCallback OpenSearchDialog { get; set; } + [EditorRequired] [Parameter] public bool RightToLeft { get; set; } + [EditorRequired] [Parameter] public EventCallback RightToLeftToggle { get; set; } [Parameter] public EventCallback OnSettingClick { get; set; } } \ No newline at end of file diff --git a/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor b/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor index c9047a01f..c0bd29b4b 100644 --- a/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor +++ b/src/Server.UI/Components/Shared/Layout/LoadingScreen.razor @@ -1,5 +1,4 @@ -@using CleanArchitecture.Blazor.Server.UI.Services.Layout -@inherits LayoutComponentBase +@inherits LayoutComponentBase @if (IsLoaded) { @@ -127,14 +126,11 @@ else @code { - [Parameter] - public RenderFragment ChildContent { get; set; } = null!; + [Parameter] public RenderFragment ChildContent { get; set; } = null!; - [Parameter] - public LayoutService LayoutService { get; set; } = null!; + [Parameter] public LayoutService LayoutService { get; set; } = null!; - [Parameter] - public bool IsLoaded { get; set; } + [Parameter] public bool IsLoaded { get; set; } private string Gradient => $"background-image: linear-gradient(-120deg, {(LayoutService.IsDarkMode ? LayoutService.CurrentTheme.PaletteDark.Background : LayoutService.CurrentTheme.Palette.Background)} 50%, {(LayoutService.IsDarkMode ? LayoutService.CurrentTheme.PaletteDark.Surface : LayoutService.CurrentTheme.Palette.Surface)} 50%);"; } \ No newline at end of file diff --git a/src/Server.UI/Components/Shared/Layout/MainLayout.razor b/src/Server.UI/Components/Shared/Layout/MainLayout.razor index 0493050e6..b703b127a 100644 --- a/src/Server.UI/Components/Shared/Layout/MainLayout.razor +++ b/src/Server.UI/Components/Shared/Layout/MainLayout.razor @@ -1,7 +1,7 @@ -@using CleanArchitecture.Blazor.Server.UI.Constants -@using CleanArchitecture.Blazor.Server.UI.Services.UserPreferences @using Toolbelt.Blazor.HotKeys2 - +@using Severity = MudBlazor.Severity +@using CleanArchitecture.Blazor.Server.UI.Services.UserPreferences +@using CleanArchitecture.Blazor.Server.UI.Constants @inherits LayoutComponentBase @inject LayoutService LayoutService @@ -9,9 +9,9 @@ @inject IStringLocalizer L - - - + + + @@ -19,12 +19,14 @@
- + @Body - @L["authentication is required, click"] @L["sign in"] -
-
+ + @L["authentication is required, click"] @L["sign in"] + + + @@ -34,14 +36,14 @@ ToggleNavigationMenuDrawer="ToggleNavigationMenuDrawer" RightToLeft="@LayoutService.IsRTL" RightToLeftToggle="LayoutService.ToggleRightToLeft" - OnSettingClick="@(() => _themingDrawerOpen = true)" /> + OnSettingClick="@(() => _themingDrawerOpen = true)"/> + DrawerOpenChanged="NavigationMenuDrawerOpenChangedHandler"/> - + UserPreferencesChanged="LayoutService.UpdateUserPreferences"/> + @@ -54,13 +56,13 @@ - +
-@code +@code { private bool _commandPaletteOpen; private HotKeysContext? _hotKeysContext; @@ -70,7 +72,7 @@ private bool _themingDrawerOpen; private bool _defaultDarkMode; - private ErrorBoundary? _errorBoundary { set; get; } = null!; + private ErrorBoundary? _errorBoundary { set; get; } protected override void OnParametersSet() { @@ -82,6 +84,7 @@ // On each page navigation, reset any error state _errorBoundary?.Recover(); } + public void Dispose() { LayoutService.MajorUpdateOccured -= LayoutServiceOnMajorUpdateOccured; @@ -99,36 +102,46 @@ StateHasChanged(); } } + private async Task ApplyUserPreferences() { _defaultDarkMode = await _mudThemeProvider.GetSystemPreference(); _userPreferences = await LayoutService.ApplyUserPreferences(_defaultDarkMode); } + protected override void OnInitialized() { LayoutService.MajorUpdateOccured += LayoutServiceOnMajorUpdateOccured; LayoutService.SetBaseTheme(Theme.ApplicationTheme()); _hotKeysContext = HotKeys.CreateContext().Add(ModKey.Ctrl, Key.K, async () => await OpenSearchDialog(), "Open command palette."); } + private async Task OnSystemPreferenceChanged(bool newValue) { await LayoutService.OnSystemPreferenceChanged(newValue); } - private void LayoutServiceOnMajorUpdateOccured(object? sender, EventArgs e) => StateHasChanged(); + + private void LayoutServiceOnMajorUpdateOccured(object? sender, EventArgs e) + { + StateHasChanged(); + } protected void NavigationMenuDrawerOpenChangedHandler(bool state) { _navigationMenuDrawerOpen = state; } + protected void ThemingDrawerOpenChangedHandler(bool state) { _themingDrawerOpen = state; } + protected void ToggleNavigationMenuDrawer() { _navigationMenuDrawerOpen = !_navigationMenuDrawerOpen; } + private async Task OpenSearchDialog() { if (!_commandPaletteOpen) diff --git a/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor b/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor index 868de1c40..9bcdbfc9c 100644 --- a/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor +++ b/src/Server.UI/Components/Shared/Layout/MudBlazorLogo.razor @@ -1,9 +1,9 @@ @namespace CleanArchitecture.Blazor.Server.UI.Shared - - - + + + @code diff --git a/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor b/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor index 15512b8e8..12958d97d 100644 --- a/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/NavigationMenu.razor @@ -3,7 +3,7 @@ @inherits FluxorComponent @inject IMenuService MenuService -@inject IState UserProfileState +@inject IState UserProfileState @inject LayoutService LayoutService @inject NavigationManager NavigationManager @inject IStringLocalizer L @@ -33,11 +33,11 @@ @if (IsLoading) { - - - - - + + + + + } else { @@ -194,11 +194,9 @@ else @code { - [EditorRequired][Parameter] - public EventCallback DrawerOpenChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback DrawerOpenChanged { get; set; } - [EditorRequired][Parameter] - public bool DrawerOpen { get; set; } + [EditorRequired] [Parameter] public bool DrawerOpen { get; set; } private UserProfile UserProfile => UserProfileState.Value.UserProfile; private bool IsLoading => UserProfileState.Value.IsLoading; @@ -207,7 +205,7 @@ else private bool Expanded(MenuSectionItemModel menu) { - string href = NavigationManager.Uri[(NavigationManager.BaseUri.Length - 1)..]; + var href = NavigationManager.Uri[(NavigationManager.BaseUri.Length - 1)..]; return menu is { IsParent: true, MenuItems: not null } && menu.MenuItems.Any(x => !string.IsNullOrEmpty(x.Href) && x.Href.Equals(href)); } diff --git a/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor b/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor index 8e3e2e0cd..ce376f3ec 100644 --- a/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/NotificationMenu.razor @@ -6,31 +6,31 @@ - -
- @L["Notifications"] - @L["Mark as read"] -
- @if (_messages != null && _newNotificationsAvailable) - { - @foreach (var (message, isRead) in _messages.Take(5)) + +
+ @L["Notifications"] + @L["Mark as read"] +
+ @if (_messages != null && _newNotificationsAvailable) { - - @message.Title - @($"{message.Authors.FirstOrDefault()?.DisplayName} • {message.PublishDate:MM/dd/yyyy}") - - + @foreach (var (message, isRead) in _messages.Take(5)) + { + + @message.Title + @($"{message.Authors.FirstOrDefault()?.DisplayName} • {message.PublishDate:MM/dd/yyyy}") + + + } } - } - else - { -
- @L["Nothing new :("] - -
- } -
-
+ else + { +
+ @L["Nothing new :("] + +
+ } + +
@code @@ -46,7 +46,7 @@ protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender == true) + if (firstRender) { _newNotificationsAvailable = await NotificationService.AreNewNotificationsAvailable(); _messages = await NotificationService.GetNotifications(); diff --git a/src/Server.UI/Components/Shared/Layout/SearchDialog.razor b/src/Server.UI/Components/Shared/Layout/SearchDialog.razor index 84d5751b9..ff3e34cb6 100644 --- a/src/Server.UI/Components/Shared/Layout/SearchDialog.razor +++ b/src/Server.UI/Components/Shared/Layout/SearchDialog.razor @@ -1,5 +1,4 @@ @using Toolbelt.Blazor.HotKeys2 - @inject IStringLocalizer L @inject HotKeys HotKeys @inject NavigationManager Navigation @@ -11,7 +10,7 @@ Class="mb-3" Clearable="true" Placeholder="@L["Search..."]" - TextChanged="@(SearchPages)" + TextChanged="@(SearchPages)" Immediate="true"/> @@ -19,7 +18,7 @@ { + Text="@key"/> } @@ -29,8 +28,7 @@ @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; private readonly Dictionary _pages = new(); private HotKeysContext? _hotKeysContext; diff --git a/src/Server.UI/Components/Shared/Layout/UserMenu.razor b/src/Server.UI/Components/Shared/Layout/UserMenu.razor index c19d7d0b1..a1faa7da5 100644 --- a/src/Server.UI/Components/Shared/Layout/UserMenu.razor +++ b/src/Server.UI/Components/Shared/Layout/UserMenu.razor @@ -1,10 +1,9 @@ -@using CleanArchitecture.Blazor.Infrastructure.Services.JWT; +@using CleanArchitecture.Blazor.Infrastructure.Services.JWT @using CleanArchitecture.Blazor.Server.UI.Services - @inherits FluxorComponent @inject NavigationManager NavigationManager -@inject IState UserProfileState +@inject IState UserProfileState @inject IStringLocalizer L @inject IAccessTokenProvider TokenProvider @@ -21,7 +20,7 @@ @if (IsLoading) { - + } else { @@ -42,18 +41,18 @@
- +
+ Icon="@Icons.Material.Filled.Person"/> @L["Profile"]
+ Icon="@Icons.Material.Filled.Settings"/> @L["Settings"]
@@ -71,12 +70,10 @@ -@code +@code { - [Parameter] - public EventCallback OnSettingClick { get; set; } - [Inject] - public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; + [Parameter] public EventCallback OnSettingClick { get; set; } + [Inject] public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; private bool IsLoading => UserProfileState.Value.IsLoading; private UserProfile UserProfile => UserProfileState.Value.UserProfile; @@ -84,8 +81,8 @@ { var parameters = new DialogParameters { - { x=>x.ContentText, $"{ConstantString.LogoutConfirmation}"}, - { x=>x.Color, Color.Error} + { x => x.ContentText, $"{ConstantString.LogoutConfirmation}" }, + { x => x.Color, Color.Error } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true }; diff --git a/src/Server.UI/Components/Shared/Themes/ThemesButton.razor b/src/Server.UI/Components/Shared/Themes/ThemesButton.razor index 65afe7e03..5c630688d 100644 --- a/src/Server.UI/Components/Shared/Themes/ThemesButton.razor +++ b/src/Server.UI/Components/Shared/Themes/ThemesButton.razor @@ -6,7 +6,7 @@ Placement="Placement.Left" Text="Themes"> + Style="color: #05192d"/> @@ -27,11 +27,9 @@ border-bottom-right-radius: 24px !important; } - } else { - - } @code diff --git a/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor b/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor index 2555819c8..a8706b9e7 100644 --- a/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor +++ b/src/Server.UI/Components/Shared/Themes/ThemesMenu.razor @@ -1,11 +1,9 @@ -@using CleanArchitecture.Blazor.Server.UI.Services @using CleanArchitecture.Blazor.Server.UI.Services.UserPreferences @using System.Globalization - @inject LayoutService LayoutService @inject IStringLocalizer L - @L["Themes"] - + + Size="Size.Small"/> - +
@L["Mode"] @@ -28,42 +26,42 @@ - - - - - - + + + + + + - - - - - + + + + + - - - - - + + + + + @@ -77,11 +75,11 @@ { + FullWidth="true" + OnClick="@(() => UpdateThemePrimaryColor(color))">
+ style="@($"background: {color};")">
@@ -96,7 +94,7 @@ + @oninput="@(e => ChangedSelection(e))"> @UserPreferences.BorderRadius.ToString() @@ -110,7 +108,7 @@ + @oninput="@(e => ChangedFontSize(e))"> @($"{UserPreferences.DefaultFontSize.ToString()} rem") @@ -122,7 +120,7 @@ + VisibleChanged="ThemingDrawerOpenChanged"/> - - -
-
- -
- @Title - - -
+ + +
+
+ +
+ @Title + +
-
+
+
-
-
- - @ConstantString.Refresh - @if (_canCreate) +
+
+ + + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + @ConstantString.Clone + StartIcon="@Icons.Material.Filled.ContentCopy" + Size="Size.Small" + Disabled="@(_selectedItems.Count != 1)" + OnClick="OnClone" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Clone + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canExport) { - @ConstantString.Export + Label="@ConstantString.Export" + Disabled="@_loading" + StartIcon="@Icons.Custom.FileFormats.FileExcel" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnExport" + IconColor="Color.Surface"> + @ConstantString.Export } @if (_canImport) @@ -106,7 +114,7 @@ for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -122,29 +130,34 @@ @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + }
@if (_canSearch) { - + + }
@@ -161,11 +174,11 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } } @@ -182,53 +195,47 @@ @*TODO: Define the fields that should be displayed in data table*@ - +
- @context.Item.Name - @context.Item.Description -
-
-
- - - - @ConstantString.NoRecords - - - @ConstantString.Loading - - - - - + @context.Item.Name + @context.Item.Description +
+ + + + + @ConstantString.NoRecords + + + @ConstantString.Loading + + + + + - @code { +@code { public string? Title { get; private set; } private int _defaultPageSize = 15; - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private MudDataGrid _table = default!; private CustomerDto _currentDto = new(); private bool _loading; private bool _uploading; private bool _downloading; private bool _exporting; - [Inject] - private IState UserProfileState { get; set; } = null!; + [Inject] private IState UserProfileState { get; set; } = null!; private UserProfile UserProfile => UserProfileState.Value.UserProfile; - [Inject] - private IMediator Mediator { get; set; } = default!; - [Inject] - private IMapper Mapper { get; set; } = default!; - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [Inject] private IMediator Mediator { get; set; } = default!; + [Inject] private IMapper Mapper { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; - private CustomersWithPaginationQuery Query { get; set; } = new(); - [Inject] - private IBlazorDownloadFileService BlazorDownloadFileService { get; set; } = null!; + private CustomersWithPaginationQuery Query { get; } = new(); + [Inject] private IBlazorDownloadFileService BlazorDownloadFileService { get; set; } = null!; private bool _canSearch; private bool _canCreate; private bool _canEdit; @@ -247,6 +254,7 @@ _canImport = (await AuthService.AuthorizeAsync(state.User, Permissions.Customers.Import)).Succeeded; _canExport = (await AuthService.AuthorizeAsync(state.User, Permissions.Customers.Export)).Succeeded; } + private async Task> ServerReload(GridState state) { try @@ -258,29 +266,31 @@ Query.PageNumber = state.Page + 1; Query.PageSize = state.PageSize; var result = await Mediator.Send(Query).ConfigureAwait(false); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { _loading = false; } - } + private async Task OnSearch(string text) { - _selectedItems = new(); + _selectedItems = new HashSet(); Query.Keyword = text; await _table.ReloadServerData(); } + private async Task OnChangedListView(CustomerListView listview) { Query.ListView = listview; await _table.ReloadServerData(); } + private async Task OnRefresh() { CustomerCacheKey.Refresh(); - _selectedItems = new(); + _selectedItems = new HashSet(); Query.Keyword = string.Empty; await _table.ReloadServerData(); } @@ -289,33 +299,34 @@ { var command = new AddEditCustomerCommand(); var parameters = new DialogParameters - { - { x=>x.model,command }, - }; + { + { x => x.model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new item"], parameters, options); + (L["Create a new item"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); } } + private async Task OnClone() { var copyitem = _selectedItems.First(); - var command = new AddEditCustomerCommand() - { - Name = copyitem.Name, - Description = copyitem.Description, - }; + var command = new AddEditCustomerCommand + { + Name = copyitem.Name, + Description = copyitem.Description + }; var parameters = new DialogParameters - { - { x=>x.model,command }, - }; + { + { x => x.model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new item"], parameters, options); + (L["Create a new item"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -323,16 +334,17 @@ _selectedItems.Remove(copyitem); } } + private async Task OnEdit(CustomerDto dto) { var command = Mapper.Map(dto); var parameters = new DialogParameters - { - { x=>x.model,command }, - }; + { + { x => x.model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show - (L["Edit the item"], parameters, options); + (L["Edit the item"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -342,12 +354,12 @@ private async Task OnDelete(CustomerDto dto) { - var command = new DeleteCustomerCommand(new int[] { dto.Id }); + var command = new DeleteCustomerCommand(new[] { dto.Id }); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); var state = await dialog.Result; @@ -362,43 +374,45 @@ { var command = new DeleteCustomerCommand(_selectedItems.Select(x => x.Id).ToArray()); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected,_selectedItems.Count) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); - _selectedItems = new(); + _selectedItems = new HashSet(); } } private async Task OnExport() { _exporting = true; - var request = new ExportCustomersQuery() - { - Keyword = Query.Keyword, - CurrentUser = UserProfile, - ListView = Query.ListView, - OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = (_table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? true) ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString() - }; + var request = new ExportCustomersQuery + { + Keyword = Query.Keyword, + CurrentUser = UserProfile, + ListView = Query.ListView, + OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? true ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString() + }; var result = await Mediator.Send(request); if (result.Succeeded) { - var downloadresult = await BlazorDownloadFileService.DownloadFile($"{L["Customers"]}.xlsx", result.Data, contentType: "application/octet-stream"); - Snackbar.Add($"{ConstantString.ExportSuccess}", MudBlazor.Severity.Info); + var downloadresult = await BlazorDownloadFileService.DownloadFile($"{L["Customers"]}.xlsx", result.Data, "application/octet-stream"); + Snackbar.Add($"{ConstantString.ExportSuccess}", Severity.Info); } else { - Snackbar.Add($"{result.ErrorMessage}", MudBlazor.Severity.Error); + Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } + _exporting = false; } + private async Task OnImportData(IBrowserFile file) { _uploading = true; @@ -409,15 +423,16 @@ if (result.Succeeded) { await _table.ReloadServerData(); - Snackbar.Add($"{ConstantString.ImportSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.ImportSuccess}", Severity.Info); } else { foreach (var msg in result.Errors) { - Snackbar.Add($"{msg}", MudBlazor.Severity.Error); + Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } diff --git a/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor b/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor index 4d84d75a5..1cc170137 100644 --- a/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor +++ b/src/Server.UI/Pages/Dashboard/Components/LandingSection.razor @@ -1,5 +1,4 @@ @using MudBlazor.Utilities -
@@ -17,7 +16,7 @@
-@code +@code { [Parameter] public RenderFragment Stripes { get; set; } = null!; [Parameter] public RenderFragment ChildContent { get; set; } = null!; @@ -29,25 +28,25 @@ protected string SectionClassnames => new CssBuilder("mud-landingpage-section") - .AddClass(SectionClass) - .Build(); + .AddClass(SectionClass) + .Build(); protected string BackgroundClassnames => new CssBuilder("section-background d-flex flex-column justify-end") - .AddClass("straight", Straight) - .AddClass("skew", !Straight) - .AddClass(BackgroundClass) - .Build(); + .AddClass("straight", Straight) + .AddClass("skew", !Straight) + .AddClass(BackgroundClass) + .Build(); protected string EndBackgroundClassnames => new CssBuilder("section-background straight-end") - .AddClass(BackgroundClass) - .Build(); + .AddClass(BackgroundClass) + .Build(); protected string ContainerClassnames => new CssBuilder("section-container") - .AddClass("padding-straight", Straight) - .AddClass("padding-skew", !Straight) - .AddClass(Class) - .Build(); + .AddClass("padding-straight", Straight) + .AddClass("padding-skew", !Straight) + .AddClass(Class) + .Build(); } \ No newline at end of file diff --git a/src/Server.UI/Pages/Dashboard/Dashboard.razor b/src/Server.UI/Pages/Dashboard/Dashboard.razor index e7f011f9f..d0945d28f 100644 --- a/src/Server.UI/Pages/Dashboard/Dashboard.razor +++ b/src/Server.UI/Pages/Dashboard/Dashboard.razor @@ -1,149 +1,148 @@ @page "/" @using MudBlazor.Utilities -@using CleanArchitecture.Blazor.Server.UI.Models @Title - - - - + + + +
-
- -
- Graphite on roof -
- - - - +2.6% -
- 149,567 -
-
- - - - - - - - - - -
-
- -
- Global Spread -
- - - - +9.6% -
- 12% +
+ +
+ Graphite on roof +
+ + + + +2.6%
-
- - - - - - - - - - -
- - -
- Roentgen -
- - - - ~0.0% -
- 3,6 + 149,567 +
+
+ + + + + + + + + + +
+
+ +
+ Global Spread +
+ + + + +9.6%
-
- - - - - - - - - - + 12% +
+
+ + + + + + + + + + +
+ + +
+ Roentgen +
+ + + + ~0.0%
- -
-
- - Uranium-235 -
- - See all 137 reviews -
- This is the type of uranium used in the RBMK reactors. - - Reactor Type -
- RBMK-1000RBMK-1500RBMKP-2400 -
-
- Read More -
-
- @if(IsMobile == false) - { - - - - Nr - Sign - Name - Position - Molar mass - - - - @foreach (var item in Elements) - { - - @item.Number - @item.Sign - @item.Name - @item.Position - @item.Molar - - } - - - } -
- @if(IsMobile == false) + 3,6 +
+
+ + + + + + + + + + +
+
+
+
+ + Uranium-235 +
+ + See all 137 reviews +
+ This is the type of uranium used in the RBMK reactors. + + Reactor Type +
+ RBMK-1000RBMK-1500RBMKP-2400 +
+
+ Read More +
+
+ @if (IsMobile == false) { + + + + Nr + Sign + Name + Position + Molar mass + + + + @foreach (var item in Elements) + { + + @item.Number + @item.Sign + @item.Name + @item.Position + @item.Molar + + } + + + } +
+ @if (IsMobile == false) + {
- +
- + MudPay
- +
- - + +
@@ -152,10 +151,10 @@
- - - - + + + +
@@ -167,13 +166,13 @@
- - - - - - - + + + + + + +
@@ -205,63 +204,63 @@
- } -
+ } +
- - - - Global scale - MudBlazor is growing quickly - - We are growing every day, developers from all over the world are using MudBlazor and are engaged with the community. - We are dedicated to improving every aspect of MudBlazor to be your number one choice when looking for a Blazor component library. - Join us and be part of the library’s success! - - - -
- -
-
- -
- @NumericExtensions.RoundedToString(3000) -
- - Total Downloads -
+ + + + Global scale + MudBlazor is growing quickly + + We are growing every day, developers from all over the world are using MudBlazor and are engaged with the community. + We are dedicated to improving every aspect of MudBlazor to be your number one choice when looking for a Blazor component library. + Join us and be part of the library’s success! + + + +
+ +
+
+ +
+ @NumericExtensions.RoundedToString(3000) +
+ + Total Downloads
- - -
- @NumericExtensions.RoundedToString(1680) -
- - GitHub Stars -
+
+
+ +
+ @NumericExtensions.RoundedToString(1680) +
+ + GitHub Stars
- - -
- @NumericExtensions.RoundedToString(200) -
- - Contributors -
+
+
+ +
+ @NumericExtensions.RoundedToString(200) +
+ + Contributors
- - -
- @NumericExtensions.RoundedToString(23) -
- - Discord Members -
+
+
+ +
+ @NumericExtensions.RoundedToString(23) +
+ + Discord Members
- - - +
+
+ + -@code + +@code { private readonly bool IsMobile = false; private readonly double _sliderValue = 50.0; @@ -295,14 +295,14 @@ private NugetPackage? _nugetPackage { get; set; } = new(); private GitHubRepository? _gitHubRepo { get; set; } = new(); - private readonly IEnumerable Elements = new List() + private readonly IEnumerable Elements = new List { - new() { Number = 1, Sign = "H", Name = "Hydrogen", Position = 0, Molar = 1.00794}, - new() { Number = 2, Sign = "He", Name = "Helium", Position = 17, Molar = 4.002602}, - new() { Number = 3, Sign = "Li", Name = "Lithium", Position = 0, Molar = 6.941}, - new() { Number = 4, Sign = "Be", Name = "Beryllium", Position = 1, Molar = 9.012182}, - new() { Number = 5, Sign = "C", Name = "Carbon", Position = 13, Molar = 12.0107}, - new() { Number = 6, Sign = "O", Name = "Oxygen", Position = 15, Molar = 15.9994}, + new() { Number = 1, Sign = "H", Name = "Hydrogen", Position = 0, Molar = 1.00794 }, + new() { Number = 2, Sign = "He", Name = "Helium", Position = 17, Molar = 4.002602 }, + new() { Number = 3, Sign = "Li", Name = "Lithium", Position = 0, Molar = 6.941 }, + new() { Number = 4, Sign = "Be", Name = "Beryllium", Position = 1, Molar = 9.012182 }, + new() { Number = 5, Sign = "C", Name = "Carbon", Position = 13, Molar = 12.0107 }, + new() { Number = 6, Sign = "O", Name = "Oxygen", Position = 15, Molar = 15.9994 } }; public class Element @@ -314,6 +314,10 @@ public string? Sign { get; set; } public double Molar { get; set; } - public override string ToString() => $"{Sign} - {Name}"; + + public override string ToString() + { + return $"{Sign} - {Name}"; + } } } \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor b/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor index b68a3b873..6a92aaa5a 100644 --- a/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor +++ b/src/Server.UI/Pages/Documents/Components/DocumentFormDialog.razor @@ -1,5 +1,4 @@ @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.AddEdit - @inherits MudComponentBase @inject IValidationService Validator @@ -31,30 +30,34 @@ + @bind-Value="Model.Description"> + + @bind-Value="Model.Content"> + - + + - + +
- +
@@ -62,18 +65,16 @@ @ConstantString.Cancel - @ConstantString.Ok + @ConstantString.Ok @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired][Parameter] - public AddEditDocumentCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditDocumentCommand Model { get; set; } = default!; - private MudForm? _form = default!; + private MudForm? _form; private const long MaxAllowedSize = 3145728; @@ -84,8 +85,11 @@ { MudDialog.Close(DialogResult.Ok(true)); } + } + private void Cancel() + { + MudDialog.Cancel(); } - private void Cancel() => MudDialog.Cancel(); } \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor b/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor index 7a174b8e3..bea0dcb10 100644 --- a/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor +++ b/src/Server.UI/Pages/Documents/Components/UploadFilesFormDialog.razor @@ -1,10 +1,13 @@ +@using SixLabors.ImageSharp.Processing +@using Color = MudBlazor.Color +@using Severity = MudBlazor.Severity +@using SixLabors.ImageSharp +@using SixLabors.ImageSharp.Formats.Png @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.Upload -@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @using CleanArchitecture.Blazor.Domain.Common.Enums -@using SixLabors.ImageSharp.Processing -@using SixLabors.ImageSharp; - +@using System.Buffers +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @inherits MudComponentBase @inject IJSRuntime Js @@ -21,13 +24,13 @@ { - @item.FileName + @item.FileName - + - (@FormatBytes(item.UploadedBytes) / @FormatBytes(item.Size)) + (@FormatBytes(item.UploadedBytes) / @FormatBytes(item.Size)) } @@ -35,34 +38,31 @@ } else { - @L["Please click [Choose Files] button to upload your photo."] + @L["Please click [Choose Files] button to upload your photo."] } - - @ConstantString.Clear - + + @ConstantString.Clear + + Icon="@Icons.Material.Filled.AttachFile" + for="@context"> @L["Choose files"] @ConstantString.Submit - + @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditDocumentCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditDocumentCommand Model { get; set; } = default!; private bool _processing; private bool _uploading; @@ -83,7 +83,7 @@ timer.Change(TimeSpan.FromMilliseconds(500), TimeSpan.FromMilliseconds(500)); // Upload files - byte[] buffer = System.Buffers.ArrayPool.Shared.Rent(4096); + var buffer = ArrayPool.Shared.Rent(4096); try { foreach (var file in files) @@ -111,7 +111,7 @@ } finally { - System.Buffers.ArrayPool.Shared.Return(buffer); + ArrayPool.Shared.Return(buffer); // AddOrUpdate the UI with the final progress StateHasChanged(); @@ -131,10 +131,10 @@ string[] suf = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; //Longs run out around EB if (byteCount == 0) return "0" + suf[0]; - long bytes = Math.Abs(byteCount); - int place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); - double num = Math.Round(bytes / Math.Pow(1024, place), 1); - return (Math.Sign(byteCount) * num).ToString() + suf[place]; + var bytes = Math.Abs(byteCount); + var place = Convert.ToInt32(Math.Floor(Math.Log(bytes, 1024))); + var num = Math.Round(bytes / Math.Pow(1024, place), 1); + return Math.Sign(byteCount) * num + suf[place]; } private async Task Submit() @@ -155,7 +155,7 @@ imgStream.Position = 0; using (var outStream = new MemoryStream()) { - using (var image = SixLabors.ImageSharp.Image.Load(imgStream)) + using (var image = Image.Load(imgStream)) { var scale = 0m; if (image.Width > 1600) @@ -170,19 +170,22 @@ { scale = 0.9m; } + image.Mutate( - i => i.AutoOrient().Resize(Convert.ToInt32(image.Width * scale), 0)); - image.Save(outStream, SixLabors.ImageSharp.Formats.Png.PngFormat.Instance); + i => i.AutoOrient().Resize(Convert.ToInt32(image.Width * scale), 0)); + image.Save(outStream, PngFormat.Instance); } + var request = new UploadRequest(uploaded.FileName, UploadType.Document, outStream.ToArray()); list.Add(request); } } catch (Exception e) { - Snackbar.Add($"{e.Message}", MudBlazor.Severity.Error); + Snackbar.Add($"{e.Message}", Severity.Error); } } + var uploadCommand = new UploadDocumentCommand(list); await Mediator.Send(uploadCommand); await Clear(); @@ -195,17 +198,21 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } private async Task Clear() { await new InputClear(Js).Clear("fileInput"); - _uploadedFiles = new(); + _uploadedFiles = new List(); } private record FileUploadProgress(string FileName, long Size, IBrowserFile File) { public long UploadedBytes { get; set; } - public double UploadedPercentage => (double)UploadedBytes / (double)Size * 100d; + public double UploadedPercentage => UploadedBytes / (double)Size * 100d; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Documents.razor b/src/Server.UI/Pages/Documents/Documents.razor index fa9b602b6..9f017def1 100644 --- a/src/Server.UI/Pages/Documents/Documents.razor +++ b/src/Server.UI/Pages/Documents/Documents.razor @@ -1,26 +1,23 @@ @page "/pages/documents" -@using AutoMapper; +@attribute [Authorize(Policy = Permissions.Documents.View)] +@inherits FluxorComponent +@using CleanArchitecture.Blazor.Application.Features.Documents.DTOs +@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.GetFileStream +@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.PaginationQuery +@using CleanArchitecture.Blazor.Application.Features.Documents.Specifications @using CleanArchitecture.Blazor.Domain.Common.Enums +@using BlazorDownloadFile @using CleanArchitecture.Blazor.Server.UI.Hubs @using CleanArchitecture.Blazor.Server.UI.Pages.Documents.Components -@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop; -@using BlazorDownloadFile -@using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant -@using CleanArchitecture.Blazor.Infrastructure.Constants.Permission; -@using CleanArchitecture.Blazor.Application.Features.Documents.Caching; -@using CleanArchitecture.Blazor.Application.Features.Documents.Commands.Delete -@using CleanArchitecture.Blazor.Application.Features.Documents.DTOs +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop +@using Severity = MudBlazor.Severity +@using CleanArchitecture.Blazor.Application.Features.Documents.Caching @using CleanArchitecture.Blazor.Application.Features.Documents.Commands.AddEdit -@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.GetFileStream -@using CleanArchitecture.Blazor.Application.Features.Documents.Queries.PaginationQuery -@using CleanArchitecture.Blazor.Application.Features.Documents.Specifications; - -@attribute [Authorize(Policy = Permissions.Documents.View)] -@inherits FluxorComponent +@using CleanArchitecture.Blazor.Application.Features.Documents.Commands.Delete @implements IDisposable -@inject IState UserProfileState +@inject IState UserProfileState @inject IBlazorDownloadFileService BlazorDownloadFileService @inject HubClient Client @inject IMediator Mediator @@ -31,60 +28,66 @@ @Title + FixedHeader="true" + FixedFooter="false" + Virtualize="false" + @bind-RowsPerPage="_defaultPageSize" + Height="calc(100vh - 300px)" + Loading="@_loading" + MultiSelection="true" + @bind-SelectedItems="_selectedItems" + Hover="true" @ref="_table">
- +
@L["Documents"]
-
+
@ConstantString.Refresh + Size="Size.Small" + Disabled="@_loading" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + @if (_canCreate) { @L["Upload Pictures"] + StartIcon="@Icons.Material.Filled.Camera" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @L["Upload Pictures"] + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } - @ConstantString.Refresh + @ConstantString.Refresh @if (_canCreate) { @L["Upload Pictures"] @@ -98,55 +101,56 @@
@if (_canSearch) { - + + }
- + @if (_canEdit || _canDelete) { + Dense="true" + EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @if (_canDownload) { - @ConstantString.Download + @ConstantString.Download } } else { + StartIcon="@Icons.Material.Filled.DoNotTouch" IconColor="Color.Secondary" Size="Size.Small" + Color="Color.Surface"> @ConstantString.NoAllowed } - +
@context.Item.Title - @context.Item.Description + @context.Item.Description
- +
@@ -167,20 +171,20 @@ }
- +
- +
- - @context.Item.DocumentType + + @context.Item.DocumentType
- + @if (UserProfile?.UserId == context.Item.Owner?.Id) { @@ -195,11 +199,11 @@ } - +
@context.Item.TenantName - @context.Item.TenantId + @context.Item.TenantId
@@ -211,7 +215,7 @@ @ConstantString.Loading - + @@ -222,18 +226,17 @@ @code { - [CascadingParameter] - protected Task AuthState { get; set; } = default!; + [CascadingParameter] protected Task AuthState { get; set; } = default!; private UserProfile UserProfile => UserProfileState.Value.UserProfile; private string? Title { get; set; } - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private readonly DocumentDto _currentDto = new(); private MudDataGrid _table = null!; private int _defaultPageSize = 15; private string _searchString = string.Empty; - private bool _downloading = false; + private bool _downloading; private bool _loading; private string _tenantId = string.Empty; @@ -263,7 +266,7 @@ Client.JobStartedEvent += _client_JobStarted; UserProfileState.StateChanged += StateOnStateChanged; await Client.StartAsync(); - Query = new DocumentsWithPaginationQuery() { CurrentUser = UserProfile }; + Query = new DocumentsWithPaginationQuery { CurrentUser = UserProfile }; } private void _client_JobCompleted(object? sender, string e) @@ -271,7 +274,7 @@ InvokeAsync(async () => { await _table.ReloadServerData(); - Snackbar.Add(string.Format(L["{0} recognize completed."], e), MudBlazor.Severity.Success); + Snackbar.Add(string.Format(L["{0} recognize completed."], e), Severity.Success); }); } @@ -280,14 +283,15 @@ InvokeAsync(async () => { await _table.ReloadServerData(); - Snackbar.Add(string.Format(L["{0} job started."], e), MudBlazor.Severity.Info); + Snackbar.Add(string.Format(L["{0} job started."], e), Severity.Info); }); } private void StateOnStateChanged(object? sender, EventArgs args) - { - InvokeAsync(async () => { - if(!UserProfileState.Value.IsLoading) await _table.ReloadServerData(); + { + InvokeAsync(async () => + { + if (!UserProfileState.Value.IsLoading) await _table.ReloadServerData(); }); } @@ -306,26 +310,22 @@ _loading = true; Query.Keyword = _searchString; Query.CurrentUser = UserProfile; - Query.OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy??"Id"; - Query.SortDirection = state.SortDefinitions.FirstOrDefault() == null ? SortDirection.Descending.ToString() : (state.SortDefinitions.First().Descending ? SortDirection.Descending.ToString():SortDirection.Ascending.ToString()); + Query.OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id"; + Query.SortDirection = state.SortDefinitions.FirstOrDefault() == null ? SortDirection.Descending.ToString() : state.SortDefinitions.First().Descending ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(); Query.PageNumber = state.Page + 1; Query.PageSize = state.PageSize; var result = await Mediator.Send(Query); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { _loading = false; } - } private void OnFilterChanged(string s) { - InvokeAsync(async () => - { - await _table.ReloadServerData(); - }); + InvokeAsync(async () => { await _table.ReloadServerData(); }); } private async Task OnChangedListView(DocumentListView listview) @@ -337,33 +337,33 @@ private async Task OnSearch(string text) { DocumentCacheKey.Refresh(); - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = text; await _table.ReloadServerData(); } private async Task OnRefresh() { - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = string.Empty; await _table.ReloadServerData(); } private async Task OnCreate() { - var command = new AddEditDocumentCommand() { DocumentType = DocumentType.Document }; + var command = new AddEditDocumentCommand { DocumentType = DocumentType.Document }; var parameters = new DialogParameters - { - { x=>x.Model,command }, - }; + { + { x => x.Model, command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Upload Pictures"], parameters, options); + (L["Upload Pictures"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); - Snackbar.Add(ConstantString.UploadSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.UploadSuccess, Severity.Info); } } @@ -371,14 +371,14 @@ { var command = Mapper.Map(dto); var parameters = new DialogParameters - { - { nameof(DocumentFormDialog.Model),command }, - }; + { + { nameof(DocumentFormDialog.Model), command } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show(string.Format(ConstantString.EditTheItem, L["Document"]), parameters, options); await Task.Delay(300); - if (!string.IsNullOrEmpty(dto.URL)) await (new OpenSeadragon(JS)).Open(dto.URL); + if (!string.IsNullOrEmpty(dto.URL)) await new OpenSeadragon(JS).Open(dto.URL); var state = await dialog.Result; if (!state.Canceled) { @@ -388,12 +388,12 @@ private async Task OnDelete(DocumentDto dto) { - var command = new DeleteDocumentCommand(new int[] { dto.Id }); + var command = new DeleteDocumentCommand(new[] { dto.Id }); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Title) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Title) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(string.Format(ConstantString.EditTheItem, L["Document"]), parameters, options); var state = await dialog.Result; @@ -407,13 +407,13 @@ { var command = new DeleteDocumentCommand(_selectedItems.Select(x => x.Id).ToArray()); var parameters = new DialogParameters - { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected,_selectedItems.Count) } - }; + { + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } + }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show - (string.Format(ConstantString.DeleteTheItem, L["Document"]), parameters, options); + (string.Format(ConstantString.DeleteTheItem, L["Document"]), parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -423,7 +423,6 @@ private async Task OnDownload(DocumentDto dto) { - try { _downloading = true; @@ -435,11 +434,12 @@ } catch (Exception e) { - Snackbar.Add($"{e.Message}", MudBlazor.Severity.Error); + Snackbar.Add($"{e.Message}", Severity.Error); } finally { _downloading = false; } } -} + +} \ No newline at end of file diff --git a/src/Server.UI/Pages/Documents/Documents.razor.js b/src/Server.UI/Pages/Documents/Documents.razor.js index 7aea3ed45..9589c16ae 100644 --- a/src/Server.UI/Pages/Documents/Documents.razor.js +++ b/src/Server.UI/Pages/Documents/Documents.razor.js @@ -12,6 +12,7 @@ }; document.head.appendChild(script); } + export function destroyscript() { var tags = document.head.getElementsByTagName('script'), index; for (index = tags.length - 1; index >= 0; index--) { diff --git a/src/Server.UI/Pages/Identity/Authentication/Forgot.razor b/src/Server.UI/Pages/Identity/Authentication/Forgot.razor index 37e8a9525..99f75435e 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Forgot.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Forgot.razor @@ -1,12 +1,11 @@ @page "/pages/authentication/forgot-password" + +@attribute [AllowAnonymous] @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Application.Features.Identity.Commands.ResetPassword +@using Severity = MudBlazor.Severity @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components -@using FluentEmail.Core.Models -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users - -@attribute [AllowAnonymous] @inherits OwningComponentBase @inject IStringLocalizer L @@ -24,10 +23,10 @@ { @L["Enter the email address linked to your account and you will receive an email containing a token string to reset your password."] - + @if (_sending) { - + @L["Waiting"] } else @@ -36,19 +35,20 @@ } } - else if (_step == 2 && _resetPasswordToken!=string.Empty) + else if (_step == 2 && _resetPasswordToken != string.Empty) { @L["Enter the token string from the recovery email to set your new password."] - - + + + @if (_sending) { - + @L["Waiting"] } else @@ -60,19 +60,19 @@ - @L["You are already logged in."] + @L["You are already logged in."] - @code{ +@code{ public string Title = "Forgot Password"; private int _step = 1; private string _emailAddress = string.Empty; - private bool _sending = false; - private string _resetPasswordToken = string.Empty; + private bool _sending; + private readonly string _resetPasswordToken = string.Empty; private string _inputToken = string.Empty; - private ApplicationUser? _user = null; + private readonly ApplicationUser? _user = null; private UserManager UserManager { get; set; } = null!; protected override Task OnInitializedAsync() @@ -93,12 +93,16 @@ _step = 2; Snackbar.Clear(); Snackbar.Configuration.PositionClass = Defaults.Classes.Position.TopCenter; - Snackbar.Add(string.Format(L["The email has been sent, please check the email:{0} "], _emailAddress), MudBlazor.Severity.Success, config => { config.ShowCloseIcon = false; config.HideTransitionDuration = 5000; }); + Snackbar.Add(string.Format(L["The email has been sent, please check the email:{0} "], _emailAddress), Severity.Success, config => + { + config.ShowCloseIcon = false; + config.HideTransitionDuration = 5000; + }); Logger.LogInformation("Password reset token sent to {0}.", _emailAddress); } else { - Snackbar.Add(response.ErrorMessage, MudBlazor.Severity.Error); + Snackbar.Add(response.ErrorMessage, Severity.Error); } _sending = false; @@ -113,11 +117,11 @@ { return; } - var model = new ResetPasswordFormModel() - { Id = _user.Id, DisplayName = _user.DisplayName, UserName = _user.UserName, ProfilePictureDataUrl = _user.ProfilePictureDataUrl }; + + var model = new ResetPasswordFormModel { Id = _user.Id, DisplayName = _user.DisplayName, UserName = _user.UserName, ProfilePictureDataUrl = _user.ProfilePictureDataUrl }; var parameters = new DialogParameters { - { x => x.Model, model} + { x => x.Model, model } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.ExtraSmall }; var dialog = DialogService.Show(L["Set a new password"], parameters, options); @@ -129,23 +133,24 @@ { _user.IsActive = true; await UserManager.UpdateAsync(_user); - Snackbar.Add($"{L["The new password has been set successfully, please login again"]}", MudBlazor.Severity.Info); + Snackbar.Add($"{L["The new password has been set successfully, please login again"]}", Severity.Info); Logger.LogInformation("{@UserName:l} has set a new password", model.UserName); Navigation.NavigateTo("/"); } else { - Snackbar.Add($"{string.Join(",", state.Errors.Select(x => x.Description).ToArray())}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", state.Errors.Select(x => x.Description).ToArray())}", Severity.Error); } } } catch (Exception e) { - Snackbar.Add(string.Format(L["{0}, please contact the administrator"], e.Message), MudBlazor.Severity.Error); + Snackbar.Add(string.Format(L["{0}, please contact the administrator"], e.Message), Severity.Error); } finally { _sending = false; } } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Login.razor b/src/Server.UI/Pages/Identity/Authentication/Login.razor index c1333b002..c12db566e 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Login.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Login.razor @@ -1,19 +1,15 @@ @page "/pages/authentication/login" - -@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity; -@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity.DTOs; +@using Severity = Severity +@using CleanArchitecture.Blazor.Application.Common.Security @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Infrastructure.Services.JWT +@using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity +@using Microsoft.AspNetCore.DataProtection +@using CleanArchitecture.Blazor.Server.UI.Services @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components -@using CleanArchitecture.Blazor.Server.UI.Services -@using Microsoft.AspNetCore.DataProtection -@using CleanArchitecture.Blazor.Application.Common.Security -@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @using CleanArchitecture.Blazor.Infrastructure.Constants.User -@using Severity = MudBlazor.Severity -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers +@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @inherits OwningComponentBase @implements IDisposable @@ -34,23 +30,25 @@ @L["Sign In"] - @L["Don't have an account?"] @L["Sign Up"] + + @L["Don't have an account?"] @L["Sign Up"] + + @bind-Value="_model.UserName" For="@(() => _model.UserName)" + Label="@L["Username"]" + Variant="Variant.Outlined" + Required="true" + OnlyValidateIfDirty="true" + Immediate="true" + Class="my-6"> + For="@(() => _model.Password)" + Label="@L["Password"]" + PasswordMode="true" + Variant="Variant.Outlined" + Required="true">
@@ -59,15 +57,15 @@
+ Color="Color.Primary" + Size="Size.Large" + Disabled="@(_loading)" + ButtonType="ButtonType.Button" + OnClick="@(OnSubmit)" + FullWidth="true"> @if (_loading) { - + @ConstantString.Loading } else @@ -78,11 +76,11 @@
+ title="Sign in with Microsoft"> @ConstantString.Microsoft + title="Sign in with Google"> @ConstantString.Google
@@ -99,9 +97,9 @@ private MudForm? _form; private bool _success; private bool _loading; - [Inject] - public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; - private LoginFormModel _model = new() + [Inject] public AuthenticationStateProvider AuthenticationStateProvider { get; set; } = null!; + + private readonly LoginFormModel _model = new() { UserName = "administrator", Password = "Password123!", @@ -146,7 +144,7 @@ else { var accessToken = await TokenProvider.Login(user); - var claims =await TokenProvider.ParseClaimsFromJwt(accessToken); + var claims = await TokenProvider.ParseClaimsFromJwt(accessToken); ((BlazorAuthenticationStateProvider)AuthenticationStateProvider).MarkUserAsAuthenticated(claims); Logger.LogInformation("{@UserName:l} has successfully logged in", user.UserName); } @@ -165,7 +163,7 @@ var model = new ResetPasswordFormModel { Id = item.Id, DisplayName = item.DisplayName, UserName = item.UserName, ProfilePictureDataUrl = item.ProfilePictureDataUrl }; var parameters = new DialogParameters { - { x=>x.Model, model} + { x => x.Model, model } }; var options = new DialogOptions { CloseOnEscapeKey = true, MaxWidth = MaxWidth.ExtraSmall }; var dialog = DialogService.Show(L["Set new password"], parameters, options); @@ -210,25 +208,28 @@ { var admin = await UserManager.FindByNameAsync(UserName.Administrator) ?? throw new NotFoundException("Administrator's account Not Found."); user = new ApplicationUser - { - EmailConfirmed = true, - IsActive = true, - IsLive = true, - UserName = userName, - Email = userName.Any(x => x == '@') ? userName : $"{userName}@{provider}.com", - Provider = provider, - DisplayName = name, - SuperiorId = admin.Id, - TenantId = admin.TenantId, - TenantName = admin.TenantName - }; + { + EmailConfirmed = true, + IsActive = true, + IsLive = true, + UserName = userName, + Email = userName.Any(x => x == '@') ? userName : $"{userName}@{provider}.com", + Provider = provider, + DisplayName = name, + SuperiorId = admin.Id, + TenantId = admin.TenantId, + TenantName = admin.TenantName + }; var createResult = await UserManager.CreateAsync(user); if (createResult.Succeeded) { var assignResult = await UserManager.AddToRoleAsync(user, RoleName.Basic); } + await UserManager.AddLoginAsync(user, new UserLoginInfo(provider, userName, accessToken)); } + return user; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Register.razor b/src/Server.UI/Pages/Identity/Authentication/Register.razor index 6682aa1a8..8fde2c039 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Register.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Register.razor @@ -1,11 +1,11 @@ @page "/pages/authentication/register" +@attribute [AllowAnonymous] @using CleanArchitecture.Blazor.Application.Common.Security @using CleanArchitecture.Blazor.Domain.Identity -@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @using FluentEmail.Core.Models - -@attribute [AllowAnonymous] +@using Severity = MudBlazor.Severity +@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @inherits OwningComponentBase @inject NavigationManager Navigation @@ -18,9 +18,11 @@ - + @L["Sign Up"] - @L["have an account?"] @L["Sign In"] + + @L["have an account?"] @L["Sign In"] + + Class="my-4"> + + Variant="Variant.Outlined"> + + Label="@L["Password"]" + @bind-Value="_model.Password" + For="@(() => _model.Password)" + PasswordMode="true" + Variant="Variant.Outlined" + Required="true" + RequiredError="@L["password is required!"]" + Class="mt-4"/> + Required="true" + RequiredError="@L["password is required!"]" + Class="mt-4"/> @@ -70,7 +74,7 @@ FullWidth="true"> @if (_loading) { - + @ConstantString.Loading } else @@ -82,12 +86,12 @@ - @L["You are already logged in."] + @L["You are already logged in."] @code{ - private string Title = "Sign Up"; + private readonly string Title = "Sign Up"; private MudForm? _form; private bool _loading; private readonly RegisterFormModel _model = new(); @@ -101,10 +105,10 @@ if (_form!.IsValid) { var user = new ApplicationUser - { - UserName = _model.UserName, - Email = _model.Email - }; + { + UserName = _model.UserName, + Email = _model.Email + }; var result = await UserManager.CreateAsync(user, _model.Password!); if (result.Succeeded) { @@ -114,22 +118,22 @@ var response = await SendWelcome(user.Email!, user.UserName!); if (response.Successful == false) { - Snackbar.Add(string.Format(L["{0}"], response.ErrorMessages.FirstOrDefault()), MudBlazor.Severity.Warning); + Snackbar.Add(string.Format(L["{0}"], response.ErrorMessages.FirstOrDefault()), Severity.Warning); } - Snackbar.Add(L["Register successfully!"], MudBlazor.Severity.Info); + + Snackbar.Add(L["Register successfully!"], Severity.Info); Navigation.NavigateTo("/"); } else { - Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", Severity.Error); } } else { - Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description))}", Severity.Error); } } - } finally { @@ -141,6 +145,7 @@ { var subject = string.Format(L["Welcome to {0}"], Settings.AppName); var template = Path.Combine(Directory.GetCurrentDirectory(), "Resources", "EmailTemplates", "_welcome.txt"); - return MailService.SendAsync(toEmail, subject, "_welcome", new { AppName = Settings.AppName, Email = toEmail, UserName = userName }); + return MailService.SendAsync(toEmail, subject, "_welcome", new { Settings.AppName, Email = toEmail, UserName = userName }); } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Authentication/Reset.razor b/src/Server.UI/Pages/Identity/Authentication/Reset.razor index 688a75cf9..594a08665 100644 --- a/src/Server.UI/Pages/Identity/Authentication/Reset.razor +++ b/src/Server.UI/Pages/Identity/Authentication/Reset.razor @@ -1,4 +1,5 @@ @page "/pages/authentication/reset-password" +@using Severity = MudBlazor.Severity @attribute [AllowAnonymous] @@ -7,12 +8,12 @@ @L["Set new password"] - + @L["Set new password"] - @L["You are already logged in."] + @L["You are already logged in."] @@ -38,4 +39,5 @@ _passwordInput = InputType.Text; } } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor b/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor index 805fa9faf..4cfe1c3ec 100644 --- a/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor +++ b/src/Server.UI/Pages/Identity/Roles/Components/PermissionsDrawer.razor @@ -1,5 +1,5 @@ -@using CleanArchitecture.Blazor.Server.UI.Models.Identity; - using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +@using CleanArchitecture.Blazor.Server.UI.Models.Identity @inherits MudComponentBase @inject IStringLocalizer L @@ -70,23 +70,17 @@ @code{ - [EditorRequired][Parameter] - public List Permissions { get; set; } = new()!; + [EditorRequired] [Parameter] public List Permissions { get; set; } = new()!; - [EditorRequired][Parameter] - public bool Open { get; set; } = default!; + [EditorRequired] [Parameter] public bool Open { get; set; } = default!; - [EditorRequired][Parameter] - public EventCallback OnAssignChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback OnAssignChanged { get; set; } - [EditorRequired][Parameter] - public EventCallback> OnAssignAllChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback> OnAssignAllChanged { get; set; } - [EditorRequired][Parameter] - public EventCallback OnOpenChanged { get; set; } + [EditorRequired] [Parameter] public EventCallback OnOpenChanged { get; set; } - [Parameter] - public bool Waiting { get; set; } + [Parameter] public bool Waiting { get; set; } private string Keyword { get; set; } = string.Empty; @@ -98,6 +92,8 @@ t.Assigned = !t.Assigned; list.Add(t); } + await OnAssignAllChanged.InvokeAsync(list); } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor b/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor index 590b5cee3..524673fd6 100644 --- a/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor +++ b/src/Server.UI/Pages/Identity/Roles/Components/RoleFormDialog.razor @@ -1,5 +1,4 @@ @using CleanArchitecture.Blazor.Application.Features.Identity.DTOs - @inherits MudComponentBase @inject IStringLocalizer L @@ -31,11 +30,9 @@ @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired][Parameter] - public ApplicationRoleDto Model { get; set; } = default!; + [EditorRequired] [Parameter] public ApplicationRoleDto Model { get; set; } = default!; private MudForm? _form; private readonly RoleDtoValidator _modelValidator = new(); @@ -60,14 +57,15 @@ public RoleDtoValidator() { RuleFor(v => v.Name) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); } public Func>> ValidateValue => async (model, propertyName) => { var result = await ValidateAsync(ValidationContext.CreateWithOptions((ApplicationRoleDto)model, x => x.IncludeProperties(propertyName))); - return result.IsValid ? (IEnumerable)Array.Empty() : result.Errors.Select(e => e.ErrorMessage); + return result.IsValid ? Array.Empty() : result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Roles/Roles.razor b/src/Server.UI/Pages/Identity/Roles/Roles.razor index e03dc4487..127a2e017 100644 --- a/src/Server.UI/Pages/Identity/Roles/Roles.razor +++ b/src/Server.UI/Pages/Identity/Roles/Roles.razor @@ -1,15 +1,14 @@ @page "/identity/roles" +@using Severity = Severity +@using LazyCache +@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Roles.Components -@using LazyCache -@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs @using System.Security.Claims -@using Severity = MudBlazor.Severity -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers -@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes @using System.ComponentModel @using System.Reflection +@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes @attribute [Authorize(Policy = Permissions.Roles.View)] @inherits OwningComponentBase @@ -33,56 +32,56 @@
- +
@L["Roles"]
-
+
- @ConstantString.Refresh - - @if (_canCreate) + Size="Size.Small" + OnClick="OnRefresh" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { - @ConstantString.New - + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { - @ConstantString.Delete - + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + OnClick="OnDeleteChecked" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canExport) { - @ConstantString.Export - + StartIcon="@Icons.Material.Filled.Download" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Export + } @if (_canImport) { @@ -97,7 +96,7 @@ for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -180,7 +179,7 @@ - + @@ -193,8 +192,7 @@ @code{ - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; private string? Title { get; set; } private bool _processing; @@ -304,7 +302,7 @@ { var parameters = new DialogParameters { - { x=>x.Model, item} + { x => x.Model, item } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show(L["Edit the role"], parameters, options); @@ -356,30 +354,31 @@ var moduleName = string.Empty; var moduleDescription = string.Empty; if (module.GetCustomAttributes(typeof(DisplayNameAttribute), true) - .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) + .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) moduleName = displayNameAttribute.DisplayName; if (module.GetCustomAttributes(typeof(DescriptionAttribute), true) - .FirstOrDefault() is DescriptionAttribute descriptionAttribute) + .FirstOrDefault() is DescriptionAttribute descriptionAttribute) moduleDescription = descriptionAttribute.Description; var fields = module.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); allPermissions.AddRange(from field in fields - select field.GetValue(null) - into propertyValue - where propertyValue is not null - select propertyValue.ToString() - into claimValue - select new PermissionModel - { - RoleId = dto.Id, - ClaimValue = claimValue, - ClaimType = ApplicationClaimTypes.Permission, - Group = moduleName, - Description = moduleDescription, - Assigned = _assignedClaims.Any(x => x.Value == claimValue) - }); + select field.GetValue(null) + into propertyValue + where propertyValue is not null + select propertyValue.ToString() + into claimValue + select new PermissionModel + { + RoleId = dto.Id, + ClaimValue = claimValue, + ClaimType = ApplicationClaimTypes.Permission, + Group = moduleName, + Description = moduleDescription, + Assigned = _assignedClaims.Any(x => x.Value == claimValue) + }); } + return allPermissions; } @@ -409,8 +408,10 @@ { await RoleManager.RemoveClaimAsync(role, removed); } + Snackbar.Add($"{L["Permission removed successfully!"]}", Severity.Info); } + var key = $"get-claims-by-{role.Id}"; Cache.Remove(key); } @@ -445,6 +446,7 @@ } } } + Snackbar.Add($"{L["Authorization has been changed"]}", Severity.Info); await Task.Delay(300); var key = $"get-claims-by-{role.Id}"; @@ -461,7 +463,7 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent, dto.Name) } + { x => x.ContentText, string.Format(deleteContent, dto.Name) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -478,6 +480,7 @@ return; } } + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); await OnRefresh(); } @@ -488,7 +491,7 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - {x=> x.ContentText, string.Format(deleteContent, _selectedItems.Count) } + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -506,6 +509,7 @@ return; } } + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); await OnRefresh(); } @@ -522,4 +526,5 @@ _uploading = false; return Task.CompletedTask; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor b/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor index 210bc499c..3189ced11 100644 --- a/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor +++ b/src/Server.UI/Pages/Identity/Users/Components/ResetPasswordDialog.razor @@ -1,5 +1,5 @@ -@using CleanArchitecture.Blazor.Server.UI.Models.Identity; - using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +using CleanArchitecture.Blazor.Server.UI.Pages._Models.Identity +@using CleanArchitecture.Blazor.Server.UI.Models.Identity @inherits MudComponentBase @inject IStringLocalizer L @@ -9,7 +9,7 @@ - + + Class="mt-4"/> + Class="mt-4"/> @@ -43,15 +43,12 @@ @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public ResetPasswordFormModel Model { get; set; } = default!; + [EditorRequired] [Parameter] public ResetPasswordFormModel Model { get; set; } = default!; - private MudForm? _form = default!; - private readonly ResetPasswordFormModelValidator _modelValidator = new ResetPasswordFormModelValidator(); + private MudForm? _form; + private readonly ResetPasswordFormModelValidator _modelValidator = new(); private async Task Submit() { @@ -62,7 +59,10 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } // TODO: probably this will be moved as feature in the application layer public class ResetPasswordFormModelValidator : AbstractValidator @@ -70,14 +70,14 @@ public ResetPasswordFormModelValidator() { RuleFor(p => p.Password).NotEmpty().WithMessage("Your password cannot be empty") - .MinimumLength(6).WithMessage("Your password length must be at least 6.") - .MaximumLength(16).WithMessage("Your password length must not exceed 16.") - .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") - .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") - .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") - .Matches(@"[\@\!\?\*\.]+").WithMessage("Your password must contain at least one (@!? *.)."); + .MinimumLength(6).WithMessage("Your password length must be at least 6.") + .MaximumLength(16).WithMessage("Your password length must not exceed 16.") + .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") + .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") + .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") + .Matches(@"[\@\!\?\*\.]+").WithMessage("Your password must contain at least one (@!? *.)."); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.Password); + .Equal(x => x.Password); } public Func>> ValidateValue => async (model, propertyName) => @@ -88,4 +88,5 @@ return result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor b/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor index 76858992c..e322058f2 100644 --- a/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor +++ b/src/Server.UI/Pages/Identity/Users/Components/UserForm.razor @@ -1,16 +1,16 @@ -@using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant -@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs -@using CleanArchitecture.Blazor.Domain.Common.Enums -@using CleanArchitecture.Blazor.Domain.Identity @using ResizeMode = SixLabors.ImageSharp.Processing.ResizeMode -@using Severity = MudBlazor.Severity +@using Severity = Severity @using Size = SixLabors.ImageSharp.Size -@using SixLabors.ImageSharp.Formats.Png -@using SixLabors.ImageSharp.Processing @using Image = SixLabors.ImageSharp.Image -@using Color = MudBlazor.Color -@using SixLabors.ImageSharp; - using CleanArchitecture.Blazor.Domain.Identity; +@using Color = Color +@using SixLabors.ImageSharp.Processing +@using SixLabors.ImageSharp +@using SixLabors.ImageSharp.Formats.Png +@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs +@using CleanArchitecture.Blazor.Domain.Common.Enums +@using CleanArchitecture.Blazor.Domain.Identity +@using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant +using CleanArchitecture.Blazor.Domain.Identity; @inherits MudComponentBase @@ -126,7 +126,7 @@ { var x = i; - + } @@ -135,19 +135,16 @@ @code{ + public class CheckItem { public string Key { get; set; } = string.Empty; public bool Value { get; set; } } - [EditorRequired] - [Parameter] - public ApplicationUserDto Model { get; set; } = default!; + [EditorRequired] [Parameter] public ApplicationUserDto Model { get; set; } = default!; - [EditorRequired] - [Parameter] - public EventCallback OnFormSubmit { get; set; } + [EditorRequired] [Parameter] public EventCallback OnFormSubmit { get; set; } private MudForm? _form = default!; @@ -221,30 +218,30 @@ public ApplicationUserDtoValidator() { RuleFor(v => v.TenantId) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); //RuleFor(v => v.SuperiorId) // .MaximumLength(256) // .NotEmpty().When(x=>!x.UserName.Equals("Administrator", StringComparison.CurrentCultureIgnoreCase)); RuleFor(v => v.Provider) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); RuleFor(v => v.UserName) - .MaximumLength(256) - .NotEmpty(); + .MaximumLength(256) + .NotEmpty(); RuleFor(v => v.Email) - .MaximumLength(256) - .NotEmpty() - .EmailAddress(); + .MaximumLength(256) + .NotEmpty() + .EmailAddress(); RuleFor(p => p.Password).NotEmpty().WithMessage("Your password cannot be empty") - .MinimumLength(6).WithMessage("Your password length must be at least 6.") - .MaximumLength(16).WithMessage("Your password length must not exceed 16.") - .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") - .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") - .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") - .Matches(@"[\!\?\*\.]+").WithMessage("Your password must contain at least one (!? *.)."); + .MinimumLength(6).WithMessage("Your password length must be at least 6.") + .MaximumLength(16).WithMessage("Your password length must not exceed 16.") + .Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.") + .Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.") + .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") + .Matches(@"[\!\?\*\.]+").WithMessage("Your password must contain at least one (!? *.)."); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.Password); + .Equal(x => x.Password); } public Func>> ValidateValue => async (model, propertyName) => @@ -255,4 +252,5 @@ return result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor b/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor index a505e99ae..6b4752705 100644 --- a/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor +++ b/src/Server.UI/Pages/Identity/Users/Components/UserFormDialog.razor @@ -1,13 +1,11 @@ @using CleanArchitecture.Blazor.Application.Features.Identity.DTOs -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components; - @inherits MudComponentBase @inject IStringLocalizer L - + @ConstantString.Cancel @@ -16,24 +14,26 @@ @code{ - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [Parameter] - public ApplicationUserDto Model { get; set; } = default!; + [Parameter] public ApplicationUserDto Model { get; set; } = default!; - private UserForm? _userForm = default!; + private UserForm? _userForm; protected async Task Submit() { await _userForm!.Submit(); } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } protected Task OnFormSubmitHandler(ApplicationUserDto model) { MudDialog.Close(DialogResult.Ok(model)); return Task.CompletedTask; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Profile.razor b/src/Server.UI/Pages/Identity/Users/Profile.razor index 119a9d889..fbf9cbe21 100644 --- a/src/Server.UI/Pages/Identity/Users/Profile.razor +++ b/src/Server.UI/Pages/Identity/Users/Profile.razor @@ -1,19 +1,23 @@ @page "/user/profile" -@using Blazor.Server.UI.Services.JsInterop; + +@using SixLabors.ImageSharp.Processing +@using Color = MudBlazor.Color +@using ResizeMode = SixLabors.ImageSharp.Processing.ResizeMode +@using Severity = MudBlazor.Severity +@using Size = SixLabors.ImageSharp.Size +@using SixLabors.ImageSharp +@using SixLabors.ImageSharp.Formats.Png +@using CleanArchitecture.Blazor.Server.UI.Models.Identity +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity -@using CleanArchitecture.Blazor.Domain.Common.Enums @using CleanArchitecture.Blazor.Domain.Identity -@using CleanArchitecture.Blazor.Server.UI.Models.Identity -@using SixLabors.ImageSharp -@using SixLabors.ImageSharp.Formats -@using SixLabors.ImageSharp.Processing - +@using CleanArchitecture.Blazor.Domain.Common.Enums @inherits OwningComponentBase @inject IValidationService Validator @inject IStringLocalizer L @inject IJSRuntime JS -@inject IState UserProfileState +@inject IState UserProfileState @inject IDispatcher Dispatcher @inject IUploadService UploadService @inject IIdentityService IdentityService @@ -25,7 +29,7 @@ @if (IsLoading && string.IsNullOrEmpty(model.UserId)) { - + } else { @@ -102,10 +106,10 @@ - + @if (_submitting) { - + @ConstantString.Waiting } else @@ -123,38 +127,38 @@ + RequiredError="@L["current password is required!"]"/> + RequiredError="@L["password is required!"]"/> + RequiredError="@L["password is required!"]"/> - + @if (_submitting) { - + @ConstantString.Waiting } else @@ -168,7 +172,8 @@
+ style="height: calc(100vh - 265px);"> +
} @@ -179,16 +184,15 @@ @code{ - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string Title { get; set; } = "Profile"; - private MudForm? _form = null!; - private MudForm? _passwordform = null!; + private MudForm? _form; + private MudForm? _passwordform; private bool _submitting; - private ChangePasswordModel _changepassword { get; set; } = new(); + private ChangePasswordModel _changepassword { get; } = new(); private readonly ChangePasswordModelValidator _passwordValidator = new(); private readonly List _orgData = new(); @@ -196,7 +200,10 @@ private bool IsLoading => UserProfileState.Value.IsLoading; private UserProfile model => UserProfileState.Value.UserProfile; - public void ReRender() => StateHasChanged(); + public void ReRender() + { + StateHasChanged(); + } private async void ActivePanelIndexChanged(int index) { @@ -232,7 +239,8 @@ orgitem.DirectSubordinates = count; _orgData.Add(orgitem); } - await (new OrgChart(JS)).Create(this._orgData); + + await new OrgChart(JS).Create(_orgData); } protected override async Task OnInitializedAsync() @@ -249,10 +257,7 @@ private void StateOnStateChanged(object? sender, EventArgs args) { - InvokeAsync(() => - { - StateHasChanged(); - }); + InvokeAsync(() => { StateHasChanged(); }); } private async Task UploadPhoto(IBrowserFile file) @@ -265,15 +270,15 @@ { using (var image = Image.Load(imgstream)) { - image.Mutate(i => i.Resize(new ResizeOptions() { Mode = SixLabors.ImageSharp.Processing.ResizeMode.Crop, Size = new SixLabors.ImageSharp.Size(128, 128) })); - image.Save(outStream, SixLabors.ImageSharp.Formats.Png.PngFormat.Instance); - var result = await UploadService.UploadAsync(new UploadRequest(Guid.NewGuid().ToString() + ".png", UploadType.ProfilePicture, outStream.ToArray())); + image.Mutate(i => i.Resize(new ResizeOptions { Mode = ResizeMode.Crop, Size = new Size(128, 128) })); + image.Save(outStream, PngFormat.Instance); + var result = await UploadService.UploadAsync(new UploadRequest(Guid.NewGuid() + ".png", UploadType.ProfilePicture, outStream.ToArray())); model.ProfilePictureDataUrl = result; var user = await UserManager.FindByIdAsync(model.UserId!); user!.ProfilePictureDataUrl = model.ProfilePictureDataUrl; await UserManager.UpdateAsync(user); - Snackbar.Add(L["The avatar has been updated."], MudBlazor.Severity.Info); - Dispatcher.Dispatch(new UserProfileUpdateAction() { UserProfile = model }); + Snackbar.Add(L["The avatar has been updated."], Severity.Info); + Dispatcher.Dispatch(new UserProfileUpdateAction { UserProfile = model }); } } } @@ -292,8 +297,8 @@ user.DisplayName = model.DisplayName; user.ProfilePictureDataUrl = model.ProfilePictureDataUrl; await UserManager.UpdateAsync(user); - Snackbar.Add($"{ConstantString.UpdateSuccess}", MudBlazor.Severity.Info); - Dispatcher.Dispatch(new UserProfileUpdateAction() { UserProfile = model }); + Snackbar.Add($"{ConstantString.UpdateSuccess}", Severity.Info); + Dispatcher.Dispatch(new UserProfileUpdateAction { UserProfile = model }); } } finally @@ -314,11 +319,11 @@ var result = await UserManager.ChangePasswordAsync(user!, _changepassword.CurrentPassword, _changepassword.NewPassword); if (result.Succeeded) { - Snackbar.Add($"{L["Changed password successfully."]}", MudBlazor.Severity.Info); + Snackbar.Add($"{L["Changed password successfully."]}", Severity.Info); } else { - Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description).ToArray())}", MudBlazor.Severity.Error); + Snackbar.Add($"{string.Join(",", result.Errors.Select(x => x.Description).ToArray())}", Severity.Error); } } } @@ -341,8 +346,7 @@ .Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.") .Matches(@"[\!\?\*\.]+").WithMessage("Your password must contain at least one (!? *.)."); RuleFor(x => x.ConfirmPassword) - .Equal(x => x.NewPassword); - + .Equal(x => x.NewPassword); } public Func>> ValidateValue => async (model, propertyName) => @@ -353,4 +357,5 @@ return result.Errors.Select(e => e.ErrorMessage); }; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Identity/Users/Users.razor b/src/Server.UI/Pages/Identity/Users/Users.razor index 29fa8c8b5..076d6bdb7 100644 --- a/src/Server.UI/Pages/Identity/Users/Users.razor +++ b/src/Server.UI/Pages/Identity/Users/Users.razor @@ -1,22 +1,20 @@ @page "/identity/users" +@using Severity = Severity +@using LazyCache +@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs @using CleanArchitecture.Blazor.Domain.Identity @using CleanArchitecture.Blazor.Server.UI.Models.Identity @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Roles.Components @using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Users.Components -@using LazyCache +@using System.Security.Claims @using CleanArchitecture.Blazor.Application.Common.Interfaces.Identity @using CleanArchitecture.Blazor.Application.Common.Interfaces.MultiTenant -@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes -@using CleanArchitecture.Blazor.Infrastructure.Constants.Role -@using CleanArchitecture.Blazor.Application.Features.Identity.DTOs -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Roles @using BlazorDownloadFile -@using System.Security.Claims @using System.ComponentModel @using System.Linq.Expressions -@using Severity = MudBlazor.Severity -@using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers +@using CleanArchitecture.Blazor.Infrastructure.Constants.Role @using System.Reflection +@using CleanArchitecture.Blazor.Infrastructure.Constants.ClaimTypes @attribute [Authorize(Policy = Permissions.Users.View)] @inherits OwningComponentBase @@ -49,48 +47,56 @@
- +
@L["Users"]
-
+
@ConstantString.Refresh - @if (_canCreate) + Size="Size.Small" + Disabled="@_loading" + OnClick="@(OnRefresh)" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnCreate" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canExport) { @ConstantString.Export + StartIcon="@Icons.Material.Filled.Download" + Size="Size.Small" + @bind-Loading="_exporting" LoadingAdornment="Adornment.Start" OnClick="OnExport" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Export + } @if (_canImport) { @@ -105,7 +111,7 @@ for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -121,21 +127,25 @@ @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnCreate" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + }
@@ -149,10 +159,9 @@ } + AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Small"> + - - }
@@ -169,31 +178,30 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } @if (_canManagePermissions) { - @L["Set Permissions"] + @L["Set Permissions"] } @if (_canActive) { @if (context.Item.IsActive) { - OnSetActive(context.Item))>@L["Set Inactive"] + OnSetActive(context.Item))>@L["Set Inactive"] } else { - OnSetActive(context.Item))>@L["Set Active"] + OnSetActive(context.Item))>@L["Set Active"] } - } @if (_canRestPassword) { - OnResetPassword(context.Item))>@L["Reset Password"] + OnResetPassword(context.Item))>@L["Reset Password"] } } @@ -207,7 +215,7 @@ } - +
@context.Item.TenantName @@ -218,25 +226,25 @@ @L["Selected"]: @_selectedItems.Count - +
- - - @if (string.IsNullOrEmpty(context.Item.ProfilePictureDataUrl)) - { - @context.Item.UserName.First() - } - else - { - - } - - -
- @context.Item.UserName - @context.Item.Email -
+ + + @if (string.IsNullOrEmpty(context.Item.ProfilePictureDataUrl)) + { + @context.Item.UserName.First() + } + else + { + + } + + +
+ @context.Item.UserName + @context.Item.Email +
@@ -248,14 +256,14 @@
- + @context.Item.SuperiorName - + - + @if (context.Item.AssignedRoles is not null) { @@ -266,12 +274,11 @@ } - +
@if (context.Item.IsActive) { - @L["Active"] @if (context.Item.LockoutEnd is not null) { @@ -280,8 +287,6 @@
} - - } else { @@ -301,7 +306,7 @@ - + @@ -314,8 +319,7 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; private int _defaultPageSize = 15; private HashSet _selectedItems = new(); @@ -364,6 +368,7 @@ _canExport = (await AuthService.AuthorizeAsync(state.User, Permissions.Users.Export)).Succeeded; _roles = await RoleManager.Roles.Select(x => x.Name).ToListAsync(); } + private bool IsOnline(string username) { return UsersStateContainer.UsersByConnectionId.Any(x => x.Value.Equals(username, StringComparison.OrdinalIgnoreCase)); @@ -375,22 +380,23 @@ { _loading = true; Expression> searchPredicate = x => - x.UserName!.ToLower().Contains(_searchString) || - x.Email!.ToLower().Contains(_searchString) || - x.DisplayName!.ToLower().Contains(_searchString) || - x.PhoneNumber!.ToLower().Contains(_searchString) || - x.TenantName!.ToLower().Contains(_searchString) || - x.Provider!.ToLower().Contains(_searchString); + x.UserName!.ToLower().Contains(_searchString) || + x.Email!.ToLower().Contains(_searchString) || + x.DisplayName!.ToLower().Contains(_searchString) || + x.PhoneNumber!.ToLower().Contains(_searchString) || + x.TenantName!.ToLower().Contains(_searchString) || + x.Provider!.ToLower().Contains(_searchString); var query = UserManager.Users.Where(searchPredicate); if (!string.IsNullOrEmpty(_searchRole)) { query = query.Where(x => x.UserRoles.Any(y => y.Role.Name == _searchRole)); } + var items = await query - .Include(x => x.UserRoles) - .Include(x => x.Superior) - .EfOrderBySortDefinitions(state) - .Skip(state.Page * state.PageSize).Take(state.PageSize).ProjectTo(Mapper.ConfigurationProvider).ToListAsync(); + .Include(x => x.UserRoles) + .Include(x => x.Superior) + .EfOrderBySortDefinitions(state) + .Skip(state.Page * state.PageSize).Take(state.PageSize).ProjectTo(Mapper.ConfigurationProvider).ToListAsync(); var total = await UserManager.Users.CountAsync(searchPredicate); return new GridData { TotalItems = total, Items = items }; } @@ -415,16 +421,18 @@ _searchRole = role; await _table.ReloadServerData(); } + private async Task OnRefresh() { await _table.ReloadServerData(); } + private async Task OnCreate() { var model = new ApplicationUserDto { Provider = "Local", Email = "", UserName = "", AssignedRoles = new[] { RoleName.Basic } }; var parameters = new DialogParameters { - { x=>x.Model,model } + { x => x.Model, model } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show(L["Create a new user"], parameters, options); @@ -432,18 +440,18 @@ if (!result.Canceled) { var applicationUser = new ApplicationUser - { - Provider = model.Provider, - DisplayName = model.DisplayName, - UserName = model.UserName, - TenantId = model.TenantId, - TenantName = model.TenantName, - Email = model.Email, - PhoneNumber = model.PhoneNumber, - SuperiorId = model.SuperiorId, - ProfilePictureDataUrl = model.ProfilePictureDataUrl, - IsActive = model.IsActive, - }; + { + Provider = model.Provider, + DisplayName = model.DisplayName, + UserName = model.UserName, + TenantId = model.TenantId, + TenantName = model.TenantName, + Email = model.Email, + PhoneNumber = model.PhoneNumber, + SuperiorId = model.SuperiorId, + ProfilePictureDataUrl = model.ProfilePictureDataUrl, + IsActive = model.IsActive + }; var password = model.Password; var state = await UserManager.CreateAsync(applicationUser, password!); @@ -457,6 +465,7 @@ { await UserManager.AddToRoleAsync(applicationUser, RoleName.Basic); } + Snackbar.Add($"{ConstantString.CreateSuccess}", Severity.Info); await UserDataProvider.Refresh(); await OnRefresh(); @@ -470,10 +479,9 @@ private async Task OnEdit(ApplicationUserDto item) { - var parameters = new DialogParameters { - { x=>x.Model,item } + { x => x.Model, item } }; var options = new DialogOptions { CloseButton = true, CloseOnEscapeKey = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show(L["Edit the user"], parameters, options); @@ -507,6 +515,7 @@ } } } + Snackbar.Add($"{ConstantString.UpdateSuccess}", Severity.Info); await OnRefresh(); await UserDataProvider.Refresh(); @@ -523,7 +532,7 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent, dto.UserName) } + { x => x.ContentText, string.Format(deleteContent, dto.UserName) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -576,13 +585,14 @@ Snackbar.Add("You cannot delete your own account!", Severity.Error); return; } + _selectedItems.Remove(_selectedItems.First(x => x.Id == currentUserId)); } - string deleteContent = ConstantString.DeleteConfirmation; + var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent, _selectedItems.Count) } + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(L["Delete"], parameters, options); @@ -602,11 +612,11 @@ return; } } + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); await OnRefresh(); await UserDataProvider.Refresh(); } - } private async Task OnSetActive(ApplicationUserDto item) @@ -627,11 +637,10 @@ private async Task OnResetPassword(ApplicationUserDto item) { - var model = new ResetPasswordFormModel { Id = item.Id, DisplayName = item.DisplayName, UserName = item.UserName, ProfilePictureDataUrl = item.ProfilePictureDataUrl }; var parameters = new DialogParameters { - {x=>x.Model, model } + { x => x.Model, model } }; var options = new DialogOptions { CloseOnEscapeKey = true, CloseButton = true, MaxWidth = MaxWidth.ExtraSmall }; var dialog = DialogService.Show(L["Set Password"], parameters, options); @@ -655,10 +664,8 @@ private async Task OnSetPermissions(ApplicationUserDto item) { _showPermissionsDrawer = true; - _permissions = new(); + _permissions = new List(); _permissions = await GetAllPermissions(item); - - } private Task OnOpenChangedHandler(bool state) @@ -685,30 +692,31 @@ var moduleName = string.Empty; var moduleDescription = string.Empty; if (module.GetCustomAttributes(typeof(DisplayNameAttribute), true) - .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) + .FirstOrDefault() is DisplayNameAttribute displayNameAttribute) moduleName = displayNameAttribute.DisplayName; if (module.GetCustomAttributes(typeof(DescriptionAttribute), true) - .FirstOrDefault() is DescriptionAttribute descriptionAttribute) + .FirstOrDefault() is DescriptionAttribute descriptionAttribute) moduleDescription = descriptionAttribute.Description; var fields = module.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy); allPermissions.AddRange(from field in fields - select field.GetValue(null) - into propertyValue - where propertyValue is not null - select propertyValue.ToString() - into claimValue - select new PermissionModel - { - UserId = dto.Id, - ClaimValue = claimValue, - ClaimType = ApplicationClaimTypes.Permission, - Group = moduleName, - Description = moduleDescription, - Assigned = _assignedClaims.Any(x => x.Value == claimValue) - }); + select field.GetValue(null) + into propertyValue + where propertyValue is not null + select propertyValue.ToString() + into claimValue + select new PermissionModel + { + UserId = dto.Id, + ClaimValue = claimValue, + ClaimType = ApplicationClaimTypes.Permission, + Group = moduleName, + Description = moduleDescription, + Assigned = _assignedClaims.Any(x => x.Value == claimValue) + }); } + return allPermissions; } @@ -770,17 +778,17 @@ { await UserManager.RemoveClaimAsync(user, removed); } + Snackbar.Add($"{L["Permission removed successfully!"]}", Severity.Info); } + var key = $"get-claims-by-{user.Id}"; Cache.Remove(key); - } finally { _processing = false; } - } private async Task OnExport() @@ -789,13 +797,13 @@ { _exporting = true; Expression> searchPredicate = x => - (x.UserName!.Contains(_searchString) || - x.Email!.Contains(_searchString) || - x.DisplayName!.Contains(_searchString) || - x.PhoneNumber!.Contains(_searchString) || - x.TenantName!.Contains(_searchString) || - x.Provider!.Contains(_searchString)) && - (_searchRole == null || (_searchRole != null && x.UserRoles.Any(x => x.Role.Name == _searchRole))); + (x.UserName!.Contains(_searchString) || + x.Email!.Contains(_searchString) || + x.DisplayName!.Contains(_searchString) || + x.PhoneNumber!.Contains(_searchString) || + x.TenantName!.Contains(_searchString) || + x.Provider!.Contains(_searchString)) && + (_searchRole == null || (_searchRole != null && x.UserRoles.Any(x => x.Role.Name == _searchRole))); var items = await UserManager.Users.Where(searchPredicate) .Select(x => new ApplicationUserDto { @@ -805,27 +813,26 @@ Email = x.Email!, PhoneNumber = x.PhoneNumber, TenantId = x.TenantId, - TenantName = x.TenantName, + TenantName = x.TenantName }).ToListAsync(); var result = await ExcelService.ExportAsync(items, new Dictionary> { - {L["Id"],item => item.Id}, - {L["User Name"],item => item.UserName}, - {L["Display Name"],item => item.DisplayName}, - {L["Email"],item => item.Email}, - {L["Phone Number"],item => item.PhoneNumber}, - {L["Tenant Id"],item => item.TenantId}, - {L["Tenant Name"],item => item.TenantName}, + { L["Id"], item => item.Id }, + { L["User Name"], item => item.UserName }, + { L["Display Name"], item => item.DisplayName }, + { L["Email"], item => item.Email }, + { L["Phone Number"], item => item.PhoneNumber }, + { L["Tenant Id"], item => item.TenantId }, + { L["Tenant Name"], item => item.TenantName } }, L["Users"]); - var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Users"]}.xlsx", result, contentType: "application/octet-stream"); + var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Users"]}.xlsx", result, "application/octet-stream"); Snackbar.Add($"{ConstantString.ExportSuccess}", Severity.Info); } finally { _exporting = false; } - } private async Task OnImportData(IBrowserFile file) @@ -833,14 +840,14 @@ _uploading = true; var stream = new MemoryStream(); await file.OpenReadStream(GlobalVariable.MaxAllowedSize).CopyToAsync(stream); - var result = await ExcelService.ImportAsync(stream.ToArray(), mappers: new Dictionary> + var result = await ExcelService.ImportAsync(stream.ToArray(), new Dictionary> { { L["User Name"], (row, item) => item.UserName = row[L["User Name"]]?.ToString() }, { L["Display Name"], (row, item) => item.DisplayName = row[L["Display Name"]]?.ToString() }, { L["Email"], (row, item) => item.Email = row[L["Email"]]?.ToString() }, { L["Phone Number"], (row, item) => item.PhoneNumber = row[L["Phone Number"]]?.ToString() }, { L["Tenant Name"], (row, item) => item.TenantName = row[L["Tenant Name"]]?.ToString() }, - { L["Tenant Id"], (row, item) => item.TenantId = row[L["Tenant Id"]]?.ToString() }, + { L["Tenant Id"], (row, item) => item.TenantId = row[L["Tenant Id"]]?.ToString() } }, L["Users"]); if (result.Succeeded) @@ -873,6 +880,8 @@ Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor b/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor index 7cba1ca9b..e92eca9d3 100644 --- a/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor +++ b/src/Server.UI/Pages/Products/Components/AdvancedSearchProducts.razor @@ -1,5 +1,4 @@ @using CleanArchitecture.Blazor.Application.Features.Products.Queries.Pagination - @inject IStringLocalizer L - - - + + + - - + + + @@ -45,10 +46,8 @@ @code { - [EditorRequired][Parameter] - public ProductsWithPaginationQuery TRequest { get; set; } = default!; - [EditorRequired][Parameter] - public EventCallback OnConditionChanged { get; set; } + [EditorRequired] [Parameter] public ProductsWithPaginationQuery TRequest { get; set; } = default!; + [EditorRequired] [Parameter] public EventCallback OnConditionChanged { get; set; } private bool _advancedSearchExpanded; diff --git a/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor b/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor index 37cc8dc3c..f0d95c282 100644 --- a/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor +++ b/src/Server.UI/Pages/Products/Components/ProductFormDialog.razor @@ -1,14 +1,14 @@ -@using Blazor.Server.UI.Services.JsInterop; -@using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit -@using CleanArchitecture.Blazor.Domain.Common.Enums @using ResizeMode = SixLabors.ImageSharp.Processing.ResizeMode -@using Severity = MudBlazor.Severity +@using Severity = Severity @using Size = SixLabors.ImageSharp.Size -@using Color = MudBlazor.Color +@using Color = Color +@using Image = SixLabors.ImageSharp.Image +@using SixLabors.ImageSharp.Processing @using SixLabors.ImageSharp @using SixLabors.ImageSharp.Formats.Png -@using SixLabors.ImageSharp.Processing -@using Image = SixLabors.ImageSharp.Image +@using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit +@using CleanArchitecture.Blazor.Domain.Common.Enums +@using CleanArchitecture.Blazor.Server.UI.Services.JsInterop @inherits MudComponentBase @@ -44,7 +44,7 @@ ShowProgressIndicator="true" @bind-Value="Model.Brand"> - + @@ -65,7 +65,7 @@ ShowProgressIndicator="true" @bind-Value="Model.Unit"> - + @@ -85,14 +85,14 @@
@L["The recommended size for uploading images is 640X320"] -
- @if (Model.Pictures is not null) +
+ @if (Model.Pictures is not null) { foreach (var img in Model.Pictures) {
- +
@@ -110,21 +110,17 @@ @ConstantString.Cancel - @ConstantString.SaveAndNew - @ConstantString.Save - - + @ConstantString.SaveAndNew + @ConstantString.Save + + @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditProductCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditProductCommand Model { get; set; } = default!; - [Parameter] - public Action? Refresh { get; set; } + [Parameter] public Action? Refresh { get; set; } private MudForm? _form; private bool _saving; @@ -139,7 +135,7 @@ { var parameters = new DialogParameters { - { x=>x.ContentText, $"{L["Are you sure you want to erase this image?"]}" } + { x => x.ContentText, $"{L["Are you sure you want to erase this image?"]}" } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show($"{L["Erase imatge"]}", parameters, options); @@ -191,6 +187,7 @@ Snackbar.Add($"{ex.Message}", Severity.Error); } } + Snackbar.Add(L["Upload pictures successfully"], Severity.Info); if (Model.Pictures is null) @@ -262,4 +259,5 @@ { MudDialog.Cancel(); } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Products/Products.razor b/src/Server.UI/Pages/Products/Products.razor index 68b909705..6ec9ac119 100644 --- a/src/Server.UI/Pages/Products/Products.razor +++ b/src/Server.UI/Pages/Products/Products.razor @@ -1,18 +1,16 @@ @page "/pages/products" - +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.Products.DTOs -@using CleanArchitecture.Blazor.Application.Features.Products.Queries @using CleanArchitecture.Blazor.Application.Features.Products.Queries.Export @using CleanArchitecture.Blazor.Application.Features.Products.Queries.Pagination +@using CleanArchitecture.Blazor.Application.Features.Products.Specifications +@using CleanArchitecture.Blazor.Domain.Common.Enums @using BlazorDownloadFile +@using CleanArchitecture.Blazor.Server.UI.Pages.Products.Components @using CleanArchitecture.Blazor.Application.Features.Products.Caching @using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.Products.Commands.Delete @using CleanArchitecture.Blazor.Application.Features.Products.Commands.Import -@using CleanArchitecture.Blazor.Application.Features.Products.Specifications -@using CleanArchitecture.Blazor.Domain.Common.Enums -@using CleanArchitecture.Blazor.Server.UI.Pages.Products.Components -@using Severity = MudBlazor.Severity @attribute [Authorize(Policy = Permissions.Products.View)] @inherits FluxorComponent @@ -20,100 +18,100 @@ @inject IJSRuntime JS @inject IStringLocalizer L @inject IMapper Mapper -@inject IState UserProfileState +@inject IState UserProfileState @inject IMediator Mediator @inject IBlazorDownloadFileService BlazorDownloadFileService @Title + FixedHeader="true" + FixedFooter="true" + Virtualize="true" + @bind-RowsPerPage="_defaultPageSize" + Height="calc(100vh - 370px)" + Loading="@_loading" + SortLabel="@ConstantString.OrderBy" + MultiSelection="true" + @bind-SelectedItems="_selectedItems" + @bind-SelectedItem="_currentDto" + Hover="true" @ref="_table">
- +
@L[_currentDto.GetClassDescription()]
-
+
+ Size="Size.Small" + Disabled="@_loading" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> @ConstantString.Refresh @if (_canCreate) { + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> @ConstantString.New + StartIcon="@Icons.Material.Filled.ContentCopy" + Size="Size.Small" + Disabled="@(_selectedItems.Count != 1)" + OnClick="OnClone" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> @ConstantString.Clone } @if (_canDelete) { + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> @ConstantString.Delete } @if (_canExport) { + Label="@ConstantString.Export" + Disabled="@_loading" + StartIcon="@Icons.Custom.FileFormats.FileExcel" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnExport" + IconColor="Color.Surface"> @ConstantString.Export + Label="@ConstantString.ExportPDF" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.PictureAsPdf" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnExportPDF" + IconColor="Color.Surface"> @ConstantString.ExportPDF } @@ -122,15 +120,15 @@ + Size="Size.Small" + Variant="Variant.Outlined" + Color="Color.Primary" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.Upload" + for="@context"> @if (_uploading) { - + @ConstantString.Uploading } else @@ -146,24 +144,24 @@ @if (_canCreate) { + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + Disabled="@_loading" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> @ConstantString.New } @if (_canDelete) { + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> @ConstantString.Delete } @@ -172,7 +170,7 @@ @if (_canSearch) { + AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Small"> } @@ -186,8 +184,8 @@ @if (_canEdit && _canDelete) { + Dense="true" + EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { @ConstantString.Edit @@ -202,8 +200,8 @@ { + Icon="@Icons.Material.Filled.DoNotTouch" Size="Size.Small" + Color="Color.Surface"> } @@ -219,7 +217,7 @@
@context.Item.Name - @context.Item.Description + @context.Item.Description
@@ -228,7 +226,7 @@ @ConstantString.SelectedTotal: @_selectedItems.Sum(x => x.Price) - + @ConstantString.NoRecords @@ -237,7 +235,7 @@ @ConstantString.Loading - + @@ -255,8 +253,7 @@ @code{ - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string? Title { get; private set; } private HashSet _selectedItems = new(); @@ -347,8 +344,8 @@ var command = new AddEditProductCommand { Pictures = new List() }; var parameters = new DialogParameters { - { x=>x.Refresh , new Action(() => _table.ReloadServerData()) }, - { x=>x.Model, command } + { x => x.Refresh, () => _table.ReloadServerData() }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; var dialog = DialogService.Show @@ -362,19 +359,19 @@ { var copy = _selectedItems.First(); var command = new AddEditProductCommand - { - Brand = copy.Brand, - Description = copy.Description, - Price = copy.Price, - Unit = copy.Unit, - Name = copy.Name, - Pictures = copy.Pictures - }; + { + Brand = copy.Brand, + Description = copy.Description, + Price = copy.Price, + Unit = copy.Unit, + Name = copy.Name, + Pictures = copy.Pictures + }; var parameters = new DialogParameters { - { x=>x.Refresh , new Action(() => _table.ReloadServerData()) }, - { x=>x.Model, command } + { x => x.Refresh, () => _table.ReloadServerData() }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; @@ -391,8 +388,8 @@ var command = Mapper.Map(dto); var parameters = new DialogParameters { - { x=>x.Refresh , new Action(() => _table.ReloadServerData()) }, - { x=>x.Model, command } + { x => x.Refresh, () => _table.ReloadServerData() }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Medium, FullWidth = true }; @@ -409,8 +406,8 @@ var command = new DeleteProductCommand(new[] { dto.Id }); var parameters = new DialogParameters { - { x=>x.Command ,command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmation, dto.Name) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; @@ -428,8 +425,8 @@ var command = new DeleteProductCommand(_selectedItems.Select(x => x.Id).ToArray()); var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(ConstantString.DeleteConfirmWithSelected, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show @@ -447,18 +444,18 @@ { _exporting = true; var request = new ExportProductsQuery - { - Brand = Query.Brand, - Name = Query.Name, - MinPrice = Query.MinPrice, - MaxPrice = Query.MaxPrice, - Unit = Query.Unit, - Keyword = Query.Keyword, - ListView = Query.ListView, - OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), - ExportType = ExportType.Excel - }; + { + Brand = Query.Brand, + Name = Query.Name, + MinPrice = Query.MinPrice, + MaxPrice = Query.MaxPrice, + Unit = Query.Unit, + Keyword = Query.Keyword, + ListView = Query.ListView, + OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), + ExportType = ExportType.Excel + }; var result = await Mediator.Send(request); if (result.Succeeded) { @@ -469,6 +466,7 @@ { Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } + _exporting = false; } @@ -476,18 +474,18 @@ { _pdfExporting = true; var request = new ExportProductsQuery - { - Brand = Query.Brand, - Name = Query.Name, - MinPrice = Query.MinPrice, - MaxPrice = Query.MaxPrice, - Unit = Query.Unit, - Keyword = Query.Keyword, - ListView = Query.ListView, - OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), - ExportType = ExportType.PDF - }; + { + Brand = Query.Brand, + Name = Query.Name, + MinPrice = Query.MinPrice, + MaxPrice = Query.MaxPrice, + Unit = Query.Unit, + Keyword = Query.Keyword, + ListView = Query.ListView, + OrderBy = _table.SortDefinitions.Values.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = _table.SortDefinitions.Values.FirstOrDefault()?.Descending ?? false ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), + ExportType = ExportType.PDF + }; var result = await Mediator.Send(request); if (result.Succeeded) { @@ -498,6 +496,7 @@ { Snackbar.Add($"{result.ErrorMessage}", Severity.Error); } + _pdfExporting = false; } @@ -521,6 +520,8 @@ Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/SystemManagement/AuditTrails.razor b/src/Server.UI/Pages/SystemManagement/AuditTrails.razor index 09d41be30..08b269969 100644 --- a/src/Server.UI/Pages/SystemManagement/AuditTrails.razor +++ b/src/Server.UI/Pages/SystemManagement/AuditTrails.razor @@ -1,15 +1,15 @@ @page "/system/audittrails" + + @using CleanArchitecture.Blazor.Application.Features.AuditTrails.DTOs @using CleanArchitecture.Blazor.Application.Features.AuditTrails.Queries.PaginationQuery +@using CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications @using CleanArchitecture.Blazor.Application.Features.AuditTrails.Caching -@using CleanArchitecture.Blazor.Application.Features.AuditTrails.Specifications; - - @inherits FluxorComponent @attribute [Authorize(Policy = Permissions.AuditTrails.View)] @inject IStringLocalizer L -@inject IState UserProfileState +@inject IState UserProfileState @inject IMediator Mediator @L[Title] @@ -26,78 +26,83 @@
- +
@L[Title]
-
+
@ConstantString.Refresh -
- - - - - - - -
-
- - - - - -
- @context.Item.Owner?.UserName - @context.Item.UserId -
-
-
- - - - - - - - -
- - - - - @context.Item.TableName - - - - - - - @L["Field Name"] - @L[_currentDto.GetMemberDescription(x=>x.OldValues)] - @L[_currentDto.GetMemberDescription(x=>x.NewValues)] - - - - @foreach (var field in ((context.Item.NewValues?.Any() ?? false) ? context.Item.NewValues : (context.Item.OldValues?.Any() ?? false) ? context.Item.OldValues : new Dictionary())) - { - - @field.Key - @(context.Item.OldValues?.ContainsKey(field.Key) ?? false ? context.Item.OldValues[field.Key] : string.Empty) - @(context.Item.NewValues?.ContainsKey(field.Key) ?? false ? context.Item.NewValues[field.Key] : string.Empty) - - } + Size="Size.Small" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 5px;"> + @ConstantString.Refresh + +
+ + + + + + + + +
+
+ + + + + +
+ @context.Item.Owner?.UserName + @context.Item.UserId +
+
+
+ + + + + + + + +
+ + + + + + @context.Item.TableName + + + + + + + + @L["Field Name"] + @L[_currentDto.GetMemberDescription(x => x.OldValues)] + @L[_currentDto.GetMemberDescription(x => x.NewValues)] + + + + @foreach (var field in context.Item.NewValues?.Any() ?? false ? context.Item.NewValues : context.Item.OldValues?.Any() ?? false ? context.Item.OldValues : new Dictionary()) + { + + @field.Key + @(context.Item.OldValues?.ContainsKey(field.Key) ?? false ? context.Item.OldValues[field.Key] : string.Empty) + @(context.Item.NewValues?.ContainsKey(field.Key) ?? false ? context.Item.NewValues[field.Key] : string.Empty) + + } @@ -110,7 +115,7 @@ @ConstantString.Loading - + @@ -122,8 +127,7 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string Title { get; private set; } = "Audit Trails"; private MudDataGrid _table = null!; @@ -132,7 +136,7 @@ private readonly AuditTrailDto _currentDto = new(); - private AuditTrailsWithPaginationQuery Query { get; set; } = new(); + private AuditTrailsWithPaginationQuery Query { get; } = new(); private UserProfile UserProfile => UserProfileState.Value.UserProfile; protected override async Task OnInitializedAsync() @@ -153,7 +157,7 @@ Query.PageSize = state.PageSize; var result = await Mediator.Send(Query).ConfigureAwait(false); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { diff --git a/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor b/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor index 28854e83e..cddac4f84 100644 --- a/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor +++ b/src/Server.UI/Pages/SystemManagement/Components/CreatePicklistDialog.razor @@ -1,4 +1,5 @@ @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.AddEdit +@using Severity = MudBlazor.Severity @inherits MudComponentBase @inject IValidationService Validator @@ -10,26 +11,26 @@ - - - - @@ -41,22 +42,19 @@ @ConstantString.Cancel - @ConstantString.Save + @ConstantString.Save @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditKeyValueCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditKeyValueCommand Model { get; set; } = default!; - private MudForm? _form = default!; - private bool _saving = false; + private MudForm? _form; + private bool _saving; private async Task Submit() { @@ -71,11 +69,11 @@ if (result.Succeeded) { MudDialog.Close(DialogResult.Ok(true)); - Snackbar.Add(ConstantString.SaveSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.SaveSuccess, Severity.Info); } else { - Snackbar.Add(result.ErrorMessage, MudBlazor.Severity.Error); + Snackbar.Add(result.ErrorMessage, Severity.Error); } } finally @@ -84,5 +82,8 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } } \ No newline at end of file diff --git a/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor b/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor index 1e30e8668..b8f9c5ef6 100644 --- a/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor +++ b/src/Server.UI/Pages/SystemManagement/Components/LogsLineCharts.razor @@ -1,9 +1,6 @@ @using CleanArchitecture.Blazor.Application.Features.Loggers.DTOs -@using ApexCharts @using CleanArchitecture.Blazor.Application.Features.Loggers.Queries.ChatData -@using CleanArchitecture.Blazor.Server.UI.Services -@using CleanArchitecture.Blazor.Server.UI.Services.Layout - +@using ApexCharts @implements IDisposable @inject LayoutService LayoutService @@ -12,25 +9,24 @@
+ SeriesType="SeriesType.Bar"/>
@code - { +{ public List Data { get; set; } = new(); - [Inject] - private IMediator Mediator { get; set; } = default!; + [Inject] private IMediator Mediator { get; set; } = default!; private ApexChart Chart { get; set; } = null!; private ApexChartOptions Options { get; set; } = new(); @@ -39,28 +35,27 @@ protected override async Task OnInitializedAsync() { var isDarkMode = LayoutService.IsDarkMode; - var colors = isDarkMode ? new List() { "#0277BD", "#039BE5" } : new List() { "#1976D2", "#90CAF9" }; + var colors = isDarkMode ? new List { "#0277BD", "#039BE5" } : new List { "#1976D2", "#90CAF9" }; _backgroundColor = isDarkMode ? "background:rgb(66, 66, 66)" : "background:#fff"; - Options.Theme = new ApexCharts.Theme() - { - Mode = isDarkMode ? Mode.Dark : Mode.Light, - }; + Options.Theme = new Theme + { + Mode = isDarkMode ? Mode.Dark : Mode.Light + }; Options.Fill = new Fill + { + Type = new List { FillType.Gradient }, + Gradient = new FillGradient { - Type = new List { FillType.Gradient }, - Gradient = new FillGradient - { - Type = GradientType.Vertical, - ShadeIntensity = 1, - OpacityFrom = 1, - OpacityTo = 0.7, - GradientToColors = colors, - Stops = new List() { 0, 100 } - }, - - }; + Type = GradientType.Vertical, + ShadeIntensity = 1, + OpacityFrom = 1, + OpacityTo = 0.7, + GradientToColors = colors, + Stops = new List { 0, 100 } + } + }; Options.Yaxis = new List(); Options.Yaxis.Add(new YAxis { @@ -71,30 +66,30 @@ } ); Options.Xaxis = new XAxis + { + Labels = new XAxisLabels { - Labels = new XAxisLabels - { - Formatter = @"function (value) { + Formatter = @"function (value) { if (value === undefined) {return '';} return '';}" - } - }; + } + }; Options.DataLabels = new DataLabels - { - Formatter = @"function(value, opts) { + { + Formatter = @"function(value, opts) { return Number(value).toLocaleString();}" - }; + }; - Options.Tooltip = new ApexCharts.Tooltip + Options.Tooltip = new Tooltip + { + X = new TooltipX { - X = new TooltipX - { - Formatter = @"function(value, opts) { + Formatter = @"function(value, opts) { if (value === undefined) {return '';} return value}" - } - }; + } + }; LayoutService.MajorUpdateOccured += LayoutServiceOnMajorUpdateOccured; @@ -104,7 +99,7 @@ private async void LayoutServiceOnMajorUpdateOccured(object? sender, EventArgs e) { var isDarkMode = LayoutService.IsDarkMode; - var colors = isDarkMode ? new List() { "#0277BD", "#039BE5" } : new List() { "#1976D2", "#90CAF9" }; + var colors = isDarkMode ? new List { "#0277BD", "#039BE5" } : new List { "#1976D2", "#90CAF9" }; _backgroundColor = isDarkMode ? "background:rgb(66, 66, 66)" : "background:#fff"; Options.Theme.Mode = isDarkMode ? Mode.Dark : Mode.Light; Options.Fill.Gradient.GradientToColors = colors; @@ -113,7 +108,6 @@ StateHasChanged(); } - public void Dispose() { diff --git a/src/Server.UI/Pages/SystemManagement/Dictionaries.razor b/src/Server.UI/Pages/SystemManagement/Dictionaries.razor index 552c9ffd5..9d2552321 100644 --- a/src/Server.UI/Pages/SystemManagement/Dictionaries.razor +++ b/src/Server.UI/Pages/SystemManagement/Dictionaries.razor @@ -3,11 +3,11 @@ @using CleanArchitecture.Blazor.Application.Features.KeyValues.Queries.Export @using CleanArchitecture.Blazor.Application.Features.KeyValues.Queries.PaginationQuery @using BlazorDownloadFile -@using CleanArchitecture.Blazor.Infrastructure.Constants.Permission @using CleanArchitecture.Blazor.Application.Features.KeyValues.Caching @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.Delete @using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.Import +@using Severity = MudBlazor.Severity @using CleanArchitecture.Blazor.Server.UI.Pages.SystemManagement.Components @attribute [Authorize(Policy = Permissions.Dictionaries.View)] @@ -36,54 +36,60 @@
- +
@Title
-
+
@ConstantString.Refresh - @if (_canCreate) + Size="Size.Small" + OnClick="OnRefresh" + Disabled="@_loading" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Size="Size.Small" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + OnClick="OnDeleteChecked" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.Delete + } @if (_canImport) { - @if (_uploading) + StartIcon="@Icons.Material.Filled.Upload" + Size="Size.Small" + Style="margin-right:4px; margin-bottom:4px" + for="importdataInput" + HtmlTag="label" + IconColor="Color.Surface"> + @if (_uploading) { - + @ConstantString.Uploading } else @@ -92,19 +98,19 @@ } -
@if (_canSearch) { - - + + + } @@ -149,26 +160,26 @@
- + - - - + + + - + - + - + @@ -179,18 +190,17 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; private MudDataGrid _table = null!; public string Title { get; set; } = "Picklist"; private IList _keyValueList = new List(); - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private KeyValueDto SelectedItem { get; set; } = new(); private KeyValueDto ElementBeforeEdit { get; set; } = new(); private string _searchString = string.Empty; - private Picklist? _searchPicklist = null; + private Picklist? _searchPicklist; private int _defaultPageSize = 15; private KeyValuesWithPaginationQuery Query { get; set; } = new(); @@ -215,7 +225,6 @@ _canDelete = (await AuthService.AuthorizeAsync(state.User, Permissions.Dictionaries.Delete)).Succeeded; _canImport = (await AuthService.AuthorizeAsync(state.User, Permissions.Dictionaries.Import)).Succeeded; _canExport = (await AuthService.AuthorizeAsync(state.User, Permissions.Dictionaries.Export)).Succeeded; - } private async Task> ServerReload(GridState state) @@ -223,17 +232,17 @@ try { _loading = true; - var request = new KeyValuesWithPaginationQuery() - { - Keyword = _searchString, - Picklist = _searchPicklist, - OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id", - SortDirection = state.SortDefinitions.FirstOrDefault()?.Descending ?? true ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), - PageNumber = state.Page + 1, - PageSize = state.PageSize - }; + var request = new KeyValuesWithPaginationQuery + { + Keyword = _searchString, + Picklist = _searchPicklist, + OrderBy = state.SortDefinitions.FirstOrDefault()?.SortBy ?? "Id", + SortDirection = state.SortDefinitions.FirstOrDefault()?.Descending ?? true ? SortDirection.Descending.ToString() : SortDirection.Ascending.ToString(), + PageNumber = state.Page + 1, + PageSize = state.PageSize + }; var result = await Mediator.Send(request).ConfigureAwait(false); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { @@ -263,25 +272,26 @@ private void CommittedItemChanges(KeyValueDto item) { InvokeAsync(async () => - { - var command = Mapper.Map(item); - var result = await Mediator.Send(command); - if (!result.Succeeded) - { - Snackbar.Add($"{result.ErrorMessage}", MudBlazor.Severity.Error); - } - StateHasChanged(); - }); + { + var command = Mapper.Map(item); + var result = await Mediator.Send(command); + if (!result.Succeeded) + { + Snackbar.Add($"{result.ErrorMessage}", Severity.Error); + } + + StateHasChanged(); + }); } private async Task DeleteItem(KeyValueDto item) { var deleteContent = ConstantString.DeleteConfirmation; - var command = new DeleteKeyValueCommand(new int[] { item.Id }); + var command = new DeleteKeyValueCommand(new[] { item.Id }); var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(deleteContent,item.Name) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(deleteContent, item.Name) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -291,12 +301,13 @@ await _table.ReloadServerData(); } } + private async Task OnDeleteChecked() { var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.ContentText, string.Format(deleteContent,_selectedItems.Count) } + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(ConstantString.DeleteConfirmationTitle, parameters, options); @@ -306,43 +317,42 @@ var command = new DeleteKeyValueCommand(_selectedItems.Select(x => x.Id).ToArray()); var result = await Mediator.Send(command); await _table.ReloadServerData(); - Snackbar.Add($"{ConstantString.DeleteSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.DeleteSuccess}", Severity.Info); } } + private async Task OnCreate() { - var command = new AddEditKeyValueCommand() - { - Name = SelectedItem.Name, - Description = SelectedItem?.Description, - }; + var command = new AddEditKeyValueCommand + { + Name = SelectedItem.Name, + Description = SelectedItem?.Description + }; var parameters = new DialogParameters { - { x=>x.Model,command }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new picklist"], parameters, options); + (L["Create a new picklist"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { await _table.ReloadServerData(); } - } private async Task OnExport() { _downloading = true; - var request = new ExportKeyValuesQuery() - { - Keyword = _searchString, - }; + var request = new ExportKeyValuesQuery + { + Keyword = _searchString + }; var result = await Mediator.Send(request); - var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Picklist"]}.xlsx", result, contentType: "application/octet-stream"); - Snackbar.Add($"{ConstantString.ExportSuccess}", MudBlazor.Severity.Info); + var downloadResult = await BlazorDownloadFileService.DownloadFile($"{L["Picklist"]}.xlsx", result, "application/octet-stream"); + Snackbar.Add($"{ConstantString.ExportSuccess}", Severity.Info); _downloading = false; - } private async Task OnImportData(InputFileChangeEventArgs e) @@ -355,15 +365,17 @@ if (result.Succeeded) { await OnRefresh(); - Snackbar.Add($"{ConstantString.ImportSuccess}", MudBlazor.Severity.Info); + Snackbar.Add($"{ConstantString.ImportSuccess}", Severity.Info); } else { foreach (var msg in result.Errors) { - Snackbar.Add($"{msg}", MudBlazor.Severity.Error); + Snackbar.Add($"{msg}", Severity.Error); } } + _uploading = false; } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/SystemManagement/Logs.razor b/src/Server.UI/Pages/SystemManagement/Logs.razor index e6766b0c7..e0e53ffc9 100644 --- a/src/Server.UI/Pages/SystemManagement/Logs.razor +++ b/src/Server.UI/Pages/SystemManagement/Logs.razor @@ -1,13 +1,10 @@ @page "/system/logs" -@using CleanArchitecture.Blazor.Server.UI.Pages.SystemManagement.Components +@using Severity = Severity @using CleanArchitecture.Blazor.Application.Features.Loggers.DTOs -@using CleanArchitecture.Blazor.Application.Features.Loggers.Queries.ChatData -@using CleanArchitecture.Blazor.Infrastructure.Constants.User -@using CleanArchitecture.Blazor.Application.Features.Loggers.Commands.Clear @using CleanArchitecture.Blazor.Application.Features.Loggers.Queries.PaginationQuery -@using CleanArchitecture.Blazor.Application.Features.Loggers.Specifications; -@using FluentEmail.Core -@using Severity = MudBlazor.Severity +@using CleanArchitecture.Blazor.Application.Features.Loggers.Specifications +@using CleanArchitecture.Blazor.Server.UI.Pages.SystemManagement.Components +@using CleanArchitecture.Blazor.Application.Features.Loggers.Commands.Clear @attribute [Authorize(Policy = Permissions.Logs.View)] @inject IStringLocalizer L @@ -16,15 +13,15 @@ + ServerData="@(ServerReload)" + FixedHeader="true" + FixedFooter="false" + Virtualize="true" + RowsPerPage="@_defaultPageSize" + Height="calc(100vh - 360px)" + Style="min-height:700px" + Loading="@_loading" + Hover="true" @ref="_table">
@@ -40,21 +37,21 @@
+ Size="Size.Small" + Disabled="@_loading" + OnClick="@(OnRefresh)" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 5px;"> @ConstantString.Refresh @if (_canPurge) { + Size="Size.Small" + Disabled="@(_loading || _clearing)" + OnClick="@(OnPurge)" + StartIcon="@Icons.Material.Filled.ClearAll" IconColor="Color.Surface" Color="Color.Secondary" + Style="margin-right: 5px;"> @if (_clearing) { @@ -71,7 +68,7 @@ + AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium"> @@ -147,25 +144,23 @@ - + -@code - { - [CascadingParameter] - private Task AuthState { get; set; } = default!; +@code +{ + [CascadingParameter] private Task AuthState { get; set; } = default!; - [Inject] - private IMediator Mediator { get; set; } = default!; + [Inject] private IMediator Mediator { get; set; } = default!; private string Title { get; set; } = "Logs"; private string _searchString = string.Empty; private MudDataGrid _table = default!; private readonly LogDto _currentDto = new(); - private int _defaultPageSize = 15; + private readonly int _defaultPageSize = 15; private bool _loading; @@ -180,9 +175,7 @@ var state = await AuthState; _canPurge = (await AuthService.AuthorizeAsync(state.User, Permissions.Logs.Purge)).Succeeded; } - - private async Task> ServerReload(GridState state) { @@ -231,7 +224,7 @@ { var parameters = new DialogParameters { - { x=>x.ContentText, $"{L["Are you sure you want to erase all the logs?"]}" } + { x => x.ContentText, $"{L["Are you sure you want to erase all the logs?"]}" } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show diff --git a/src/Server.UI/Pages/Tenants/TenantFormDialog.razor b/src/Server.UI/Pages/Tenants/TenantFormDialog.razor index 59b3cd322..3ac3546b6 100644 --- a/src/Server.UI/Pages/Tenants/TenantFormDialog.razor +++ b/src/Server.UI/Pages/Tenants/TenantFormDialog.razor @@ -1,5 +1,5 @@ @using CleanArchitecture.Blazor.Application.Features.Tenants.Commands.AddEdit - +@using Severity = MudBlazor.Severity @inherits MudComponentBase @inject IValidationService Validator @@ -11,7 +11,7 @@ - - - @@ -36,20 +36,17 @@ @ConstantString.Cancel - @ConstantString.Save + @ConstantString.Save @code { - [CascadingParameter] - private MudDialogInstance MudDialog { get; set; } = default!; + [CascadingParameter] private MudDialogInstance MudDialog { get; set; } = default!; - [EditorRequired] - [Parameter] - public AddEditTenantCommand Model { get; set; } = default!; + [EditorRequired] [Parameter] public AddEditTenantCommand Model { get; set; } = default!; - private MudForm? _form = default!; - private bool _saving = false; + private MudForm? _form; + private bool _saving; private async Task Submit() { @@ -65,11 +62,11 @@ if (result.Succeeded) { MudDialog.Close(DialogResult.Ok(true)); - Snackbar.Add(ConstantString.SaveSuccess, MudBlazor.Severity.Info); + Snackbar.Add(ConstantString.SaveSuccess, Severity.Info); } else { - Snackbar.Add(result.ErrorMessage, MudBlazor.Severity.Error); + Snackbar.Add(result.ErrorMessage, Severity.Error); } } finally @@ -78,5 +75,9 @@ } } - private void Cancel() => MudDialog.Cancel(); + private void Cancel() + { + MudDialog.Cancel(); + } + } \ No newline at end of file diff --git a/src/Server.UI/Pages/Tenants/Tenants.razor b/src/Server.UI/Pages/Tenants/Tenants.razor index 6d4c78df3..40c52a19c 100644 --- a/src/Server.UI/Pages/Tenants/Tenants.razor +++ b/src/Server.UI/Pages/Tenants/Tenants.razor @@ -4,7 +4,6 @@ @using CleanArchitecture.Blazor.Application.Features.Tenants.Caching @using CleanArchitecture.Blazor.Application.Features.Tenants.Commands.AddEdit @using CleanArchitecture.Blazor.Application.Features.Tenants.Commands.Delete -@using CleanArchitecture.Blazor.Infrastructure.Constants.Permission @attribute [Authorize(Policy = Permissions.Tenants.View)] @@ -28,46 +27,52 @@
- +
@Title
-
+
@ConstantString.Refresh - @if (_canCreate) + Size="Size.Small" + Disabled="@_loading" + OnClick="@(() => OnRefresh())" + StartIcon="@Icons.Material.Filled.Refresh" IconColor="Color.Surface" Color="Color.Primary" + Style="margin-right: 4px; margin-bottom:4px"> + @ConstantString.Refresh + + @if (_canCreate) { @ConstantString.New + StartIcon="@Icons.Material.Filled.Add" + Disabled="@_loading" + Size="Size.Small" + OnClick="OnCreate" + Style="margin-right: 4px; margin-bottom:4px" + IconColor="Color.Surface"> + @ConstantString.New + } @if (_canDelete) { @ConstantString.Delete + StartIcon="@Icons.Material.Filled.Delete" + Disabled="@(!(_selectedItems.Count > 0))" + Size="Size.Small" + Style="margin-right: 4px; margin-bottom:4px" + OnClick="OnDeleteChecked" + IconColor="Color.Surface"> + @ConstantString.Delete + } - @ConstantString.Refresh + @ConstantString.Refresh @if (_canCreate) { @ConstantString.New @@ -82,15 +87,16 @@
@if (_canSearch) { - + + }
- + @if (_canEdit || _canDelete) @@ -100,11 +106,11 @@ EndIcon="@Icons.Material.Filled.KeyboardArrowDown" IconColor="Color.Info" AnchorOrigin="Origin.CenterLeft"> @if (_canEdit) { - @ConstantString.Edit + @ConstantString.Edit } @if (_canDelete) { - @ConstantString.Delete + @ConstantString.Delete } } @@ -118,12 +124,12 @@ } - + - @L["Selected"]: @(this._selectedItems.Count) + @L["Selected"]: @_selectedItems.Count - +
@context.Item.Name @@ -135,7 +141,7 @@ - + @@ -147,12 +153,11 @@ @code { - [CascadingParameter] - private Task AuthState { get; set; } = default!; + [CascadingParameter] private Task AuthState { get; set; } = default!; public string? Title { get; private set; } private int _defaultPageSize = 15; - private HashSet _selectedItems = new HashSet(); + private HashSet _selectedItems = new(); private MudDataGrid _table = default!; private TenantDto _currentDto = new(); private string _searchString = string.Empty; @@ -162,7 +167,7 @@ private bool _canEdit; private bool _canDelete; - private TenantsWithPaginationQuery Query { get; set; } = new(); + private TenantsWithPaginationQuery Query { get; } = new(); protected override async Task OnInitializedAsync() { @@ -185,7 +190,7 @@ Query.PageNumber = state.Page + 1; Query.PageSize = state.PageSize; var result = await Mediator.Send(Query); - return new GridData() { TotalItems = result.TotalItems, Items = result.Items }; + return new GridData { TotalItems = result.TotalItems, Items = result.Items }; } finally { @@ -195,7 +200,7 @@ private async Task OnSearch(string text) { - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = text; await _table.ReloadServerData(); } @@ -203,7 +208,7 @@ private async Task OnRefresh() { TenantCacheKey.Refresh(); - _selectedItems = new(); + _selectedItems = new HashSet(); _searchString = string.Empty; await _table.ReloadServerData(); } @@ -213,11 +218,11 @@ var command = new AddEditTenantCommand(); var parameters = new DialogParameters { - { x=>x.Model,command }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Create a new Tenant"], parameters, options); + (L["Create a new Tenant"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -230,11 +235,11 @@ var command = Mapper.Map(dto); var parameters = new DialogParameters { - { x=>x.Model,command }, + { x => x.Model, command } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true }; var dialog = DialogService.Show - (L["Edit the Tenant"], parameters, options); + (L["Edit the Tenant"], parameters, options); var state = await dialog.Result; if (!state.Canceled) { @@ -245,11 +250,11 @@ private async Task OnDelete(TenantDto dto) { var deleteContent = ConstantString.DeleteConfirmationWithId; - var command = new DeleteTenantCommand(new string[] { dto.Id }); + var command = new DeleteTenantCommand(new[] { dto.Id }); var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(deleteContent, dto.Id) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(deleteContent, dto.Id) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.Small, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(L["Delete the Tenant"], parameters, options); @@ -266,8 +271,8 @@ var deleteContent = ConstantString.DeleteConfirmation; var parameters = new DialogParameters { - { x=>x.Command, command }, - { x=>x.ContentText, string.Format(deleteContent,_selectedItems.Count) } + { x => x.Command, command }, + { x => x.ContentText, string.Format(deleteContent, _selectedItems.Count) } }; var options = new DialogOptions { CloseButton = true, MaxWidth = MaxWidth.ExtraSmall, FullWidth = true, DisableBackdropClick = true }; var dialog = DialogService.Show(L["Delete Selected Tenants"], parameters, options); diff --git a/src/Server.UI/Program.cs b/src/Server.UI/Program.cs index 6ea7a6b72..0f64be110 100644 --- a/src/Server.UI/Program.cs +++ b/src/Server.UI/Program.cs @@ -21,7 +21,6 @@ app.ConfigureServer(builder.Configuration); if (app.Environment.IsDevelopment()) -{ // Initialise and seed database using (var scope = app.Services.CreateScope()) { @@ -30,10 +29,7 @@ await initializer.SeedAsync(); var notificationService = scope.ServiceProvider.GetService(); if (notificationService is InMemoryNotificationService inMemoryNotificationService) - { inMemoryNotificationService.Preload(); - } } -} await app.RunAsync(); \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx index 734036577..898988b2e 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ar-iq.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + اليابانية - + الإنكليزية - + الفرنسية - + الألمانية - + خميرية - + الروسية - + الصينية المبسطة - + الإسبانية \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx index 5dfb9b5df..24d3e546e 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ca-ES.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Inglés - + Japonés - + Francés - + Alemany - + Jemer - + Rús - + Chinés simplificat - + Espanyol \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx index 38983d297..455b04a20 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.de-DE.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Englisch - + Japanisch - + Französisch - + Deutsch - + Khmer - + Russisch - + Vereinfachtes Chinesisch - + Spanisch \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx index 606d3f76f..b436e74c6 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.en.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + English - + French - + German - + Japanese - + Khmer - + Russian - + Simplified Chinese - + Spanish \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx index 611e8b831..f291a5b03 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.es-ES.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Inglés - + Japonés - + Francés - + Alemán - + Jemer - + Ruso - + Chino simplificado - + Español \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx index cfe4f33ae..f8a26b81e 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.fr-FR.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Anglais - + Japonais - + Français - + Allemand - + Khmer - + Russe - + Chinois simplifié - + Espagnol \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx index 906c21461..d56cf8dd9 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ja-JP.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 英語 - + 日本語 - + フランス語 - + ドイツ語 - + クメール語 - + ロシア語 - + 中国語(簡体字 - + スペイン語 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx index 33d7ecd71..8b282bc42 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.km-KH.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 영어 - + 일본어 - + 프랑스 국민 - + 독일 사람 - + 크메르어 - + 러시아인 - + 중국어 간체 - + 스페인의 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx index 5408b29c0..a8176a865 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Japanese - + English - + French - + German - + Khmer - + Russian - + Simplified Chinese - + Spanish \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx index 20be99b0c..8e7e717a9 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.ru.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Английский - + Французский - + Немецкий - + Японский - + Кхмерский - + Русский - + Упрощенный китайский - + Испанский \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx b/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx index 0b91f8efe..044daf496 100644 --- a/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx +++ b/src/Server.UI/Resources/Components/Localization/LanguageSelector.zh-CN.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 英語 - + 日语 - + 法语 - + 德语 - + 韩语 - + 俄语 - + 简体中文 - + 西班牙语 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx index e1002440e..92382e176 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ar-IQ.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تحليلات - + تطبيق - + مسارات التدقيق - + إذن - + المصرفيه - + لوحة تحكم بلازور - + حجز - + القواميس - + التجارة الإلكترونية - + وطن - + وظائف - + سجل - + إدارة - + قائمة الانتقاء - + منتجات - + ملف تعريف - + ادوار - + نظام - + المستعملون - + الزبائن - + الوثائق - + متعدد المستأجرين \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx index 3e92d40b1..d88074038 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ca-ES.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Anàlisi - + Aplicació - + Registres d'auditoria - + Autorizació - + Banca - + Taulell de control de Blazor - + Reservar - + Clients - + Diccionaris - + Documents - + Comerç electrònic - + Inici - + Treballs - + Registre - + GESTIÓ - + Multi-arrendatari - + Llista de selecció - + Productes - + Perfil - + Rols - + Sistema - + Usuaris \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx index 1c77ae16f..e56954ae6 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.de-DE.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytik - + Anwendung - + Audit-Pfade - + Autorisierung - + Bankwesen - + Blazor Dashboard - + Buchung - + Kunden - + Wörterbücher - + Dokumente - + E-Commerce - + Startseite - + Stellenangebote - + Anmelden - + VERWALTUNG - + Mehrmandant - + Auswahlliste - + Produkte - + Steckbrief - + Rollen - + System - + Benutzer \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx index 36caa7241..4b0c7eeef 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.en.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytics - + Application - + Audit Trails - + Authorization - + Banking - + Blazor Dashboard - + Booking - + Customers - + Dictionaries - + Documents - + E-Commerce - + Home - + Jobs - + Log - + MANAGEMENT - + Multi-Tenant - + Picklist - + Products - + Profile - + Roles - + System - + Users \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx index be7dac24a..b0d18702e 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.es-ES.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Análisis - + Aplicación - + Registros de auditoría - + Autorización - + Banca - + Panel de control de Blazor - + Reservar - + Clientes - + Diccionarios - + Documentos - + Comercio electrónico - + Inicio - + Puestos de trabajo - + Registro - + GESTIÓN - + Multi-arrendatario - + Lista de selección - + Productos - + Perfil - + Roles - + Sistema - + Usuarios \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx index 96231089f..8f5a48f99 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.fr-FR.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytique - + Application - + Pistes d'audit - + Autorisation - + Banque - + Tableau de bord Blazor - + Réservation - + Clients - + Dictionnaires - + Documents - + Commerce électronique - + Accueil - + Emplois - + Connectez-vous à - + GESTION - + Multi-locataire - + Liste de sélection - + Produits - + Profil - + Rôles - + Système - + Utilisateurs \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx index b928a5f70..756aa41e6 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ja-JP.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + アナリティクス - + アプリケーション - + 監査証跡 - + 認証方法 - + バンキング - + Blazorダッシュボード - + 予約 - + お客様 - + ディクショナリー - + ドキュメント - + Eコマース - + ホーム - + 仕事内容 - + ログ - + 管理 - + マルチテナント - + ピックリスト - + 製品情報 - + プロフィール - + 役割 - + システム - + ユーザー名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx index afb371fc5..a14e94396 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.km-KH.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 해석학 - + 신청 - + 감사 추적 - + 권한 부여 - + 은행업 - + 블레이저 대시보드 - + 예약 - + 고객 - + 사전 - + 서류 - + 전자상거래 - + - + 채용정보 - + 통나무 - + 관리 - + 멀티 테넌트 - + 선택 목록 - + 제품 - + 프로필 - + 역할 - + 체계 - + 사용자 \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.resx index 3d6bb3319..913bda272 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.resx @@ -1,186 +1,191 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Analytics - + Application - + Audit Trails - + Authorization - + Banking - + Blazor Dashboard - + Booking - + Dictionaries - + E-Commerce - + Home - + Jobs - + Log - + MANAGEMENT - + Picklist - + Products - + Profile - + Roles - + System - + Users - + Customers - + Documents - + Multi-Tenant \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx index a644bcacf..4dfd6497a 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.ru.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Аналитика - + Приложение - + Следы аудита - + Авторизация - + Банковское дело - + Приборная панель Blazor - + Бронирование - + Клиенты - + Словари - + Документы - + Электронная коммерция - + Главная - + Работа - + Войти - + УПРАВЛЕНИЕ - + Многопользовательский - + Пиклист - + Продукты - + Профиль - + Роли - + Система - + Пользователи \ No newline at end of file diff --git a/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx b/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx index fa80a5d38..f62670122 100644 --- a/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx +++ b/src/Server.UI/Resources/Components/Shared/SideMenu.zh-CN.resx @@ -1,186 +1,191 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 分析决策 - + 应用程序 - + 安全审计 - + 授权 - + 金融 - + Blazor看板 - + 预定 - + 客户信息 - + 参数选用表 - + 文档 - + 电子商务 - + 首页 - + 任务 - + 日志 - + 系统管理 - + 多租户 - + 参数选用表 - + 产品库 - + 简档 - + 角色 - + 系统 - + 系统账号 \ No newline at end of file diff --git a/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml b/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml index 0cf28253e..bee7ca081 100644 --- a/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml +++ b/src/Server.UI/Resources/EmailTemplates/_recoverypassword.cshtml @@ -1,7 +1,9 @@ -

@Model.AppName received a request to use email as a recovery email for the account @Model.Email.

-

Use this token string to finish resting password:

-
-

@Model.Token

-
-

This token string will expire in 1 hours.

-

If you don't recognize @Model.Email, you can safely ignore this email.

\ No newline at end of file +

@Model.AppName received a request to use email as a recovery email for the account @Model.Email.

+

Use this token string to finish resting password:

+
+

+ @Model.Token +

+
+

This token string will expire in 1 hours.

+

If you don't recognize @Model.Email, you can safely ignore this email.

\ No newline at end of file diff --git a/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml b/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml index 21a21e54b..22b9f19fc 100644 --- a/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml +++ b/src/Server.UI/Resources/EmailTemplates/_welcome.cshtml @@ -1,7 +1,7 @@ -

Hi @Model.UserName,

-

Thank you for signing up for @Model.AppName. We are here to help you get the most out of your trial to show how you and your team can develop smarter and faster.

-
-

Log in and pick one of the walk-throughs to learn how.

-
-

if you have any question at any time, give us a call at 0800(Freephone). We're here to support you.

-

Welcome to @Model.AppName.

\ No newline at end of file +

Hi @Model.UserName,

+

Thank you for signing up for @Model.AppName. We are here to help you get the most out of your trial to show how you and your team can develop smarter and faster.

+
+

Log in and pick one of the walk-throughs to learn how.

+
+

if you have any question at any time, give us a call at 0800(Freephone). We're here to support you.

+

Welcome to @Model.AppName.

\ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx index 5f2b09ac6..3478df7a8 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ar-IQ.resx @@ -1,163 +1,170 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + البريد الالكترونى - + أدخل عنوان البريد الإلكتروني المرتبط بحسابك وستتلقى رسالة بريد إلكتروني تحتوي على رابط لإعادة تعيين كلمة المرور الخاصة بك. - + أدخل سلسلة الرمز المميز من البريد الإلكتروني المخصص للطوارئ لتعيين كلمة المرور الجديدة. - + هل نسيت كلمة المرور؟ - + إعادة تعيين كلمة المرور - + تعيين كلمة مرور جديدة - + تعيين كلمة مرور جديدة - + يجب أن تكون سلسلة الرمز المميز للإدخال مساوية لسلسلة الرمز المميز في البريد الإلكتروني للاسترداد - + تم تعيين كلمة المرور الجديدة بنجاح، يرجى تسجيل الدخول مرة أخرى - + سلسلة الرمز المميز - + انتظار - + لقد قمت بتسجيل الدخول بالفعل. - + تلقى {0} طلبا لاستخدام البريد الإلكتروني كبريد إلكتروني مخصص للطوارئ {1} الحساب. استخدم هذا الرمز المميز:[ {2} ] لإنهاء كلمة المرور المريحة. - + {0}، يرجى الاتصال بالمسؤول - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx index 1488d9e19..8a4966697 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ca-ES.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Introdueïxi la direcció de correu electrònic vinculada al teu compte i rebras un correu electrònic amb un enllaç per a restablir la contrasenya. - + ¿Ha oblidat la seva contrasenya? - + Restablir contrasenya - + {0} ha rebut una sol·licitud per a utilitzar el correu electrònic com a correu de recuperació per la compta {1}. Utilitzi aquest token:[ {2} ] per a finalitzar de recuperar la contrasenya. - + {0}, per favor, possis en contacte amb l'administrador - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + Correu electrònic - + Introdueïxi la direcció de correu electrònic vinculada al seu compte i rebrà un correu ectrònic amb una clau per a restablir la contrasenya. - + Introdueïxi la clau del correu electrònico de recuperació per a establir la nova contrasenya. - + Establir una nova contrasenya - + Establir una nova contrasenya - + La clau d'entrada ha de ser igual a la clau del correu electrònico de recuperació - + La nova contrasenya s'ha establert amb èxit, per favor, inicia sessió de nou - + Clau - + Esperant - + Ja ha iniciat la sessió. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx index edf02d489..e8ed90049 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.de-DE.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Geben Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ein und Sie erhalten eine E-Mail mit einem Link zum Zurücksetzen Ihres Passworts. - + Passwort vergessen? - + Passwort zurücksetzen - + {0} hat eine Anfrage erhalten, E-Mail als Wiederherstellungs-E-Mail für das Konto {1} zu verwenden. Verwenden Sie dieses Token:[ {2} ], um die Wiederherstellung des Passworts abzuschließen. - + {0}, bitte kontaktieren Sie den Administrator - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + E-Mail - + Geben Sie die mit Ihrem Konto verknüpfte E-Mail-Adresse ein. Sie erhalten dann eine E-Mail mit einer Token-Zeichenfolge, mit der Sie Ihr Passwort zurücksetzen können. - + Geben Sie den Token-String aus der Wiederherstellungs-E-Mail ein, um Ihr neues Passwort festzulegen. - + Ein neues Passwort festlegen - + Neues Passwort festlegen - + Der eingegebene Token-String muss mit dem Token-String in der Wiederherstellungs-E-Mail übereinstimmen - + Das neue Passwort wurde erfolgreich gesetzt, bitte melden Sie sich erneut an - + Token Zeichenfolge - + Warten auf - + Sie sind bereits eingeloggt. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx index 7be3e01ec..67f7f62f4 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.en.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Enter the email address linked to your account and you will receive an email containing a link to reset your password. - + Forgot Password? - + Reset Password - + {0} received a request to use email as a recovery email for the account {1}. Use this token:[ {2} ] to finish resting password. - + {0}, please contact the administrator - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + E-mail - + Enter the email address linked to your account and you will receive an email containing a token string to reset your password. - + Enter the token string from the recovery email to set your new password. - + Set a new password - + Set New Password - + The input token string must be equal to the token string in the recovery email - + The new password has been set successfully, please login again - + Token String - + Waiting - + You are already logged in. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx index 292ae9dd2..605bd1d6b 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.es-ES.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Introduce la dirección de correo electrónico vinculada a tu cuenta y recibirás un correo electrónico con un enlace para restablecer tu contraseña. - + ¿Ha olvidado su contraseña? - + Restablecer contraseña - + {0} ha recibido una solicitud para utilizar el correo electrónico como correo de recuperación para la cuenta {1}. Utilice este token:[ {2} ] para terminar de recuperar la contraseña. - + {0}, por favor, póngase en contacto con el administrador - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + Correo electrónico - + Introduzca la dirección de correo electrónico vinculada a su cuenta y recibirá un correo electrónico con una cadena de tokens para restablecer su contraseña. - + Introduzca la cadena de claves del correo electrónico de recuperación para establecer su nueva contraseña. - + Establezca una nueva contraseña - + Establecer una nueva contraseña - + La cadena del token de entrada debe ser igual a la cadena del token en el correo electrónico de recuperación - + La nueva contraseña se ha establecido con éxito, por favor, inicie sesión de nuevo - + Cadena de tokens - + Esperando - + Ya ha iniciado la sesión. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx index 06c598618..5b8619335 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.fr-FR.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Entrez l'adresse e-mail liée à votre compte et vous recevrez un e-mail contenant un lien pour réinitialiser votre mot de passe. - + Vous avez oublié votre mot de passe ? - + Réinitialiser le mot de passe - + {0} a reçu une demande d'utilisation de l'email comme email de récupération pour le compte {1}. Utilisez ce jeton :[ {2} ] pour finir de restaurer le mot de passe. - + {0}, veuillez contacter l'administrateur - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + E-mail - + Entrez l'adresse e-mail liée à votre compte et vous recevrez un e-mail contenant une chaîne de caractères pour réinitialiser votre mot de passe. - + Saisissez la chaîne de caractères du courriel de récupération pour définir votre nouveau mot de passe. - + Définir un nouveau mot de passe - + Définir un nouveau mot de passe - + La chaîne du jeton d'entrée doit être égale à la chaîne du jeton dans l'e-mail de récupération. - + Le nouveau mot de passe a été défini avec succès, veuillez vous connecter à nouveau. - + Chaîne du jeton - + En attente de - + Vous êtes déjà connecté. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx index 440e459ec..9bc297ea6 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ja-JP.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + パスワードをリセットするためのリンクを含む電子メールが送信されます。 - + パスワードを忘れた場合 - + パスワードのリセット - + {0} は、アカウント {1} の回復用メールとして電子メールを使用する要求を受け取りました。このトークン:[ {2} ]を使用して、パスワードの復元を完了してください。 - + {0}, 管理者に連絡してください。 - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + 電子メール - + パスワードをリセットするためのトークン文字列を含むメールを受信します。 - + パスワード再設定用メールに記載されているトークン文字列を入力し、新しいパスワードを設定してください。 - + 新しいパスワードの設定 - + 新しいパスワードの設定 - + 入力されたトークン文字列は、リカバリメールに記載されたトークン文字列と同じである必要があります - + 新しいパスワードが設定されました。 - + トークン文字列 - + 待機中 - + すでにログインしています。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx index 7465d3bc0..73dc8f756 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.km-KH.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 계정에 연결된 이메일 주소를 입력하면 비밀번호 재설정 링크가 포함된 이메일을 받게 됩니다. - + 비밀번호를 잊으 셨나요? - + 암호를 재설정 - + 이메일 - + បញ្ចូល អាសយដ្ឋាន អ៊ីមែល ដែល ភ្ជាប់ ទៅ គណនី របស់ អ្នក ហើយ អ្នក នឹង ទទួល អ៊ីមែល ដែល មាន ខ្សែ អក្សរ ថូខេន ដើម្បី កំណត់ ពាក្យ សម្ងាត់ របស់ អ្នក ឡើង វិញ & # 160; ។ - + បញ្ចូល ខ្សែអក្សរ token ពី អ៊ីមែល recovery ដើម្បី កំណត់ ពាក្យ សម្ងាត់ ថ្មី របស់ អ្នក ។ - + កំណត់ពាក្យសម្ងាត់ថ្មី - + កំណត់ពាក្យសម្ងាត់ថ្មី - + ខ្សែអក្សរ token input ត្រូវតែស្មើទៅនឹង string token នៅក្នុង អ៊ីមែល recovery - + ពាក្យ សម្ងាត់ ថ្មី ត្រូវ បាន កំណត់ ដោយ ជោគជ័យ សូម ចូល ម្តង ទៀត - + ខ្សែអក្សរ Token - + រង់ចាំ - + អ្នក បាន ចូល រួច ហើយ ។ - + {0} បាន ទទួល សំណើ មួយ ដើម្បី ប្រើ អ៊ីមែល ជា អ៊ីមែល ស្តារ ឡើង វិញ សម្រាប់ គណនី {1} ។ ប្រើ token នេះ:[ {2} ] ដើម្បី បញ្ចប់ ការ សម្រាក ពាក្យ សម្ងាត់ ។ - + {0} សូមទាក់ទងទៅអ្នកគ្រប់គ្រង - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.resx index 6f94624cd..6e888a2a5 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.resx @@ -1,164 +1,171 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-mail - + Enter the email address linked to your account and you will receive an email containing a link to reset your password. - - + + Enter the token string from the recovery email to set your new password. - + Forgot Password? - + Reset Password - + Set a new password - + Set New Password - + The input token string must be equal to the token string in the recovery email - + The new password has been set successfully, please login again - + Token String - + Waiting - + You are already logged in. - + {0} received a request to use email as a recovery email for the account {1}. Use this token:[ {2} ] to finish resting password. - + {0}, please contact an administrator - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx index 0b7097024..d2ddf175c 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.ru.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Введите адрес электронной почты, привязанный к вашей учетной записи, и вы получите письмо со ссылкой для сброса пароля. - + Забыли пароль? - + Сброс пароля - + {0} получил запрос на использование электронной почты в качестве почты восстановления для учетной записи {1}. Используйте этот токен:[ {2} ] для завершения восстановления пароля. - + {0}, пожалуйста, свяжитесь с администратором - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + Электронная почта - + Введите адрес электронной почты, привязанный к вашей учетной записи, и вы получите письмо, содержащее маркерную строку для сброса пароля. - + Введите маркерную строку из письма для восстановления, чтобы установить новый пароль. - + Установить новый пароль - + Установить новый пароль - + Вводимая строка маркера должна быть равна строке маркера в письме о восстановлении пароля - + Новый пароль был установлен успешно, пожалуйста, войдите в систему снова - + Строка маркера - + Ожидание - + Вы уже вошли в систему. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx index 1de1ac210..d35474559 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Forgot.zh-CN.resx @@ -1,166 +1,174 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 输入与您的账户相连的电子邮件地址,您将收到一封包含重置密码链接的电子邮件。 - + 忘记密码? - + 重置密码 - + {0}收到了一个使用电子邮件作为帐户{1}的恢复电子邮件的请求。使用此令牌:[ {2} ] 完成恢复密码。 - + {0},请联系管理员 - moved to ResetPasswordCommandHandler + moved to ResetPasswordCommandHandler - + 电子邮件 - + 输入与您的账户相关联的电子邮件地址,您将收到一封包含令牌字符串的电子邮件来重置您的密码。 - + 输入恢复邮件中的令牌字符串来设置你的新密码。 - + 设置一个新的密码 - + 设置新密码 - + 输入的令牌字符串必须与恢复邮件中的令牌字符串相等 - + 新密码已经设置成功,请再次登录 - + 代币字符串 - + 正在等待 - + 你已经登录了。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx index 1d31789f3..168469e29 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ar-IQ.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ليس لديك حساب؟ - + هل نسيت كلمة المرور؟ - + شعار - + كلمة المرور مطلوبة! - + يجب ألا يقل طول كلمة المرور عن 6 - + يجب أن تحتوي كلمة المرور على حرف كبير واحد على الأقل - + يجب أن تحتوي كلمة المرور على رقم واحد على الأقل - + يجب أن تحتوي كلمة المرور على حرف صغير واحد على الأقل - + يرجى التحقق من اسم المستخدم وكلمة المرور. إذا كنت لا تزال غير قادر على تسجيل الدخول، فاتصل بالمسؤول. - + تذكرني؟ - + تسجيل الدخول - + التسجيل - + اسم المستخدم - + اسم المستخدم مطلوب! - + لم يتم العثور على مستخدم ، أو لا يوجد ترخيص ، يرجى الاتصال بالمسؤول. - + اسم المستخدم مطلوب! - + يرجى التحقق من اسم المستخدم وكلمة المرور الخاصة بك. إذا كنت لا تزال غير قادر على تسجيل الدخول ، فاتصل بالمسؤول. - + لم يتم العثور على مستخدم ، أو لا يوجد ترخيص ، يرجى الاتصال بالمسؤول. - + اسم المستخدم - + يرجى التحقق من اسم المستخدم وكلمة المرور الخاصة بك. إذا كنت لا تزال غير قادر على تسجيل الدخول ، فاتصل بالمسؤول. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx index eb576c896..94c029dce 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ca-ES.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + No tens un compte? - + Ha oblidat la contrasenya? - + Contrasenya - + Es requereix contrasenya! - + La contrasenya ha de tenir una longitud mínima de 6 - + La contrasenya ha de tenir al menys una lletra majúscula - + La contrasenya ha de tenir al meny un dígit numèric - + La contrasenya ha de tenir al menys una lletra minúscula - + Comproveu el vostre nom d'usuari i contrasenya. Si encara no podeu iniciar sessió, poseu-vos en contacte amb el vostre administrador. - + Recordar? - + Iniciar sessió - + Registrar-se - + Nom d'usuari - + El nom d'usuari és obligatori! - + No s'ha trobat cap usuari o no hi ha autorització, contacti amb l'administrador.administrador. - + El nom d'usuari és obligatori! - + Comproveu el vostre nom d'usuari i contrasenya. Si encara no podeu iniciar sessió, poseu-vos en contacte amb el vostre administrador. - + No s'ha trobat cap usuari o no hi ha autorització, poseu-vos en contacte amb l'administrador. - + Nom d'usuari - + Comproveu el vostre nom d'usuari i contrasenya. Si encara no podeu iniciar sessió, poseu-vos en contacte amb el vostre administrador. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx index 9f9918083..e023231a1 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.de-DE.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Sie haben noch kein Konto? - + Passwort vergessen? - + Kennwort - + Passwort ist erforderlich! - + Das Passwort muss mindestens die Länge 6 haben - + Das Passwort muss mindestens einen Großbuchstaben enthalten - + Passwort muss mindestens eine Ziffer enthalten - + Passwort muss mindestens einen Kleinbuchstaben enthalten - + Bitte überprüfen Sie Ihren Benutzernamen und Ihr Passwort. Wenn Sie sich immer noch nicht anmelden können, wenden Sie sich an Ihren Administrator. - + Erinnern Sie sich an mich? - + Anmelden - + Anmelden - + Name des Benutzers - + Der Benutzername ist erforderlich! - + Kein Benutzer gefunden oder keine Berechtigung, bitte wenden Sie sich an den Administrator. - + Benutzername wird benötigt! - + Bitte überprüfen Sie Ihren Benutzernamen und Ihr Passwort. Wenn Sie sich immer noch nicht anmelden können, wenden Sie sich an Ihren Administrator. - + Kein Benutzer gefunden oder keine Berechtigung, wenden Sie sich bitte an den Administrator. - + Nutzername - + Bitte überprüfen Sie Ihren Benutzernamen und Ihr Passwort. Wenn Sie sich immer noch nicht anmelden können, wenden Sie sich an Ihren Administrator. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.en.resx b/src/Server.UI/Resources/Pages/Authentication/Login.en.resx index 36a2ac2e2..baa45a98a 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.en.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Don't have an account? - + Forgot password? - + Password - + Password is required! - + Password must be at least of length 6 - + Password must contain at least one capital letter - + Password must contain at least one digit - + Password must contain at least one lowercase letter - + Please check your username and password. If you are still unable to log in, contact your administrator. - + Remember me? - + Sign In - + Sign Up - + Username - + Username is required! - + No user found, or no authorization, please contact the administrator. - + User name is required! - + Please check your username and password. If you are still unable to log in, contact your administrator. - + No user found, or no authorization, please contact the administrator. - + User name - + Please check your username and password. If you are still unable to log in, contact your administrator. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx index ba0d3840e..8f7c83368 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.es-ES.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ¿No tiene una cuenta? - + ¿Ha olvidado su contraseña? - + Contraseña - + ¡La contraseña es obligatoria! - + La contraseña debe tener una longitud mínima de 6 - + La contraseña debe contener al menos una letra mayúscula - + La contraseña debe contener al menos un dígito - + La contraseña debe contener al menos una letra minúscula - + Por favor, compruebe su nombre de usuario y contraseña. Si sigue sin poder conectarse, póngase en contacto con su administrador. - + ¿Me recuerdas? - + Iniciar sesión - + Registrarse - + Nombre de usuario - + ¡El nombre de usuario es obligatorio! - + No se encontró ningún usuario o no hay autorización, comuníquese con el administrador. - + ¡Se requiere nombre de usuario! - + Por favor verifique su nombre de usuario y contraseña. Si sigue sin poder iniciar sesión, póngase en contacto con su administrador. - + No se encontró ningún usuario o no hubo autorización, comuníquese con el administrador. - + Nombre de usuario - + Por favor verifique su nombre de usuario y contraseña. Si sigue sin poder iniciar sesión, póngase en contacto con su administrador. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx index b9ceee855..e17ad7782 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.fr-FR.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Vous n'avez pas de compte ? - + Mot de passe oublié ? - + Mot de passe - + Le mot de passe est obligatoire ! - + Le mot de passe doit être au moins de longueur 6 - + Le mot de passe doit contenir au moins une lettre majuscule - + Le mot de passe doit contenir au moins un chiffre - + Le mot de passe doit contenir au moins une lettre minuscule - + Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Si vous n'arrivez toujours pas à vous connecter, contactez votre administrateur. - + Se souvenir de moi ? - + Se connecter - + S'inscrire - + Nom d'utilisateur - + Le nom d'utilisateur est obligatoire ! - + Aucun utilisateur trouvé, ou aucune autorisation, veuillez contacter l'administrateur. - + Nom d'utilisateur est nécessaire! - + Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Si vous ne parvenez toujours pas à vous connecter, contactez votre administrateur. - + Aucun utilisateur trouvé, ou aucune autorisation, veuillez contacter l'administrateur. - + Nom d'utilisateur - + Veuillez vérifier votre nom d'utilisateur et votre mot de passe. Si vous ne parvenez toujours pas à vous connecter, contactez votre administrateur. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx index 85db754fa..9ca53148a 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ja-JP.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + アカウントをお持ちでない方 - + パスワードをお忘れの方 - + パスワード - + パスワードが必要です - + パスワードは6文字以上である必要があります。 - + パスワードには、少なくとも1つの大文字が含まれていなければなりません。 - + パスワードには、少なくとも1つの数字が含まれていなければなりません。 - + パスワードには、少なくとも1つの小文字が含まれている必要があります。 - + ユーザー名とパスワードを確認してください。 それでもログインできない場合は、管理者にお問い合わせください。 - + 私を覚えていますか? - + サインイン - + サインアップ - + ユーザー名 - + ユーザー名が必要です - + ユーザーが見つからないか、権限がありません。管理者に連絡してください。 - + ユーザー名は必須です! - + ユーザー名とパスワードを確認してください。 それでもログインできない場合は、管理者に問い合わせてください。 - + ユーザーが見つからないか、権限がありません。管理者に連絡してください。 - + ユーザー名 - + ユーザー名とパスワードを確認してください。 それでもログインできない場合は、管理者に問い合わせてください。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx index 824442972..7b08b6352 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.km-KH.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 계정이 없으신가요? - + 비밀번호를 잊으 셨나요? - + 비밀번호 - + 비밀번호가 필요합니다! - + 암호는 길이가 6 이상이어야 합니다. - + 비밀번호는 적어도 하나의 대문자를 포함해야 합니다 - + 비밀번호는 하나 이상의 숫자를 포함해야 합니다. - + 비밀번호에는 소문자가 하나 이상 포함되어야 합니다. - + 사용자 이름과 비밀번호를 확인하세요. 여전히 로그인할 수 없으면 관리자에게 문의하십시오. - + 날 기억해? - + 로그인 - + 가입하기 - + 사용자 이름 - + 사용자 이름이 필요합니다! - + 사용자를 찾을 수 없거나 권한이 없습니다. 관리자에게 문의하세요. - + 사용자 이름이 필요합니다! - + 사용자 이름과 비밀번호를 확인하세요. 여전히 로그인할 수 없으면 관리자에게 문의하십시오. - + 사용자를 찾을 수 없거나 권한이 없습니다. 관리자에게 문의하십시오. - + 사용자 이름 - + 사용자 이름과 비밀번호를 확인하세요. 여전히 로그인할 수 없으면 관리자에게 문의하십시오. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.resx b/src/Server.UI/Resources/Pages/Authentication/Login.resx index 845c24f5e..73a8d7b5f 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.resx @@ -1,180 +1,188 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Don't have an account? - + Forgot password? - + Password - + Password is required! - + Password must be at least 6 characters - + Password must contain at least one capital letter - + Password must contain at least one digit - + Password must contain at least one lowercase letter - + Please check your username and password. If you are still unable to log in, contact an administrator. - + Remember me? - + Sign In - + Sign Up - + Username - + Username is required! - + No user found, or no authorization, please contact an administrator. - + User name is required! - + Please check your username and password. If you are still unable to log in, contact your administrator. - + No user found, or no authorization, please contact the administrator. - + User name - + Please check your username and password. If you are still unable to log in, contact your administrator. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx index 1ca771e88..7fef00be0 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.ru.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + У вас нет учетной записи? - + Забыли пароль? - + Пароль - + Пароль обязателен! - + Пароль должен быть длиной не менее 6 - + Пароль должен содержать хотя бы одну заглавную букву - + Пароль должен содержать хотя бы одну цифру - + Пароль должен содержать хотя бы одну строчную букву - + Пожалуйста, проверьте свое имя пользователя и пароль. Если вы все еще не можете войти в систему, свяжитесь с вашим администратором. - + Запомнить меня? - + Войти - + Зарегистрироваться - + Имя пользователя - + Имя пользователя обязательно! - + Пользователь не найден или нет авторизации, обратитесь к администратору. - + Имя пользователя требуется! - + Пожалуйста, проверьте ваше имя пользователя и пароль. Если вы по-прежнему не можете войти в систему, обратитесь к администратору. - + Пользователь не найден или нет авторизации, обратитесь к администратору. - + Имя пользователя - + Пожалуйста, проверьте ваше имя пользователя и пароль. Если вы по-прежнему не можете войти в систему, обратитесь к администратору. \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx index 4ca052fa4..4d504f0ba 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Login.zh-CN.resx @@ -1,180 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 还没账号? - + 忘记密码? - + 密码 - + 密码必填! - + 密码长度至少6位 - + 密码必须包含大写字母 - + 密码必须包含小写字母 - + 密码必须包含数字 - + 请检查用户名和密码, 如果还是不能登录, 请联系管理员 - + 记住我 - + 登录 - + 注册 - + 用户名 - + 用户名必填 - + 请检查您的用户名和密码。 如果您仍然无法登录,请联系您的管理员。 - + 没有找到用户,或者没有授权,请联系管理员。 - + 请检查用户名和密码, 如果还是不能登录, 请联系管理员 - + 用户名 - + 用户名必填 - + 没有找到该用户, 请联系管理员 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx index 035a32707..631366aad 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ar-IQ.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + البريد الالكترونى - + البريد الإلكتروني مطلوب! - + هل لديك حساب؟ - + أوافق على الشروط والخصوصية - + شعار - + كلمة المرور مطلوبة! - + سجل - + سجل بنجاح! - + تسجيل الدخول - + التسجيل - + اسم المستخدم - + اسم المستخدم مطلوب! - + تأكيد كلمة المرور \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx index 415dc1c47..f5638f259 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ca-ES.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Correu electrónico - + El correu electrònic és obligatori! - + Tens un compte? - + Accepto els termes i la privadesa - + Contrasenya - + Es requereix la contrasenya! - + Registre - + Registrat amb èxit! - + Iniciar sessió - + Registrar-se - + Nom d'usuari - + El nom d'usuari és obligatori! - + Confirma la contrassenya \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx index 988a4add6..a7c239dbc 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.de-DE.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-Mail - + E-Mail ist erforderlich! - + Haben Sie ein Konto? - + Ich stimme den Bedingungen und dem Datenschutz zu - + Kennwort - + Passwort ist erforderlich! - + Registrieren - + Erfolgreich registriert! - + Anmelden - + Anmelden - + Name des Benutzers - + Benutzername ist erforderlich! - + Bestätige das Passwort \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.en.resx b/src/Server.UI/Resources/Pages/Authentication/Register.en.resx index 0d6008c75..6a9b6980d 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.en.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-mail - + e-mail is required! - + have an account? - + I agree to the terms and privacy - + Password - + password is required! - + Register - + Register successfully! - + Sign In - + Sign Up - + User Name - + user name is required! - + Confirm Password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx index 33fcb9b99..2aff9b142 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.es-ES.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Correo electrónico - + ¡el correo electrónico es obligatorio! - + ¿tiene una cuenta? - + Acepto los términos y la privacidad - + Contraseña - + ¡Se requiere la contraseña! - + Registro - + ¡Regístrese con éxito! - + Iniciar sesión - + Registrarse - + Nombre de usuario - + ¡el nombre de usuario es obligatorio! - + confirmar Contraseña \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx index fac755d32..9fba6951a 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.fr-FR.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + E-mail - + L'e-mail est obligatoire ! - + Vous avez un compte ? - + J'accepte les conditions et la confidentialité - + Mot de passe - + Le mot de passe est requis ! - + S'inscrire - + Enregistrez-vous avec succès ! - + Se connecter - + S'inscrire - + Nom de l'utilisateur - + Le nom d'utilisateur est obligatoire ! - + Confirmez le mot de passe \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx index ec0fb0a9d..6cafdf0b2 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ja-JP.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 電子メール - + 電子メールは必須です - + アカウントをお持ちですか? - + 私は規約とプライバシーに同意します - + パスワード - + パスワードが必要です - + 会員登録 - + 登録完了 - + サインイン - + サインアップ - + ユーザー名 - + ユーザーネームは必須です - + パスワードを認証する \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx index fa674bcd0..67fd0d811 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.km-KH.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 이메일 - + 이메일은 필수입니다! - + 계정이있다? - + 약관 및 개인정보 보호에 동의합니다. - + 비밀번호 - + 비밀번호가 필요합니다! - + 등록하다 - + 성공적으로 등록하십시오! - + 로그인 - + 가입하기 - + 사용자 이름 - + 사용자 이름이 필요합니다! - + 비밀번호 확인 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.resx b/src/Server.UI/Resources/Pages/Authentication/Register.resx index a41ac32ae..70afe71e8 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.resx @@ -1,159 +1,164 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirm Password - + E-mail - + E-mail is required! - + Have an account? - + I agree to the terms and privacy - + Password - + Password is required! - + Register - + Register successfully! - + Sign In - + Sign Up - + Username - + Username is required! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx index dfacd8ba6..fc87465c9 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.ru.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Электронная почта - + электронная почта обязательна! - + У вас есть аккаунт? - + Я согласен с условиями и конфиденциальностью - + Пароль - + Пароль обязателен! - + Зарегистрируйтесь - + Регистрация прошла успешно! - + Войти - + Зарегистрироваться - + Имя пользователя - + имя пользователя обязательно! - + Подтвердите пароль \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx index 6aa07bd20..21eeeeb63 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Register.zh-CN.resx @@ -1,159 +1,164 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 电子邮件 - + 电子邮件必填! - + 我同意条款和隐私 - + 密码 - + 密码必填! - + 注册 - + 注册成功! - + 用户名 - + 用户名必填 - + 已有账号? - + 登录 - + 注册 - + 确认密码 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx index 6f0909f2c..83e9ef87e 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ar-IQ.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + كلمة السر الجديدة - + تعيين كلمة مرور جديدة \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx index 5b7c8138b..ad08ba8bc 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ca-ES.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nova contrasenya - + Establir nova contrasenya \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx index a1c599fc2..c52fb9614 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.de-DE.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Neues Passwort - + Neues Passwort festlegen \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx index 756633960..cc58ef247 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.en.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + New Password - + Set new password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx index b151c1446..007879353 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.es-ES.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nueva contraseña - + Establecer nueva contraseña \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx index a37c7de7b..d796b7be2 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.fr-FR.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nouveau mot de passe - + Définir un nouveau mot de passe \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx index 428f77fb0..55961df0c 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ja-JP.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 新しいパスワード - + 新しいパスワードの設定 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx index a277270c7..d82809b09 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.km-KH.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 새 비밀번호 - + 새 비밀번호 설정 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.resx index 01e3db958..5ee164d34 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.resx @@ -1,126 +1,131 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + New Password - + Set new password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx index 4494db500..dbe238d09 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.ru.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Новый пароль - + Установить новый пароль \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx b/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx index e295cb4ec..f5509aa6d 100644 --- a/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Authentication/Reset.zh-CN.resx @@ -1,126 +1,131 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 新密码 - + 新密码 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx index 9d8b1b6f3..4e0685a8f 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ar-IQ.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + الملحق - + نوع المستند - + نوع المستند مطلوب! - + الوثائق - + هل هو عام - + حدد نوع المستند - + اسم المستأجر - + عنوان - + العنوان مطلوب! - + رفع - + تحميل بنجاح - + بدأت مهمة {0}. - + اكتمل التعرف على {0}. - + اختر الملفات - + محتوى - + يسمح فقط بملفات .jpg والملفات .png. - + يرجى النقر فوق الزر [اختر ملفات] لتحميل صورتك. - + التعرف على النتيجة - + تحميل الصور - + تحميل - + مالك \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx index c38bf690e..ec8ff21e4 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ca-ES.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Adjunt - + Tipus de document - + El tipus de document és obligatori - + Documents - + És públic - + Seleccionar tipus de document - + Nom del arrendatari - + Títol - + El títol és obligatori - + Carregar - + Carregat amb con èxit - + Descarregar - + Propietari - + {0} feina començada. - + {0} reconeixement completat. - + Carrega Imatges - + Reconeix el resultat - + Si us plau, feu clic al botó [Tria fitxers] per pujar la vostra foto. - + Només es permeten fitxers .jpg i .png. - + Trieu fitxers - + Contingut \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx b/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx index 4898ba7c8..c8128e253 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.de-DE.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Anhang - + Dokumenttyp - + Dokumenttyp ist erforderlich! - + Dokumente - + Ist öffentlich - + Dokumententyp auswählen - + Name des Mieters - + Titel - + Titel ist erforderlich! - + Hochladen - + Upload erfolgreich - + {0} Job gestartet. - + {0} erkennen abgeschlossen. - + Dateien auswählen - + Inhalt - + Nur .jpg und .png Dateien sind erlaubt. - + Bitte klicken Sie auf die Schaltfläche [Dateien auswählen], um Ihr Foto hochzuladen. - + Erkennen Sie das Ergebnis - + Bilder hochladen - + Download - + Eigentümer \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.en.resx b/src/Server.UI/Resources/Pages/Documents/Documents.en.resx index 008488b97..065637373 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.en.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.en.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Attachement - + Document Type - + Document type is required! - + Documents - + Is Public - + Select Document Type - + Tenant Name - + Title - + Title is required! - + Upload - + Upload successfully - + {0} job started. - + {0} recognize completed. - + Choose files - + Content - + Only .jpg and .png files are allowed. - + Please click [Choose Files] button to upload your photo. - + Recognize result - + Upload Pictures - + Download - + Owner \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx b/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx index 787282fdf..85425282d 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.es-ES.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Adjunto - + Tipo de documento - + El tipo de documento es obligatorio - + Documentos - + Es público - + Seleccione el tipo de documento - + Nombre del inquilino - + Título - + El título es obligatorio - + Cargar - + Subir con éxito - + {0} trabajo iniciado. - + {0} reconocimiento completado. - + Elija los archivos - + Contenido - + Sólo se permiten archivos .jpg y .png. - + Por favor, haga clic en el botón [Choose Files] para subir su foto. - + Reconocer resultado - + Subir fotos - + Descargar - + Dueño \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx b/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx index 3358251b3..e0af1168d 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.fr-FR.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Pièce jointe - + Type de document - + Le type de document est obligatoire ! - + Documents - + Est public - + Sélectionnez le type de document - + Nom du locataire - + Titre - + Le titre est obligatoire ! - + Télécharger - + Télécharger avec succès - + {0} tâche démarrée. - + {0} reconnaissance terminée. - + Choisir les fichiers - + Contenu - + Seuls les fichiers .jpg et .png sont autorisés. - + Veuillez cliquer sur le bouton [Choose Files] pour télécharger votre photo. - + Reconnaître le résultat - + Télécharger les photos - + Télécharger - + Propriétaire \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx index 242fb411d..890b9cdbf 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ja-JP.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 添付ファイル - + ドキュメントタイプ - + ドキュメントの種類は必須です - + ドキュメント - + 公開 - + 書類の種類を選択 - + テナント名 - + 役職名 - + タイトルが必要です。 - + アップロード - + アップロードに成功しました。 - + {0} ジョブが開始されました。 - + {0} の認識が完了しました。 - + ファイルを選択 - + 内容 - + .jpgと.pngのファイルのみ使用可能です。 - + ファイルを選択]ボタンをクリックして、写真をアップロードしてください。 - + 認識結果 - + 写真をアップロードする - + ダウンロード - + オーナー \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx b/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx index 6bf8af889..871df254f 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.km-KH.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 부착 - + 문서 유형 - + 문서 유형이 필요합니다! - + 문서 - + 공개됨 - + 문서 유형 선택 - + 테넌트 이름 - + 타이틀 - + 제목이 필요합니다! - + 업로드 - + 업로드에 성공했습니다. - + {0} 작업이 시작되었습니다. - + {0} 인식이 완료되었습니다. - + 파일 선택 - + 콘텐츠 - + .jpg 및 .png 파일만 허용됩니다. - + [파일 선택] 버튼을 클릭하여 사진을 업로드하십시오. - + 결과 인식 - + 사진 업로드 - + 다운로드 - + 소유자 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.resx b/src/Server.UI/Resources/Pages/Documents/Documents.resx index 6de0e4e1e..970010572 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.resx @@ -1,183 +1,188 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Attachement - + Choose files - + Content - + Document Type - + Document type is required! - + Documents - + Is Public - + Only .jpg and .png files are allowed. - + Please click [Choose Files] button to upload your photo. - + Recognize result - + Select Document Type - + Tenant Name - + Title - + Title is required! - + Upload - + Upload Pictures - + Upload successfully - + {0} job started. - + {0} recognize completed. - + Download - + Owner \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx b/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx index 21b6fee65..7c1f6617f 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.ru.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Вложение - + Тип документа - + Тип документа обязателен! - + Документы - + Публичный - + Выберите тип документа - + Имя арендатора - + Название - + Название обязательно! - + Загрузить - + Загрузка прошла успешно - + Задание {0} запущено. - + {0} признать завершенным. - + Выберите файлы - + Содержание - + Разрешены только файлы .jpg и .png. - + Пожалуйста, нажмите кнопку [Choose Files] для загрузки фотографии. - + Распознать результат - + Загрузить фотографии - + Скачать - + Владелец \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx b/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx index fab263dc9..c00e60848 100644 --- a/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Documents/Documents.zh-CN.resx @@ -1,183 +1,188 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 附件 - + 文档类型 - + 文档类型必填! - + 文档 - + 是否公开 - + 选择文档类型 - + 租户名称 - + 文档名称 - + 文档必填 - + 上传 - + 上传成功 - + {0} 开始处理. - + {0} 识别完成. - + 选择上传的图片 - + 文本内容 - + 只允许上传 .jpg 和 .png 文件. - + 请单击【上传】按钮上传需要解析的图片 - + 识别结果 - + 上传图片 - + 下载 - + 所有人 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx index 79a1fb04b..5dba1e364 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ar-IQ.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تعيين التغييرات بنجاح - + تم تعيينه بنجاح - + إنشاء دور جديد - + وصف - + تحرير الدور - + اسم - + ادوار - + البحث عن اسم الدور - + تعيين الأذونات - + إلغاء التعيين بنجاح - + تمت إزالة الإذن بنجاح! - + الأدوار المعينة - + البريد الإلكتروني / رقم الهاتف - + تمت إضافة الإذن بنجاح! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx index 2ad2d2427..f4b9fd3f8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ca-ES.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assignació canviada amb èxit - + Assignat amb èxit - + Crear un nou rol - + Descripció - + Editar el rol - + Nom - + Rols - + Buscar per nom de rol - + Establir permisos - + Desassignat amb èxit - + S'ha eliminat el permís correctament! - + Rols assignats - + Correu electrònic/Número de telèfon - + S'ha afegit el permís correctament! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx index 9c426c39f..2a91123b2 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.de-DE.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Zuweisung erfolgreich geändert - + Erfolgreich zugewiesen - + Eine neue Rolle erstellen - + Beschreibung - + Bearbeiten Sie die Rolle - + Name - + Rollen - + Suche nach Rollenname - + Berechtigungen festlegen - + Nicht zugewiesen erfolgreich - + Berechtigung erfolgreich entfernt! - + Zugewiesene Rollen - + E-Mail / Telefonnummer - + Berechtigung erfolgreich hinzugefügt! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx index 7d6a5d92b..d13ed5daa 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.en.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assign changed successfully - + Assigned successfully - + Create a new role - + Description - + Edit the role - + Name - + Roles - + Search for role name - + Set Permissions - + Unassigned successfully - + Assigned Roles - + Email / PhoneNumber - + Permission removed successfully! - + Permission added successfully! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx index 3652e5b27..64301f091 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.es-ES.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Asignación cambiada con éxito - + Asignado con éxito - + Crear un nuevo rol - + Descripción - + Editar el rol - + Nombre - + Roles - + Buscar el nombre de la función - + Establecer permisos - + No asignado con éxito - + ¡Permiso eliminado con éxito! - + Roles asignados - + Correo electrónico / Número de teléfono - + ¡Permiso agregado exitosamente! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx index 1441c1802..fc2b2ccfa 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.fr-FR.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + L'affectation a été modifiée avec succès - + Attribué avec succès - + Créer un nouveau rôle - + Description - + Modifier le rôle - + Nom - + Rôles - + Recherche du nom du rôle - + Définir les autorisations - + Non attribué avec succès - + Autorisation supprimée avec succès ! - + Rôles attribués - + E-mail / Numéro de téléphone - + Autorisation ajoutée avec succès ! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx index 3fae0868c..d32de1827 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ja-JP.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + アサインが正常に変更されました - + 正常に割り当てられた - + 新しいロールの作成 - + 商品説明 - + 役割の編集 - + 名前 - + 役割 - + 役割名を検索する - + アクセス権の設定 - + 無事未設定 - + 権限が正常に削除されました。 - + 割り当てられた役割 - + メールアドレス/電話番号 - + 権限が正常に追加されました。 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx index c63734a3c..77e92881a 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.km-KH.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 할당이 성공적으로 변경되었습니다. - + 성공적으로 할당됨 - + 새 역할 만들기 - + 설명 - + 역할 수정 - + 이름 - + 역할 - + 역할 이름 검색 - + 권한 설정 - + 할당 해제됨 - + 권한이 성공적으로 제거되었습니다! - + 할당된 역할 - + 이메일 / 전화번호 - + 권한이 성공적으로 추가되었습니다! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx index eece0b0d8..bdb8461f9 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.resx @@ -1,162 +1,167 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assign changed successfully - + Assigned successfully - + Create a new role - + Description - + Edit the role - + Name - + Roles - + Search for role name - + Set Permissions - + Unassigned successfully - + Assigned Roles - + Email / PhoneNumber - + Permission added successfully! - + Permission removed successfully! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx index 345f705f7..cd30e65b8 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.ru.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Назначение успешно изменено - + Назначено успешно - + Создать новую роль - + Описание - + Редактировать роль - + Имя - + Роли - + Поиск имени роли - + Установить разрешения - + Не назначено успешно - + Разрешение успешно удалено! - + Назначенные роли - + Электронная почта / номер телефона - + Разрешение успешно добавлено! \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx index ffc95edf5..843486869 100644 --- a/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Identity/Roles/Roles.zh-CN.resx @@ -1,162 +1,167 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 授权更新成功 - + 授权成功 - + 创建新角色 - + 描述 - + 编辑角色 - + 角色 - + 搜索关键字 - + 设置权限 - + 取消授权成功 - + 角色名称 - + 已授权角色 - + 电子邮件 / 电话 - + 权限删除成功 - + 授权成功 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx index 9bb3e8b79..0e10636f5 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ar-IQ.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تغيير كلمة المرور - + تم تغيير كلمة المرور بنجاح. - + انقر على تحميل صورة. - + تأكيد كلمة المرور الجديدة - + كلمة المرور الحالية - + كلمة المرور الحالية مطلوبة! - + اسم العرض - + البريد الإلكتروني - + كلمة السر الجديدة - + كلمة المرور مطلوبة! - + رقم الهاتف - + ملف تعريف - + حفظ التغييرات - + التحديث بنجاح - + اسم المستخدم - + الاسم المتفوق - + اسم المستأجر - + حالة \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx index 164454df4..091af7251 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ca-ES.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Canvia la contrasenya - + S'ha canviat la contrasenya correctament. - + Feu clic a carregar una foto. - + Confirmar nova contrasenya - + Contrasenya actual - + la contrasenya actual és necessària! - + Nom de visualització - + Correu electrònic - + Nova contrasenya - + Es requereix contrasenya! - + Número de telèfon - + Perfil - + Guardar canvis - + Actualitzat correctament - + Nom d'usuari - + Estat - + Nom superior - + Nom de l'arrendatari \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx index b2a9c02af..b49e8760e 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.de-DE.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Passwort ändern - + Das Passwort wurde erfolgreich geändert. - + Klicken Sie auf ein Foto hochladen. - + Bestätigen Sie das neue Passwort - + Aktuelles Passwort - + aktuelles Passwort ist erforderlich! - + Name der Anzeige - + E-Mail - + Neues Kennwort - + Passwort ist erforderlich! - + Telefonnummer - + Profil - + Änderungen speichern - + Erfolgreich aktualisieren - + Name des Benutzers - + Vorgesetzter Name - + Tenant Name - + Status \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx index 37a72752f..4ab59856b 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.en.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Change Password - + Changed password successfully. - + Click upload a photo. - + Confirm New Password - + Current Password - + current password is required! - + Display Name - + Email - + New Password - + password is required! - + Phone Number - + Profile - + Save Changes - + Update successfully - + User Name - + Tenant Name - + Status - + Superior Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx index 17c222af5..657a1439b 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.es-ES.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Cambiar contraseña - + Cambió la contraseña con éxito. - + Haga clic en subir una foto. - + Confirmar nueva contraseña - + Contraseña actual - + ¡se requiere la contraseña actual! - + Nombre de la pantalla - + Correo electrónico - + Nueva contraseña - + ¡se requiere la contraseña! - + Número de teléfono - + Perfil - + Guardar cambios - + Actualizar con éxito - + Nombre de usuario - + Nombre superior - + Nombre del inquilino - + Estado \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx index 8e5040172..1283a52ce 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.fr-FR.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Changer le mot de passe - + Le mot de passe a été modifié avec succès. - + Cliquez sur télécharger une photo. - + Confirmer le nouveau mot de passe - + Mot de passe actuel - + Le mot de passe actuel est requis ! - + Nom de l'affichage - + Courriel - + Nouveau mot de passe - + Le mot de passe est requis ! - + Numéro de téléphone - + Profil - + Sauvegarder les changements - + Mise à jour réussie - + Nom de l'utilisateur - + Nom supérieur - + Tenant Name - + Statut \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx index 9768e9588..e5aed102b 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ja-JP.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + パスワードの変更 - + パスワードの変更に成功しました。 - + 写真をアップロードするをクリックしてください。 - + 新しいパスワードの確認 - + 現在のパスワード - + 現在のパスワードが必要です - + 表示名 - + 電子メール - + 新しいパスワード - + パスワードが必要です - + 電話番号 - + プロフィール - + 変更を保存する - + 更新成功 - + ユーザー名 - + 上司の名前 - + テナント名 - + スターテス \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx index 8ab79375f..76c3adf91 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.km-KH.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 비밀번호 변경 - + 비밀번호를 성공적으로 변경했습니다. - + 사진 업로드를 클릭합니다. - + 새 암호를 확인합니다 - + 현재 비밀번호 - + 현재 비밀번호가 필요합니다! - + 이름 표시하기 - + 이메일 - + 새 비밀번호 - + 비밀번호가 필요합니다! - + 전화 번호 - + 프로필 - + 변경 사항을 저장하다 - + 업데이트 성공 - + 사용자 이름 - + 상위 이름 - + 세입자 이름 - + 상태 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx index 1ecea1649..b96dcc96c 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.resx @@ -1,174 +1,179 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Change Password - + Changed password successfully. - + Click to upload a photo. - + Confirm New Password - + Current Password - + Current password is required! - + Display Name - + Email - + New Password - + Password is required! - + Phone Number - + Profile - + Save Changes - + Update successfully - + Username - + Tenant Name - + Status - + Superior Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx index f64311eaf..f2490b77e 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.ru.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Изменить пароль - + Пароль успешно изменен. - + Нажмите загрузить фотографию. - + Подтвердите новый пароль - + Текущий пароль - + текущий пароль обязателен! - + Имя дисплея - + Электронная почта - + Новый пароль - + пароль обязателен! - + Номер телефона - + Профиль - + Сохранить изменения - + Обновить успешно - + Имя пользователя - + Высшее имя - + Имя арендатора - + Положение дел \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx b/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx index b43121915..99873619f 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Profile.zh-CN.resx @@ -1,174 +1,179 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 修改密码 - + 密码修改成功 - + 单击上传照片. - + 确认新密码 - + 当前密码 - + 当前密码必填! - + 显示名称 - + 电子邮件 - + 新密码 - + 密码必填 - + 电话号码 - + 简档 - + 保存 - + 更新成功 - + 用户名 - + 租户名称 - + 状态 - + 上级 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx index be52d1676..f0c9b7f0d 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ar-IQ.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تعيين الأدوار - + انقر على تحميل صورة. - + تأكيد كلمة المرور الجديدة - + تأكيد كلمة المرور مطلوب! - + إنشاء مستخدم جديد - + تحرير المستخدم - + البريد الإلكتروني - + نشط - + حالة القفل - + كلمة السر الجديدة - + كلمة المرور مطلوبة! - + رقم الهاتف - + إعادة تعيين كلمة المرور بنجاح - + البحث عن اسم المستخدم - + اختر المستأجر - + تعيين نشط - + تعيين غير نشط - + تعيين كلمة المرور - + موقع - + اسم المستأجر - + اسم المستخدم - + المستعملون - + {0} الجلسة تغيرت. - + مزود - + الاسم المتفوق - + حدد سوبريور - + البريد الإلكتروني - + كلمة المرور - + حالة - + تأكيد كلمة المرور - + اسم العرض - + تعيين أذونات - + الأدوار المعينة - + البريد الإلكتروني / رقم الهاتف - + تمت إزالة الإذن بنجاح! - + تمت إضافة الإذن بنجاح! - + إعادة تعيين كلمة المرور \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx index da1143eb7..857c24769 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ca-ES.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} sessión cambiada. - + Assignar Rols - + Feu clic per carregar una foto. - + Confirmar nova contrasenya - + és nescessari confirmar la contrasenya - + Crea un usuari nou - + Editar l'usuari - + Correu electrònic - + Està actiu - + Estat de bloqueig - + Nova contrasenya - + Es requereix contrasenya! - + Número de telèfon - + Restablerta la contrasenya correctament - + Buscar per nom de l'usuari - + Estableix actiu - + Estableix inactiu - + Estableix contrasenya - + Lloc - + Nom de l'usuari - + Usuaris - + Seleccioneu arrendatari - + Nom del arrendatari - + Correu electrònic - + Proveïdor - + Contrasenya - + Estat - + Confirmar contrasenya - + Nom per visualitzar - + S'ha eliminat el permís correctament! - + S'ha afegit el permís correctament! - + Establir permisos - + Seleccioneu Superior - + Nom superior - + Correu electrònic/Número de telèfon - + Rols assignats - + Reset Password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx index 6835ad792..a42ecfec0 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.de-DE.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} Sitzung geändert. - + Rollen zuweisen - + Klicken Sie auf Foto hochladen. - + Neues Passwort bestätigen - + Passwort bestätigen ist erforderlich! - + Neuen Benutzer anlegen - + Bearbeiten Sie den Benutzer - + E-Mail - + Ist aktiv - + Status sperren - + Neues Passwort - + Passwort ist erforderlich! - + Telefon-Nummer - + Passwort erfolgreich zurücksetzen - + Suche nach Benutzernamen - + Aktiv setzen - + Inaktiv setzen - + Passwort festlegen - + Website - + Name des Benutzers - + Benutzer - + Tentan auswählen - + Tenant Name - + Anbieter - + Vorgesetzter Name - + Wählen Sie Superior - + Email - + Passwort - + Status - + Passwort bestätigen - + Anzeigename - + Berechtigungen festlegen - + Zugewiesene Rollen - + E-Mail / Telefonnummer - + Berechtigung erfolgreich entfernt! - + Berechtigung erfolgreich hinzugefügt! - + Passwort zurücksetzen \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx index c1b64421c..2cd0232b3 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.en.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} session changed. - + Assign Roles - + Click upload a photo. - + Confirm New Password - + confirm password is required! - + Create a new user - + Edit the user - + Email - + Is Active - + Lock Status - + New Password - + password is required! - + Phone Number - + Reset password successfully - + Search for user name - + Set Active - + Set Inactive - + Set Password - + Site - + User Name - + Users - + Select Tentan - + Tenant Name - + Provider - + Superior Name - + Select Superior - + E-mail - + Password - + Status - + Confirm Password - + Display Name - + Set Permissions - + Assigned Roles - + Email / PhoneNumber - + Permission removed successfully! - + Permission added successfully! - + Reset Password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx index c0ad034b6..4c69364b9 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.es-ES.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} sesión cambiada. - + Asignar funciones - + Haga clic en subir una foto. - + Confirmar nueva contraseña - + es necesario confirmar la contraseña - + Crear un nuevo usuario - + Editar el usuario - + Correo electrónico - + Está activo - + Estado de bloqueo - + Nueva contraseña - + ¡se requiere la contraseña! - + Número de teléfono - + Restablecer la contraseña con éxito - + Buscar el nombre del usuario - + Establecer activo - + Establecer Inactivo - + Establecer contraseña - + Sitio - + Nombre del usuario - + Usuarios - + Seleccione Tentan - + Nombre del inquilino - + Proveedor - + Nombre superior - + Seleccione superior - + Correo electrónico - + Clave - + Estado - + Confirmar contraseña - + Nombre para mostrar - + Establecer permisos - + Roles asignados - + Correo electrónico / Número de teléfono - + ¡Permiso eliminado con éxito! - + ¡Permiso agregado exitosamente! - + Restablecer la contraseña \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx index cc32a2704..a74e2dd69 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.fr-FR.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} la session a changé. - + Attribuer des rôles - + Cliquez sur télécharger une photo. - + Confirmer le nouveau mot de passe - + Confirmer le mot de passe est nécessaire ! - + Créer un nouvel utilisateur - + Modifier l'utilisateur - + Email - + Est actif - + Statut de verrouillage - + Nouveau mot de passe - + Le mot de passe est obligatoire ! - + Numéro de téléphone - + Réinitialiser le mot de passe avec succès - + Recherche du nom de l'utilisateur - + Actif - + Définir inactif - + Définir le mot de passe - + Site - + Nom de l'utilisateur - + Utilisateurs - + Sélectionnez Tentan - + Tenant Name - + Fournisseur - + Nom supérieur - + Sélectionnez Supérieur - + E-mail - + Mot de passe - + Statut - + Confirmez le mot de passe - + Afficher un nom - + Définir les autorisations - + Rôles attribués - + E-mail / Numéro de téléphone - + Autorisation supprimée avec succès ! - + Autorisation ajoutée avec succès ! - + réinitialiser le mot de passe \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx index 51b933f89..7fc321c31 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ja-JP.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0}セッションが変更されました。 - + ロールの割り当て - + 写真をアップロードするをクリックしてください。 - + 新しいパスワードの確認 - + パスワードの確認が必要です - + 新しいユーザーを作成する - + ユーザーを編集する - + 電子メール - + アクティブ - + ロック状況 - + 新規パスワード - + パスワードが必要です - + 電話番号 - + パスワードの再設定に成功しました。 - + ユーザー名で検索 - + アクティブに設定する - + 非アクティブに設定 - + パスワードの設定 - + サイト - + ユーザー名 - + ユーザー一覧 - + テンタンの選択 - + テナント名 - + プロバイダー - + 上司の名前 - + スーペリアを選択 - + Eメール - + パスワード - + 状態 - + パスワードを認証する - + 表示名 - + 権限を設定する - + 割り当てられた役割 - + メール/電話番号 - + 権限が正常に削除されました。 - + 権限が正常に追加されました。 - + パスワードを再設定する \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx index 9d2521e12..55926b8fa 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.km-KH.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} 세션이 변경되었습니다. - + 역할 할당 - + 사진 업로드를 클릭합니다. - + 새 암호를 확인합니다 - + 비밀번호 확인이 필요합니다! - + 새 사용자 만들기 - + 사용자 편집 - + 이메일 - + 활성 - + 잠금 상태 - + 새 비밀번호 - + 비밀번호가 필요합니다! - + 전화 번호 - + 비밀번호 재설정 성공 - + 사용자 이름 검색 - + 활성으로 설정 - + 비활성화 설정 - + 암호를 설정하세요 - + 대지 - + 사용자 이름 - + 사용자 - + ជ្រើស អ្នក ជួល - + 세입자 이름 - + 공급자 - + 상위 이름 - + 슈페리어 선택 - + 이메일 - + 비밀번호 - + 상태 - + 비밀번호 확인 - + 이름 표시하기 - + 권한 설정 - + 할당된 역할 - + 이메일/전화번호 - + 권한이 성공적으로 제거되었습니다! - + 권한이 성공적으로 추가되었습니다! - + 암호를 재설정 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.resx index 8191580b9..7e7468588 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.resx @@ -1,231 +1,236 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Assign Roles - + Click upload a photo. - + Confirm New Password - + confirm password is required! - + Create a new user - + Edit the user - + Email - + Is Active - + Lock Status - + New Password - + password is required! - + Phone Number - + Reset password successfully - + Search for user name - + Select Tenant - + Set Active - + Set Inactive - + Set Password - + Site - + Tenant Name - + User Name - + Users - + {0} session changed. - + Superior Name - + Provider - + Select Superior - + E-mail - + Password - + Status - + Confirm Password - + Display Name - + Set Permissions - + Assigned Roles - + Email / PhoneNumber - + Permission added successfully! - + Permission removed successfully! - + Reset Password \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx index 0c3eabbee..c02f78f00 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.ru.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} сессия изменена. - + Назначение ролей - + Нажмите загрузить фотографию. - + Подтверждение нового пароля - + подтверждение пароля обязательно! - + Создать нового пользователя - + Редактировать пользователя - + Email - + Активен - + Статус блокировки - + Новый пароль - + пароль обязателен! - + Номер телефона - + Пароль успешно восстановлен - + Поиск имени пользователя - + Установить активный - + Установить неактивный - + Установить пароль - + Сайт - + Имя пользователя - + Пользователи - + Выберите Тентан - + Имя арендатора - + Провайдер - + Высшее имя - + Выберите улучшенный - + Эл. почта - + Пароль - + Статус - + Подтвердить Пароль - + Показать имя - + Установить разрешения - + Назначенные роли - + Электронная почта / номер телефона - + Разрешение успешно удалено! - + Разрешение успешно добавлено! - + Сброс пароля \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx b/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx index eec6e69fb..5a8370c30 100644 --- a/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Identity/Users/Users.zh-CN.resx @@ -1,231 +1,236 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + {0} 会话更新 - + 分配角色 - + 颜色 - + 确认新密码 - + 确认密码必填 - + 创建新用户 - + 编辑用户 - + 电子邮件 - + 是否激活 - + 锁状态 - + 电话号码 - + 重置密码成功 - + 搜索 - + 激活 - + 暂停 - + 设置密码 - + 站点 - + 用户名 - + 系统账号 - + 新密码 - + 密码必填 - + 选择租户 - + 租户名称 - + 来源 - + 上级 - + 选择上级 - + 电子邮件 - + 登录密码 - + 状态 - + 确认密码 - + 显示名称 - + 设置权限 - + 分配角色 - + 电子邮件 / 电话 - + 权限删除成功 - + 授权成功 - + 重置密码 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx b/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx index ae7765c72..a3ce10ed5 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ar-IQ.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + اسم العلامة التجارية - + وصف - + ثمن - + حاصل الضرب - + اسم المنتج - + صور المنتج - + منتجات - + البحث عن العلامة التجارية - + البحث عن الحد الأقصى للسعر - + البحث عن الحد الأدنى للسعر - + البحث عن اسم المنتج - + البحث عن وحدة - + الحجم الموصى به لتحميل الصور هو 640X320 - + وحدة - + تحميل الصورة - + محو الصورة - + هل أنت متأكد أنك تريد محو هذه الصورة؟ \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx b/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx index 3863d82b1..a102750eb 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ca-ES.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Marca - + Preu - + Nom del producte - + Productes - + Unitat - + Descripció - + Producte - + Fotos del producte - + Buscar per marca - + Buscar per preu màxim - + Buscar el preu mínim - + Buscar el nom del producte - + Buscar l'unitat - + El tamany recomenat par a pujar imàtges és 640X320 - + Esteu segur que voleu esborrar aquesta imatge? - + Esborra la imatge - + Carrega la imatge \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx b/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx index fb5cd034c..c3e7effef 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.de-DE.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Markenname - + Preis - + Name des Produkts - + Produkte - + Einheit - + Suche nach Marke - + Suche nach Höchstpreis - + Suche nach Mindestpreis - + Suche nach Produktname - + Suche nach Einheit - + Beschreibung - + Produkt - + Produkt-Bilder - + Die empfohlene Größe für das Hochladen von Bildern ist 640X320 - + Bild hochladen - + Bild löschen - + Möchten Sie dieses Bild wirklich löschen? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.en.resx b/src/Server.UI/Resources/Pages/Products/Products.en.resx index 6cd03b2fc..dee192100 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.en.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.en.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Brand Name - + Price - + Product Name - + Products - + Unit - + Search for product name - + Search for unit - + Search for minimum price - + Search for maximum price - + Search for brand - + Description - + Product - + Product Pictures - + The recommended size for uploading images is 640X320 - + Are you sure you want to erase this image? - + Upload picture - + Erase image \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx b/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx index c8e5fd296..840a31412 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.es-ES.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Marca - + Precio - + Nombre del producto - + Productos - + Unidad - + Descripción - + Producto - + Fotos del producto - + Buscar por marca - + Buscar por precio máximo - + Buscar el precio mínimo - + Buscar el nombre del producto - + Buscar la unidad - + El tamaño recomendado para subir imágenes es 640X320 - + ¿Seguro que quieres borrar esta imagen? - + Borrar imagen - + Subir foto \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx b/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx index 26272ba2c..f6acfe894 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.fr-FR.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Nom de la marque - + Prix - + Nom du produit - + Produits - + Unité - + Description - + Produit - + Images du produit - + Rechercher une marque - + Recherche du prix maximum - + Recherche du prix minimum - + Recherche du nom du produit - + Recherche de l'unité - + La taille recommandée pour le téléchargement d'images est de 640X320. - + Charger une photo - + Effacer l'image - + Voulez-vous vraiment effacer cette image ? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx b/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx index 9b7c035e6..c84fd517b 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ja-JP.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + ブランド名 - + 価格 - + 製品名 - + 製品情報 - + 単位 - + 商品説明 - + 商品名 - + 製品写真 - + ブランド検索 - + 最高価格検索 - + 最低価格検索 - + 製品名を検索 - + 単位を検索する - + 画像のアップロードは640X320サイズを推奨します。 - + 写真をアップロードする - + 画像を消去する - + この画像を消去してもよろしいですか? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx b/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx index 176020557..76537f800 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.km-KH.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 상표명 - + 가격 - + 상품명 - + 제품 - + 단위 - + 브랜드 검색 - + 최고가 검색 - + 최저가 검색 - + 제품명 검색 - + 단위 검색 - + 설명 - + 제품 - + 제품 사진 - + 이미지 업로드 권장 크기는 640X320입니다. - + 사진 업로드 - + 이미지 지우기 - + 이 이미지를 지우시겠습니까? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.resx b/src/Server.UI/Resources/Pages/Products/Products.resx index fcc1bdd8b..53c1d2f48 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.resx @@ -1,171 +1,176 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Are you sure you want to erase this image? - + Brand Name - + Description - + Erase image - + Price - + Product - + Product Name - + Product Pictures - + Products - + Search for brand - + Search for maximum price - + Search for minimum price - + Search for product name - + Search for unit - + The recommended size for uploading images is 640X320 - + Unit - + Upload picture \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.ru.resx b/src/Server.UI/Resources/Pages/Products/Products.ru.resx index ee99a8cd5..58e0d7fd3 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.ru.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.ru.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Название бренда - + Цена - + Название продукта - + Продукты - + Единица - + Поиск максимальной цены - + Поиск бренда - + Поиск минимальной цены - + Поиск названия продукта - + Поиск единицы измерения - + Описание - + Продукт - + Изображения продукта - + Рекомендуемый размер загружаемых изображений - 640X320 - + Загрузить изображение - + Удалить изображение - + Вы уверены, что хотите стереть это изображение? \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx b/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx index 8e325ff0c..2c9181144 100644 --- a/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Products/Products.zh-CN.resx @@ -1,171 +1,176 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 品牌 - + 单价 - + 产品名称 - + 产品信息 - + 单位 - + 按品牌搜索 - + 最大单价 - + 最低单价 - + 按品名搜索 - + 按单位搜索 - + 产品 - + 描述 - + 产品图片 - + 建议上传的图片尺寸:640x320 - + 上传图片 - + 你确定要删除图片吗? - + 删除图片 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx index 476bd24b5..5060b433d 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ar-IQ.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + مسارات التدقيق - + نوع التدقيق - + التاريخ والوقت - + إخفاء التفاصيل - + المفتاح الأساسي - + اظهار التفاصيل - + اسم الجدول - + معرف المستخدم \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx index 3ef6062f8..899a37fc9 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ca-ES.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Registres d'auditoria - + Tipus d'auditoria - + Data Hora - + Amagar detalls - + Clau principal - + Mostrar detalls - + Nom de la taula - + Id. d'usuari \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx index ded189f47..5ee68aa94 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.de-DE.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Audit Trails - + Audit-Typ - + Datum Uhrzeit - + Details verbergen - + Primärer Schlüssel - + Details anzeigen - + Name der Tabelle - + Benutzer-ID \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx index 58fcb292e..7bf73f8dd 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.en.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Audit Trails - + Audit Type - + Created DateTime - + Hide Details - + Primary Key - + Show Details - + Table Name - + User Id \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx index 36897b11d..2f6d93c08 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.es-ES.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Registros de auditoría - + Tipo de auditoría - + Fecha Hora - + Ocultar detalles - + Clave principal - + Mostrar detalles - + Nombre de la mesa - + Id. de usuario \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx index 94d264742..a3edb0983 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.fr-FR.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Pistes d'audit - + Type d'audit - + Date Heure - + Cacher les détails - + Clé primaire - + Afficher les détails - + Nom de la table - + Id utilisateur \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx index fe261197d..c58185263 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ja-JP.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 監査証跡 - + 監査タイプ - + 日付 時間 - + 詳細を隠す - + 主キー - + 詳細を表示する - + テーブル名 - + ユーザーID \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx index 945cbd463..521f8cd78 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.km-KH.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 감사 추적 - + 감사 유형 - + 날짜 시간 - + 세부 정보 숨기기 - + 기본 키 - + 세부 정보 표시 - + 테이블 이름 - + 사용자 ID \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx index ee7870a6f..b12684e2c 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Audit Trails - + Audit Type - + Created DateTime - + Hide Details - + Primary Key - + Show Details - + Table Name - + User Id \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx index dbd8e4834..479150c31 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.ru.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Следы аудита - + Тип аудита - + Дата Время - + Скрыть подробности - + Основной ключ - + Показать подробности - + Имя таблицы - + Id пользователя \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx index b067d2d35..8c5bd806c 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/AuditTrails.zh-CN.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 安全审计 - + 变更类型 - + 创建时间 - + 隐藏明细 - + 主键 - + 显示明细 - + 表名 - + 用户编号 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx index e1d0fdd64..1c6dbfe94 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ar-IQ.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + تنفيذ التعديل - + وصف - + قائمة الانتقاء - + اسم - + قائمة الانتقاء - + البحث عن اسم الدور - + نص - + قيمة \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx index 4fb101ae4..d5191ed8b 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ca-ES.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmar Edició - + Descripció - + Llista de selecció - + Nom - + Llista de selecció - + Buscar el nom de la funció - + Tex - + Valor \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx index 792a46278..847a4e35d 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.de-DE.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Bestätigen Bearbeiten - + Beschreibung - + Auswahlliste - + Name - + Auswahlliste - + Suche nach Rollenname - + Text - + Wert \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx index a0ccbf6e9..798048916 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.en.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Commit Edit - + Description - + Picklist - + Name - + Picklist - + Search for role name - + Text - + Value \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx index 3c5441845..4e0609be7 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.es-ES.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Confirmar Edición - + Descripción - + Lista de selección - + Nombre - + Lista de selección - + Buscar el nombre de la función - + Texto - + Valor \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx index f3442f59a..428925c9f 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.fr-FR.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Commit Edit - + Description - + Liste de sélection - + Nom - + Liste de sélection - + Recherche d'un nom de rôle - + Texte - + Valeur \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx index c476e16a7..938d57ad1 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ja-JP.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 編集をコミットする - + 商品説明 - + ピックリスト - + 名前 - + ピックリスト - + ロール名を検索 - + テキスト - + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx index a6e5eb71b..8ae3078a2 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.km-KH.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 커밋 편집 - + 설명 - + 선택 목록 - + 이름 - + 선택 목록 - + 역할 이름 검색 - + 텍스트 - + \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx index 611f75963..2cb600361 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.resx @@ -1,144 +1,149 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Commit Edit - + Description - + Picklist - + Name - + Picklist - + Search for role name - + Text - + Value \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx index ee3bc04e5..1d28e25b6 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.ru.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Принять решение Редактировать - + Описание - + Пиклист - + Имя - + Picklist - + Поиск имени роли - + Текст - + Значение \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx index 9aa0f425a..1c57d6cdb 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Dictionaries.zh-CN.resx @@ -1,144 +1,149 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 提交编辑 - + 描述 - + 参数选用表 - + 参数名 - + 参数选用表 - + 搜索关键字 - + 文本 - + 文本的值 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx index 4daa676f4..eabe8ebbb 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ar-IQ.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + إخفاء التفاصيل - + مستوى - + سجلات - + رسالة - + اظهار التفاصيل - + الطابع الزمني - + اسم المستخدم \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx index 288d3a66a..c7ef71a05 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ca-ES.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Amagar detalls - + Nivell - + Registres - + Missatge - + Mostrar detalls - + Segell de temps - + Nom d'usuari \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx index 75cf00443..34653eff7 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.de-DE.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Details verbergen - + Ebene - + Logs - + Meldung - + Details anzeigen - + Zeitstempel - + Name des Benutzers \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx index 781ec4bd0..9538bada7 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.en.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Hide Details - + Level - + Logs - + Message - + Show Details - + Time Stamp - + User Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx index f0bae838c..86b9a2e25 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.es-ES.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Ocultar detalles - + Nivel - + Registros - + Mensaje - + Mostrar detalles - + Sello de tiempo - + Nombre de usuario \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx index 6019a3a9d..aac23d7fc 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.fr-FR.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Cacher les détails - + Niveau - + Logs - + Message - + Afficher les détails - + Horodatage - + Nom de l'utilisateur \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx index 6831545d4..4a11d3fc8 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ja-JP.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 詳細を隠す - + レベル - + ログ - + メッセージ - + 詳細を表示する - + タイムスタンプ - + ユーザー名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx index 8ac6c9721..d2ff0e242 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.km-KH.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 세부 정보 숨기기 - + 수준 - + 로그 - + 메시지 - + 세부 정보 표시 - + 타임 스탬프 - + 사용자 이름 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx index bdba8e0ac..9cedc034a 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.resx @@ -1,141 +1,146 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Hide Details - + Level - + Logs - + Message - + Show Details - + Time Stamp - + User Name \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx index d5d5fd99c..c877a7560 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.ru.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Скрыть информацию - + Уровень - + Журналы - + Сообщение - + Показать детали - + Штамп времени - + Имя пользователя \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx b/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx index de36b0726..59d78cc1c 100644 --- a/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/SystemManagement/Logs.zh-CN.resx @@ -1,141 +1,146 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 隐藏明细 - + 等级 - + 日志 - + 消息 - + 显示明细 - + 时间 - + 用户名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx index 4eb112b42..cc11aff15 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ar-IQ.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + إنشاء مستأجر جديد - + تحرير المستأجر - + متعدد المستأجرين - + مستاجر - + معرف المستأجر - + مطلوب معرف المستأجر! - + اسم المستأجر - + اسم المستأجر مطلوب! - + المستاجرين \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx index bb03de393..c7fd3b55c 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ca-ES.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Crear un nou Arrendatari - + Editar l'Arrendatari - + Multi-Arrendatari - + Arrendatar - + Id. del Arrendatari - + L'identificación de l'Arrendatari és obligatoria. - + Nom de l'Arrendatari - + El nombr de l'Arrendatari és obligatori. - + Arrendataris \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx index 4fbb6f5c7..c8e809d43 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.de-DE.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Neuen Mieter anlegen - + Bearbeiten Sie den Mieter - + Multi-Mandanten - + Mieter - + Mieter-ID - + Die Mieterkennung ist erforderlich! - + Mieter Name - + Der Name des Mieters ist erforderlich! - + Mieter \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx index c6e595808..9560862e8 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.en.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Create a new Tenant - + Edit the Tenant - + Multi-Tenant - + Tenant - + Tenant Id - + Tenant id is required! - + Tenant Name - + Tenant name is required! - + Tenants \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx index c40643271..6c8ae9c7f 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.es-ES.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Crear un nuevo Arrendatario - + Editar el inquilino - + Multi-Tenant - + Arrendatario - + Id. del inquilino - + La identificación del inquilino es obligatoria. - + Nombre del arrendatario - + El nombre del inquilino es obligatorio. - + Arrendatarios \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx index 0547e2a82..1013d6b8b 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.fr-FR.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Créer un nouveau locataire - + Modifier le locataire - + Multi-locataire - + Locataire - + Id du locataire - + L'identifiant du locataire est obligatoire ! - + Nom du locataire - + Le nom du locataire est obligatoire ! - + Locataires \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx index e87426642..be30d264c 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ja-JP.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + テナントの新規作成 - + テナントの編集 - + マルチテナント - + テナント - + テナントID - + テナントIDは必須です - + テナント名 - + テナント名は必須です - + テナント名 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx index 8ca39cb77..41d4f2916 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.km-KH.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 새 테넌트 만들기 - + 테넌트 편집 - + 멀티 테넌트 - + 거주자 - + 임차인 아이디 - + 임차인 아이디가 필요합니다! - + 세입자 이름 - + 임차인 이름은 필수 항목입니다! - + 세입자 \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.resx index 5615488f6..34152c425 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.resx @@ -1,147 +1,152 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Create a new Tenant - + Edit the Tenant - + Multi-Tenant - + Tenant - + Tenant Id - + Tenant id is required! - + Tenant Name - + Tenant name is required! - + Tenants \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx index d43c4521e..868ba0dfe 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.ru.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Создать нового арендатора - + Редактировать арендатора - + Многопользовательский - + Арендатор - + Идентификатор арендатора - + Идентификатор арендатора обязателен! - + Имя арендатора - + Имя арендатора обязательно! - + Арендаторы \ No newline at end of file diff --git a/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx b/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx index 2e9b7869b..b4a552155 100644 --- a/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx +++ b/src/Server.UI/Resources/Pages/Tenants/Tenants.zh-CN.resx @@ -1,147 +1,152 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 创建新租户 - + 编辑租户 - + 多租户 - + 租户 - + 租户编号 - + 租户编号必填 - + 租户名称 - + 租户名称必填 - + 租户 \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx b/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx index c34fcf0d7..3b7796943 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ar-IQ.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + المصادقة مطلوبة، انقر على - + المصادقة مطلوبة، انقر على تسجيل الدخول. - + إلغاء الأمر - + لون - + أكد - + حذف التأكيد - + عد للمنزل - + تسجيل الخروج - + الخروج - + تأكيد تسجيل الخروج - + وضع علامة كمقروءة - + طريقة - + لا شيء جديد :( - + الاخطارات - + ملف تعريف - + بحث... - + اعدادات - + تسجيل الدخول - + عذرا، لا يوجد شيء في هذا العنوان. - + المواضيع - + تحاول تسجيل الخروج من التطبيق. هل تريد حقا تسجيل الخروج؟ - + أنت غير مصرح لك بالتواجد هنا. لمزيد من المعلومات، اتصل بمسؤول النظام. - + قام {0} بتسجيل الخروج. - + قام {0} بتسجيل الدخول. - + ملف تعريفي للمستخدم - + إشعار \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx b/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx index ace75cdac..7e5b95006 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ca-ES.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + l'autenticació és necessària, feu clic a Iniciar sessió. - + Cancel·lar - + Color - + Confirmar - + Suprimeix la confirmació - + Anar a la pàgina d'inici - + Desconnectat - + Tancar sessió - + Confirmació de tancament de sessió - + Marcar com lleguit - + Mode - + Res nou :( - + Notificacions - + Perfil - + Buscar... - + Configuració - + Ho sentim, no hi ha res en aquesta adreça. - + Temes - + Esteu provant de tancar la sessió de l'aplicació. Realment voleu tancar la sessió? - + No estàs autoritzat per estar aquí. Per obtenir més informació, poseu-vos en contacte amb l'administrador del vostre sistema. - + l'autenticació és necessària, feu clic - + Iniciar sessió - + {0} ha tancat la sessió. - + {0} ha iniciat sessió. - + Perfil d'usuari - + Notificació \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx b/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx index cdd780147..25ea2a350 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.de-DE.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + eine Authentifizierung erforderlich ist, klicken Sie auf "Anmelden". - + Abbrechen - + Farbe - + Bestätigen Sie - + Löschen-Bestätigung - + Nach Hause gehen - + Abgemeldet - + Abmeldung - + Abmelde-Bestätigung - + Als gelesen markieren - + Modus - + Nichts Neues :( - + Benachrichtigungen - + Profil - + Suchen... - + Einstellungen - + Sorry, unter dieser Adresse gibt es nichts. - + Themen - + Sie versuchen, sich von der Anwendung abzumelden. Möchten Sie sich wirklich abmelden? - + Sie sind nicht berechtigt, hier zu sein. Für weitere Informationen wenden Sie sich bitte an Ihren Systemadministrator. - + eine Authentifizierung erforderlich ist, klicken Sie auf - + sign in - + {0} hat sich abgemeldet. - + {0} hat sich angemeldet. - + Benutzerprofil - + Benachrichtigung \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.en.resx b/src/Server.UI/Resources/Shared/SharedResource.en.resx index 059b998e0..1bd61701e 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.en.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.en.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + authentication is required, click sign in. - + Cancel - + Color - + Confirm - + Delete Confirmation - + Go Home - + Logged out - + Logout - + Logout Confirmation - + Mark as read - + Mode - + Nothing new :( - + Notifications - + Profile - + Search... - + Settings - + Sorry, there's nothing at this address. - + Themes - + You are attempting to log out of application. Do you really want to log out? - + You are not authorized to be here. For more information, contact your system administrator. - + authentication is required, click - + sign in - + User Profile - + Notification - + {0} has logged out. - + {0} has logged in. \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx b/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx index 65450c15d..545b1c13f 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.es-ES.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + se requiere autenticación, haga clic en iniciar sesión. - + Cancelar - + Color - + Confirmar - + Confirmación de eliminación - + Ir a la página de inicio - + Cerrar la sesión - + Cierre de sesión - + Confirmación de cierre de sesión - + Marcar como leído - + Modo - + Nada nuevo :( - + Notificaciones - + Perfil - + Buscar... - + Configuración - + Lo sentimos, no hay nada en esta dirección. - + Temas - + Está intentando cerrar la sesión de la aplicación. ¿Realmente quiere cerrar la sesión? - + No está autorizado a estar aquí. Para más información, póngase en contacto con el administrador del sistema. - + se requiere autenticación, haga clic en - + sign in - + {0} se ha desconectado. - + {0} ha iniciado sesión. - + Perfil del usuario - + Notificación \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx b/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx index 925b65b19..92d127906 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.fr-FR.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + Une authentification est requise, cliquez sur s'identifier. - + Annuler - + Couleur - + Confirmer - + Confirmation de suppression - + Aller à la page d'accueil - + Déconnecté - + Déconnexion - + Confirmation de la déconnexion - + Marquer comme lu - + Mode - + Rien de nouveau :( - + Notifications - + Profil - + Rechercher... - + Paramètres - + Désolé, il n'y a rien à cette adresse. - + Thèmes - + Vous tentez de vous déconnecter de l'application. Voulez-vous vraiment vous déconnecter ? - + Vous n'êtes pas autorisé à être ici. Pour plus d'informations, contactez votre administrateur système. - + Une authentification est requise, cliquez sur - + sign in - + {0} s'est déconnecté. - + {0} s'est connecté. - + Profil de l'utilisateur - + Notification \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx b/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx index 24fb1e5bd..a458e8641 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ja-JP.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 認証が必要な場合は、サインインをクリックしてください。 - + キャンセル - + カラー - + 確認 - + 削除確認 - + ホームへ戻る - + ログアウト - + ログアウト - + ログアウトの確認 - + 既読にする - + モード - + 新しいものはありません :( - + お知らせ - + プロフィール - + 検索... - + 設定項目 - + このアドレスには何もありません。 - + テーマ - + アプリケーションからログアウトしようとしています。本当にログアウトしますか? - + あなたはここにいる権限がありません。詳細については、システム管理者にお問い合わせください。 - + 認証が必要な場合は、サインインをクリックしてください。 - + sign in - + {0} がログアウトしました。 - + {0} がログインしました。 - + ユーザープロフィール - + 通知 \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx b/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx index 1e3c4b94f..d85b52845 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.km-KH.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 인증이 필요합니다. 로그인을 클릭하세요. - + 취소 - + 색깔 - + 확인하다 - + 삭제 확인 - + 집에가 - + 로그아웃 - + 로그 아웃 - + 로그아웃 확인 - + 읽은 상태로 표시 - + 방법 - + 새로운 것은 없다 :( - + 알림 - + 프로필 - + 검색... - + 설정 - + 죄송합니다. 이 주소에는 아무것도 없습니다. - + 테마 - + 애플리케이션에서 로그아웃을 시도하고 있습니다. 정말 로그아웃하시겠습니까? - + 당신은 여기에 올 권한이 없습니다. 자세한 내용은 시스템 관리자에게 문의하십시오. - + 인증이 필요합니다. 로그인을 클릭하세요. - + sign in - + {0}님이 로그아웃했습니다. - + {0}님이 로그인했습니다. - + 유저 프로필 - + 공고 \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.resx b/src/Server.UI/Resources/Shared/SharedResource.resx index 257db2415..5ee5a2985 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.resx @@ -1,198 +1,204 @@  - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + authentication is required, click - + authentication is required, click sign in. - + Cancel - + Color - + Confirm - + Delete Confirmation - + Go Home - + Logged out - + Logout - + Logout Confirmation - + Mark as read - + Mode - + Nothing new :( - + Notifications - + Profile - + Search... - + Settings - + sign in - + Sorry, there's nothing at this address. - + Themes - + You are attempting to log out of application. Do you really want to log out? - + You are not authorized to be here. For more information, contact your system administrator. - + Notification - + User Profile - + {0} has logged in. - + {0} has logged out. \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.ru.resx b/src/Server.UI/Resources/Shared/SharedResource.ru.resx index 533512f3b..0de9a5a72 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.ru.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.ru.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + требуется аутентификация, нажмите войти. - + Отменить - + Цвет - + Подтвердить - + Подтверждение удаления - + Перейти на главную страницу - + Вышел из системы - + Выход - + Подтверждение выхода из системы - + Пометить как прочитанное - + Режим - + Ничего нового :( - + Уведомления - + Профиль - + Поиск... - + Настройки - + Извините, по этому адресу ничего нет. - + Темы - + Вы пытаетесь выйти из приложения. Вы действительно хотите выйти из приложения? - + Вы не авторизованы здесь. Для получения дополнительной информации обратитесь к своему системному администратору. - + требуется аутентификация, нажмите - + sign in - + {0} вышел из системы. - + {0} вошел в систему. - + Профиль пользователя - + Уведомление \ No newline at end of file diff --git a/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx b/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx index aa5acb969..8a784a378 100644 --- a/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx +++ b/src/Server.UI/Resources/Shared/SharedResource.zh-CN.resx @@ -1,198 +1,204 @@ - - - - - - - + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + 需要登录后访问, 单击“登录”. - + 返回首页 - + 对不起, 没有这个地址. - + 你无权来这里。有关更多信息,请与系统管理员联系。 - + 注销 - + 简档 - + 设置 - + 取消 - + 确认 - + 删除确认 - + 已注销 - + 注销确认 - + 您正试图注销应用程序.您真的想退出吗? - + 颜色 - + 模式 - + 主题 - + 标记已读 - + 没有新消息 :( - + 通知 - + 搜索 - + 登录 - + 需要登录后访问, 单击 - + 新消息 - + 用户信息 - + {0} 已经注销. - + {0} 登录 \ No newline at end of file diff --git a/src/Server.UI/Server.UI.csproj b/src/Server.UI/Server.UI.csproj index 836706d42..b0c535b64 100644 --- a/src/Server.UI/Server.UI.csproj +++ b/src/Server.UI/Server.UI.csproj @@ -15,18 +15,18 @@ - + - + - - - - + + + + - + \ No newline at end of file diff --git a/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs b/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs index ad12eca58..4ac70df07 100644 --- a/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs +++ b/src/Server.UI/Services/BlazorAuthenticationStateProvider.cs @@ -3,30 +3,32 @@ using Microsoft.AspNetCore.Components.Authorization; namespace CleanArchitecture.Blazor.Server.UI.Services; -public class BlazorAuthenticationStateProvider : AuthenticationStateProvider + +public class BlazorAuthenticationStateProvider : AuthenticationStateProvider { private readonly IAccessTokenProvider _tokenProvider; - public BlazorAuthenticationStateProvider(IAccessTokenProvider tokenProvider) + public BlazorAuthenticationStateProvider(IAccessTokenProvider tokenProvider) { _tokenProvider = tokenProvider; } public override async Task GetAuthenticationStateAsync() { - var claimsPrincipal =await _tokenProvider.GetClaimsPrincipal(); + var claimsPrincipal = await _tokenProvider.GetClaimsPrincipal(); return new AuthenticationState(claimsPrincipal); } + public void MarkUserAsAuthenticated(ClaimsPrincipal authenticatedUser) { var authState = Task.FromResult(new AuthenticationState(authenticatedUser)); NotifyAuthenticationStateChanged(authState); } + public void MarkUserAsLoggedOut() { var anonymousUser = new ClaimsPrincipal(new ClaimsIdentity()); var authState = Task.FromResult(new AuthenticationState(anonymousUser)); NotifyAuthenticationStateChanged(authState); } -} - +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/Fancybox.cs b/src/Server.UI/Services/JsInterop/Fancybox.cs index 6d8f225ae..39d65c5bd 100644 --- a/src/Server.UI/Services/JsInterop/Fancybox.cs +++ b/src/Server.UI/Services/JsInterop/Fancybox.cs @@ -1,5 +1,4 @@ - -using Microsoft.JSInterop; +using Microsoft.JSInterop; namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; @@ -11,9 +10,11 @@ public Fancybox(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Preview(string defaultUrl, IEnumerable images) { var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/fancybox.js"); - return jsmodule.InvokeVoidAsync(JSInteropConstants.PreviewImage, defaultUrl, images.Select(x => x.Url).ToArray()); + return jsmodule.InvokeVoidAsync(JSInteropConstants.PreviewImage, defaultUrl, + images.Select(x => x.Url).ToArray()); } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/InputClear.cs b/src/Server.UI/Services/JsInterop/InputClear.cs index 801426c0f..2c75aa089 100644 --- a/src/Server.UI/Services/JsInterop/InputClear.cs +++ b/src/Server.UI/Services/JsInterop/InputClear.cs @@ -2,8 +2,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; - -public partial class InputClear +public class InputClear { private readonly IJSRuntime _jsRuntime; @@ -11,11 +10,10 @@ public InputClear(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Clear(string targetId) { var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/clearinput.js"); return jsmodule.InvokeVoidAsync(JSInteropConstants.ClearInput, targetId); } - - -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/JSInteropConstants.cs b/src/Server.UI/Services/JsInterop/JSInteropConstants.cs index 5b7e8ecba..5838fb169 100644 --- a/src/Server.UI/Services/JsInterop/JSInteropConstants.cs +++ b/src/Server.UI/Services/JsInterop/JSInteropConstants.cs @@ -2,8 +2,8 @@ public class JSInteropConstants { - public static string ShowOpenSeadragon="showOpenSeadragon"; + public static string ShowOpenSeadragon = "showOpenSeadragon"; public static string ClearInput = "clearInput"; public static string PreviewImage = "previewImage"; public static string CreateOrgChart = "createOrgChart"; -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/OpenSeadragon.cs b/src/Server.UI/Services/JsInterop/OpenSeadragon.cs index c1dc349c6..45fe637d7 100644 --- a/src/Server.UI/Services/JsInterop/OpenSeadragon.cs +++ b/src/Server.UI/Services/JsInterop/OpenSeadragon.cs @@ -2,7 +2,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; -public partial class OpenSeadragon +public class OpenSeadragon { private readonly IJSRuntime _jsRuntime; @@ -10,12 +10,11 @@ public OpenSeadragon(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Open(string url) { var target = "openseadragon"; var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/openseadragon.js"); return jsmodule.InvokeVoidAsync(JSInteropConstants.ShowOpenSeadragon, target, url); } - - -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/JsInterop/OrgChart.cs b/src/Server.UI/Services/JsInterop/OrgChart.cs index 503e38442..c49f7357b 100644 --- a/src/Server.UI/Services/JsInterop/OrgChart.cs +++ b/src/Server.UI/Services/JsInterop/OrgChart.cs @@ -3,7 +3,7 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.JsInterop; -public partial class OrgChart +public class OrgChart { private readonly IJSRuntime _jsRuntime; @@ -11,9 +11,10 @@ public OrgChart(IJSRuntime jsRuntime) { _jsRuntime = jsRuntime; } + public async Task Create(List data) { var jsmodule = await _jsRuntime.InvokeAsync("import", "/js/orgchart.js"); return jsmodule.InvokeVoidAsync("createOrgChart", data); } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/Layout/LayoutService.cs b/src/Server.UI/Services/Layout/LayoutService.cs index 2772a41a3..d7784b2f6 100644 --- a/src/Server.UI/Services/Layout/LayoutService.cs +++ b/src/Server.UI/Services/Layout/LayoutService.cs @@ -6,17 +6,10 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Layout; public class LayoutService { - private bool _systemPreferences; private readonly IUserPreferencesService _userPreferencesService; - private UserPreferences.UserPreferences _userPreferences=new(); + private bool _systemPreferences; + private UserPreferences.UserPreferences _userPreferences = new(); public DarkLightMode DarkModeToggle = DarkLightMode.System; - public bool IsRTL { get; private set; } = false; - public bool IsDarkMode { get; private set; } = false; - public string PrimaryColor { get; set; } = "#2d4275"; - public string SecondaryColor { get; set; } = "#ff4081ff"; - public double BorderRadius { get; set; } = 4; - public double DefaultFontSize { get; set; } = 0.8125; - public MudTheme CurrentTheme { get; private set; } = new(); public LayoutService(IUserPreferencesService userPreferencesService) @@ -24,6 +17,14 @@ public LayoutService(IUserPreferencesService userPreferencesService) _userPreferencesService = userPreferencesService; } + public bool IsRTL { get; private set; } + public bool IsDarkMode { get; private set; } + public string PrimaryColor { get; set; } = "#2d4275"; + public string SecondaryColor { get; set; } = "#ff4081ff"; + public double BorderRadius { get; set; } = 4; + public double DefaultFontSize { get; set; } = 0.8125; + public MudTheme CurrentTheme { get; private set; } = new(); + public void SetDarkMode(bool value) { IsDarkMode = value; @@ -34,7 +35,7 @@ public void SetDarkMode(bool value) _userPreferences = await _userPreferencesService.LoadUserPreferences(); if (_userPreferences != null) { - IsDarkMode = _userPreferences.DarkLightTheme switch + IsDarkMode = _userPreferences.DarkLightTheme switch { DarkLightMode.Dark => true, DarkLightMode.Light => false, @@ -52,14 +53,22 @@ public void SetDarkMode(bool value) CurrentTheme.PaletteDark.PrimaryDarken = _userPreferences.PrimaryDarken; CurrentTheme.PaletteDark.PrimaryLighten = _userPreferences.PrimaryLighten; CurrentTheme.LayoutProperties.DefaultBorderRadius = BorderRadius + "px"; - CurrentTheme.Typography.Default.FontSize = DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Button.FontSize = _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body1.FontSize = _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body2.FontSize = _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Caption.FontSize = _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Overline.FontSize = _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle1.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle2.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Default.FontSize = + DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Button.FontSize = + _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body1.FontSize = + _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body2.FontSize = + _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Caption.FontSize = + _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Overline.FontSize = + _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle1.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle2.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; } else { @@ -67,14 +76,18 @@ public void SetDarkMode(bool value) _userPreferences = new UserPreferences.UserPreferences { IsDarkMode = IsDarkMode }; await _userPreferencesService.SaveUserPreferences(_userPreferences); } + return _userPreferences; } public event EventHandler? MajorUpdateOccured; - private void OnMajorUpdateOccured() => MajorUpdateOccured?.Invoke(this, EventArgs.Empty); + private void OnMajorUpdateOccured() + { + MajorUpdateOccured?.Invoke(this, EventArgs.Empty); + } - public Task OnSystemPreferenceChanged(bool newValue) + public Task OnSystemPreferenceChanged(bool newValue) { _systemPreferences = newValue; if (DarkModeToggle == DarkLightMode.System) @@ -82,8 +95,10 @@ public Task OnSystemPreferenceChanged(bool newValue) IsDarkMode = newValue; OnMajorUpdateOccured(); } + return Task.CompletedTask; } + public async Task ToggleDarkMode() { switch (DarkModeToggle) @@ -106,6 +121,7 @@ public async Task ToggleDarkMode() await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task ToggleRightToLeft() { IsRTL = !IsRTL; @@ -113,13 +129,13 @@ public async Task ToggleRightToLeft() await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } - + public async Task SetRightToLeft() { if (!IsRTL) await ToggleRightToLeft(); } - + public async Task SetLeftToRight() { if (IsRTL) @@ -137,7 +153,8 @@ public void SetBaseTheme(MudTheme theme) } CurrentTheme.LayoutProperties.DefaultBorderRadius = BorderRadius + "px"; - CurrentTheme.Typography.Default.FontSize = DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; //Added + CurrentTheme.Typography.Default.FontSize = + DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; //Added OnMajorUpdateOccured(); } @@ -150,6 +167,7 @@ public async Task SetPrimaryColor(string color) await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task SetSecondaryColor(string color) { SecondaryColor = color; @@ -159,6 +177,7 @@ public async Task SetSecondaryColor(string color) await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task SetBorderRadius(double size) { BorderRadius = size; @@ -167,6 +186,7 @@ public async Task SetBorderRadius(double size) await _userPreferencesService.SaveUserPreferences(_userPreferences); OnMajorUpdateOccured(); } + public async Task UpdateUserPreferences(UserPreferences.UserPreferences preferences) { _userPreferences = preferences; @@ -174,7 +194,7 @@ public async Task UpdateUserPreferences(UserPreferences.UserPreferences preferen { DarkLightMode.Dark => true, DarkLightMode.Light => false, - DarkLightMode.System => _systemPreferences=true, + DarkLightMode.System => _systemPreferences = true, _ => IsDarkMode }; IsRTL = _userPreferences.RightToLeft; @@ -188,19 +208,24 @@ public async Task UpdateUserPreferences(UserPreferences.UserPreferences preferen CurrentTheme.PaletteDark.PrimaryDarken = _userPreferences.PrimaryDarken; CurrentTheme.PaletteDark.PrimaryLighten = _userPreferences.PrimaryLighten; CurrentTheme.LayoutProperties.DefaultBorderRadius = BorderRadius + "px"; - CurrentTheme.Typography.Default.FontSize = DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Button.FontSize = _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body1.FontSize = _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Body2.FontSize = _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Caption.FontSize = _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Overline.FontSize = _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle1.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - CurrentTheme.Typography.Subtitle2.FontSize = _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; - + CurrentTheme.Typography.Default.FontSize = + DefaultFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Button.FontSize = + _userPreferences.ButtonFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body1.FontSize = + _userPreferences.Body1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Body2.FontSize = + _userPreferences.Body2FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Caption.FontSize = + _userPreferences.CaptionFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Overline.FontSize = + _userPreferences.OverlineFontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle1.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; + CurrentTheme.Typography.Subtitle2.FontSize = + _userPreferences.Subtitle1FontSize.ToString("0.0000", CultureInfo.InvariantCulture) + "rem"; await _userPreferencesService.SaveUserPreferences(_userPreferences); - - } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/Navigation/IMenuService.cs b/src/Server.UI/Services/Navigation/IMenuService.cs index 674ac0869..8a8a89154 100644 --- a/src/Server.UI/Services/Navigation/IMenuService.cs +++ b/src/Server.UI/Services/Navigation/IMenuService.cs @@ -5,4 +5,4 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Navigation; public interface IMenuService { IEnumerable Features { get; } -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/Notifications/INotificationsService.cs b/src/Server.UI/Services/Notifications/INotificationsService.cs index b41f39c62..30959c798 100644 --- a/src/Server.UI/Services/Notifications/INotificationsService.cs +++ b/src/Server.UI/Services/Notifications/INotificationsService.cs @@ -2,7 +2,6 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Notifications; public interface INotificationService { - Task AreNewNotificationsAvailable(); Task MarkNotificationsAsRead(); Task MarkNotificationsAsRead(string id); diff --git a/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs b/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs index 32c7dc4b7..daa328abe 100644 --- a/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs +++ b/src/Server.UI/Services/Notifications/InMemoryNotificationService.cs @@ -19,27 +19,6 @@ public InMemoryNotificationService(ProtectedLocalStorage localStorageService, _messages = new List(); } - private async Task GetLastReadTimestamp() - { - try - { - if ((await _localStorageService.GetAsync(LocalStorageKey)).Success == false) - { - return DateTime.MinValue; - } - else - { - var timestamp = await _localStorageService.GetAsync(LocalStorageKey); - return timestamp.Value; - } - } - catch (CryptographicException) - { - await _localStorageService.DeleteAsync(LocalStorageKey); - return DateTime.MinValue; - } - } - public async Task AreNewNotificationsAvailable() { var timestamp = await GetLastReadTimestamp(); @@ -56,18 +35,16 @@ public async Task MarkNotificationsAsRead() public async Task MarkNotificationsAsRead(string id) { var message = await GetMessageById(id); - if (message == null) { return; } + if (message == null) return; var timestamp = await _localStorageService.GetAsync(LocalStorageKey); - if (timestamp.Success) - { - await _localStorageService.SetAsync(LocalStorageKey, message.PublishDate); - } - + if (timestamp.Success) await _localStorageService.SetAsync(LocalStorageKey, message.PublishDate); } - public Task GetMessageById(string id) => - Task.FromResult(_messages.First((x => x.Id == id))); + public Task GetMessageById(string id) + { + return Task.FromResult(_messages.First(x => x.Id == id)); + } public async Task> GetNotifications() { @@ -82,6 +59,25 @@ public Task AddNotification(NotificationMessage message) return Task.CompletedTask; } + private async Task GetLastReadTimestamp() + { + try + { + if ((await _localStorageService.GetAsync(LocalStorageKey)).Success == false) + { + return DateTime.MinValue; + } + + var timestamp = await _localStorageService.GetAsync(LocalStorageKey); + return timestamp.Value; + } + catch (CryptographicException) + { + await _localStorageService.DeleteAsync(LocalStorageKey); + return DateTime.MinValue; + } + } + public void Preload() { diff --git a/src/Server.UI/Services/Notifications/NotificationMessages.cs b/src/Server.UI/Services/Notifications/NotificationMessages.cs index 5577d6fe6..4a0b25572 100644 --- a/src/Server.UI/Services/Notifications/NotificationMessages.cs +++ b/src/Server.UI/Services/Notifications/NotificationMessages.cs @@ -1,5 +1,13 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.Notifications; public record NotificationAuthor(string DisplayName, string AvatarUlr); -public record NotificationMessage(string Id, string Title, string Except, string Category, DateTime PublishDate, string ImgUrl, IEnumerable Authors, Type ContentComponent); +public record NotificationMessage( + string Id, + string Title, + string Except, + string Category, + DateTime PublishDate, + string ImgUrl, + IEnumerable Authors, + Type ContentComponent); \ No newline at end of file diff --git a/src/Server.UI/Services/UserPreferences/UserPreferences.cs b/src/Server.UI/Services/UserPreferences/UserPreferences.cs index e9a4d52c9..07b5109c7 100644 --- a/src/Server.UI/Services/UserPreferences/UserPreferences.cs +++ b/src/Server.UI/Services/UserPreferences/UserPreferences.cs @@ -2,21 +2,24 @@ // MudBlazor licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. +using System.Globalization; + namespace CleanArchitecture.Blazor.Server.UI.Services.UserPreferences; public class UserPreferences { /// - /// Set the direction layout of the docs to RTL or LTR. If true RTL is used + /// Set the direction layout of the docs to RTL or LTR. If true RTL is used /// public bool RightToLeft { get; set; } /// - /// If true DarkTheme is used. LightTheme otherwise + /// If true DarkTheme is used. LightTheme otherwise /// public bool IsDarkMode { get; set; } + public string PrimaryColor { get; set; } = "#2d4275"; - public string PrimaryDarken => AdjustBrightness(PrimaryColor,0.8); + public string PrimaryDarken => AdjustBrightness(PrimaryColor, 0.8); public string PrimaryLighten => AdjustBrightness(PrimaryColor, 0.7); public string SecondaryColor { get; set; } = "#ff4081ff"; public double BorderRadius { get; set; } = 4; @@ -26,7 +29,7 @@ public class UserPreferences public double Body2FontSize => DefaultFontSize - 0.125; public double ButtonFontSize => DefaultFontSize; public double CaptionFontSize => DefaultFontSize - 0.125; - public double OverlineFontSize=> DefaultFontSize - 0.125; + public double OverlineFontSize => DefaultFontSize - 0.125; public double Subtitle1FontSize => DefaultFontSize + 0.125; public double Subtitle2FontSize => DefaultFontSize; public DarkLightMode DarkLightTheme { get; set; } @@ -34,30 +37,25 @@ public class UserPreferences private string AdjustBrightness(string hexColor, double factor) { - if (hexColor.StartsWith("#")) - { - hexColor = hexColor.Substring(1); // 删除#前缀,如果存在 - } + if (hexColor.StartsWith("#")) hexColor = hexColor.Substring(1); // 删除#前缀,如果存在 - if (hexColor.Length != 6) - { - throw new ArgumentException("Invalid hex color code. It must be 6 characters long."); - } + if (hexColor.Length != 6) throw new ArgumentException("Invalid hex color code. It must be 6 characters long."); - int r = int.Parse(hexColor.Substring(0, 2), System.Globalization.NumberStyles.HexNumber); - int g = int.Parse(hexColor.Substring(2, 2), System.Globalization.NumberStyles.HexNumber); - int b = int.Parse(hexColor.Substring(4, 2), System.Globalization.NumberStyles.HexNumber); + var r = int.Parse(hexColor.Substring(0, 2), NumberStyles.HexNumber); + var g = int.Parse(hexColor.Substring(2, 2), NumberStyles.HexNumber); + var b = int.Parse(hexColor.Substring(4, 2), NumberStyles.HexNumber); - int newR = (int)Math.Clamp(r * factor, 0, 255); - int newG = (int)Math.Clamp(g * factor, 0, 255); - int newB = (int)Math.Clamp(b * factor, 0, 255); + var newR = (int)Math.Clamp(r * factor, 0, 255); + var newG = (int)Math.Clamp(g * factor, 0, 255); + var newB = (int)Math.Clamp(b * factor, 0, 255); return $"#{newR:X2}{newG:X2}{newB:X2}"; } } + public enum DarkLightMode { System = 0, Light = 1, Dark = 2 -} +} \ No newline at end of file diff --git a/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs b/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs index 25ff609c6..37f58ad98 100644 --- a/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs +++ b/src/Server.UI/Services/UserPreferences/UserPreferencesService.cs @@ -10,13 +10,13 @@ namespace CleanArchitecture.Blazor.Server.UI.Services.UserPreferences; public interface IUserPreferencesService { /// - /// Saves UserPreferences in local storage + /// Saves UserPreferences in local storage /// /// The userPreferences to save in the local storage public Task SaveUserPreferences(UserPreferences userPreferences); /// - /// Loads UserPreferences in local storage + /// Loads UserPreferences in local storage /// /// UserPreferences object. Null when no settings were found. public Task LoadUserPreferences(); @@ -24,8 +24,8 @@ public interface IUserPreferencesService public class UserPreferencesService : IUserPreferencesService { - private readonly ProtectedLocalStorage _localStorage; private const string Key = "userPreferences"; + private readonly ProtectedLocalStorage _localStorage; public UserPreferencesService(ProtectedLocalStorage localStorage) { @@ -42,10 +42,7 @@ public async Task LoadUserPreferences() try { var result = await _localStorage.GetAsync(Key); - if (result.Success && result.Value is not null) - { - return result.Value; - } + if (result.Success && result.Value is not null) return result.Value; return new UserPreferences(); } catch (CryptographicException) @@ -53,7 +50,5 @@ public async Task LoadUserPreferences() await _localStorage.DeleteAsync(Key); return new UserPreferences(); } - } -} - +} \ No newline at end of file diff --git a/src/Server.UI/_Imports.cs b/src/Server.UI/_Imports.cs index 0c9af6654..5bb6c7da3 100644 --- a/src/Server.UI/_Imports.cs +++ b/src/Server.UI/_Imports.cs @@ -15,4 +15,4 @@ global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.Logging; global using MudBlazor; -global using Severity = MudBlazor.Severity; +global using Severity = MudBlazor.Severity; \ No newline at end of file diff --git a/src/Server.UI/_Imports.razor b/src/Server.UI/_Imports.razor index 26456a8cb..6b78d9665 100644 --- a/src/Server.UI/_Imports.razor +++ b/src/Server.UI/_Imports.razor @@ -17,7 +17,7 @@ @using MudExtensions.Enums @using BlazorTime @using MediatR -@using Fluxor +@using CleanArchitecture.Blazor.Server.UI.Fluxor @using AutoMapper @using FluentValidation; @using CleanArchitecture.Blazor.Domain @@ -50,5 +50,4 @@ @inject ISnackbar Snackbar @inject IDialogService DialogService @inject IConfiguration Config -@inject IAuthorizationService AuthService - +@inject IAuthorizationService AuthService \ No newline at end of file diff --git a/src/Server.UI/appsettings.json b/src/Server.UI/appsettings.json index 1e9245973..b77db2d3a 100644 --- a/src/Server.UI/appsettings.json +++ b/src/Server.UI/appsettings.json @@ -80,7 +80,7 @@ "IdentitySettings": { "RequireDigit": false, "RequiredLength": 2, - "MaxLength":16, + "MaxLength": 16, "RequireNonAlphanumeric": false, "RequireUpperCase": false, "RequireLowerCase": false, diff --git a/src/Server.UI/wwwroot/js/appInterop.js b/src/Server.UI/wwwroot/js/appInterop.js index 840da4507..ea5aa658f 100644 --- a/src/Server.UI/wwwroot/js/appInterop.js +++ b/src/Server.UI/wwwroot/js/appInterop.js @@ -1,9 +1,13 @@ -import { dotnet } from './notnet.js' +import {dotnet} from './notnet.js' import OpenSeadragon from 'https://cdnjs.cloudflare.com/ajax/libs/openseadragon/3.1.0/openseadragon.min.js'; -const { setModelImports, getAssemblyExports, getConfig } = await dotnet.withDiagnosticTracing(false).withApplicationArgumentsFromQuery().create(); +const { + setModelImports, + getAssemblyExports, + getConfig +} = await dotnet.withDiagnosticTracing(false).withApplicationArgumentsFromQuery().create(); setModelImports('appInterop.js', { window: { @@ -21,21 +25,17 @@ setModelImports('appInterop.js', { tileSources: { xmlns: "http://schemas.microsoft.com/deepzoom/2008", type: 'image', - url: url, + url, } }); console.log(viewer); } } -}) - +}); const config = getConfig(); const exports = await getAssemblyExports(config.mainAssemblyName); - - - await dotnet.run(); \ No newline at end of file diff --git a/src/Server.UI/wwwroot/js/fancybox.js b/src/Server.UI/wwwroot/js/fancybox.js index 7f1047f90..a2f1e1980 100644 --- a/src/Server.UI/wwwroot/js/fancybox.js +++ b/src/Server.UI/wwwroot/js/fancybox.js @@ -1,13 +1,14 @@ -import { Fancybox } from "https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.esm.js"; +import {Fancybox} from "https://cdn.jsdelivr.net/npm/@fancyapps/ui@5.0/dist/fancybox/fancybox.esm.js"; + export function previewImage(url, gallery) { if (url == null) return; if (isImageUrl(url)) { let images = []; if (gallery != null) { - images = gallery.filter(l => isImageUrl(l)).map(x => ({ src: x, caption: x.split("/").pop() })); + images = gallery.filter(l => isImageUrl(l)).map(x => ({src: x, caption: x.split("/").pop()})); } else { - images = [{ src: url, caption: url.split("/").pop() }]; + images = [{src: url, caption: url.split("/").pop()}]; } const fancybox = new Fancybox(images); } else { @@ -18,6 +19,7 @@ export function previewImage(url, gallery) { anchorElement.remove(); } } + function isImageUrl(url) { const imageExtensions = /\.(gif|jpe?g|tiff?|png|webp|bmp)$/i; return imageExtensions.test(url); diff --git a/src/Server.UI/wwwroot/js/msal/authConfig.js b/src/Server.UI/wwwroot/js/msal/authConfig.js index 1d660b5b8..7002a2a7f 100644 --- a/src/Server.UI/wwwroot/js/msal/authConfig.js +++ b/src/Server.UI/wwwroot/js/msal/authConfig.js @@ -65,4 +65,4 @@ const silentRequest = { scopes: ["openid", "profile", "User.Read", "Mail.Read"] }; -const logoutRequest = {} +const logoutRequest = {}; diff --git a/src/Server.UI/wwwroot/js/openseadragon.js b/src/Server.UI/wwwroot/js/openseadragon.js index 32b55af20..b1acc991b 100644 --- a/src/Server.UI/wwwroot/js/openseadragon.js +++ b/src/Server.UI/wwwroot/js/openseadragon.js @@ -13,7 +13,7 @@ export function showOpenSeadragon(element, url) { tileSources: { xmlns: "http://schemas.microsoft.com/deepzoom/2008", type: 'image', - url: url, + url, } }); console.log(viewer) diff --git a/src/Server.UI/wwwroot/js/orgchart.js b/src/Server.UI/wwwroot/js/orgchart.js index 1b21ad8f0..a745484dc 100644 --- a/src/Server.UI/wwwroot/js/orgchart.js +++ b/src/Server.UI/wwwroot/js/orgchart.js @@ -1,16 +1,16 @@ -import { OrgChart } from 'https://cdn.jsdelivr.net/npm/d3-org-chart@3.1.1/+esm' +import {OrgChart} from 'https://cdn.jsdelivr.net/npm/d3-org-chart@3.1.1/+esm' export function createOrgChart(orgdata) { - let chart + let chart; setTimeout(function () { //console.log(orgdata) const activeid = orgdata.find(x => x.isLoggedUser == true); chart = new OrgChart() - .nodeHeight((d) => 85 + 25) - .nodeWidth((d) => 220 + 2) - .childrenMargin((d) => 50) - .compactMarginBetween((d) => 35) - .compactMarginPair((d) => 30) + .nodeHeight(d => 85 + 25) + .nodeWidth(d => 220 + 2) + .childrenMargin(d => 50) + .compactMarginBetween(d => 35) + .compactMarginPair(d => 30) .neighbourMargin((a, b) => 20) .nodeContent(function (d, i, arr, state) { const color = '#FFFFFF'; diff --git a/src/Server/Common/Interfaces/ISignalRHub.cs b/src/Server/Common/Interfaces/ISignalRHub.cs index 80fa8cffc..e195421ea 100644 --- a/src/Server/Common/Interfaces/ISignalRHub.cs +++ b/src/Server/Common/Interfaces/ISignalRHub.cs @@ -1,4 +1,5 @@ namespace CleanArchitecture.Blazor.Server.Common.Interfaces; + public interface ISignalRHub { public const string Url = "/signalRHub"; diff --git a/src/Server/DependencyInjection.cs b/src/Server/DependencyInjection.cs index a6a687ee7..4d1f55ffb 100644 --- a/src/Server/DependencyInjection.cs +++ b/src/Server/DependencyInjection.cs @@ -23,10 +23,10 @@ public static IServiceCollection AddServer(this IServiceCollection services, ICo .AddLocalization(options => options.ResourcesPath = LocalizationConstants.ResourcesPath); services.AddHangfire(configuration => configuration - .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) - .UseSimpleAssemblyNameTypeSerializer() - .UseRecommendedSerializerSettings() - .UseInMemoryStorage()) + .SetDataCompatibilityLevel(CompatibilityLevel.Version_170) + .UseSimpleAssemblyNameTypeSerializer() + .UseRecommendedSerializerSettings() + .UseInMemoryStorage()) .AddHangfireServer() .AddMvc(); @@ -42,9 +42,7 @@ public static IServiceCollection AddServer(this IServiceCollection services, ICo if (privacySettings!.UseGoogleAnalytics) { if (privacySettings.GoogleAnalyticsKey is null or "") - { throw new ArgumentNullException(nameof(privacySettings.GoogleAnalyticsKey)); - } services.AddGoogleAnalytics(privacySettings.GoogleAnalyticsKey); } diff --git a/src/Server/EndPoints/AuthController.cs b/src/Server/EndPoints/AuthController.cs index 1d4bab9f4..2d9fe9848 100644 --- a/src/Server/EndPoints/AuthController.cs +++ b/src/Server/EndPoints/AuthController.cs @@ -7,12 +7,13 @@ using Microsoft.AspNetCore.Mvc; namespace CleanArchitecture.Blazor.Server.EndPoints; + public class AuthController : Controller { - private readonly ILogger _logger; private readonly IDataProtectionProvider _dataProtectionProvider; - private readonly UserManager _userManager; + private readonly ILogger _logger; private readonly SignInManager _signInManager; + private readonly UserManager _userManager; public AuthController( ILogger logger, @@ -26,6 +27,7 @@ SignInManager signInManager _userManager = userManager; _signInManager = signInManager; } + [HttpGet("/auth/login")] [AllowAnonymous] public async Task Login(string token, string returnUrl) @@ -34,11 +36,9 @@ public async Task Login(string token, string returnUrl) var data = dataProtector.Unprotect(token); var parts = data.Split('|'); var identityUser = await _userManager.FindByIdAsync(parts[0]); - if (identityUser == null) - { - return Unauthorized(); - } - var isTokenValid = await _userManager.VerifyUserTokenAsync(identityUser, TokenOptions.DefaultProvider, "Login", parts[1]); + if (identityUser == null) return Unauthorized(); + var isTokenValid = + await _userManager.VerifyUserTokenAsync(identityUser, TokenOptions.DefaultProvider, "Login", parts[1]); if (isTokenValid) { var isPersistent = true; @@ -52,6 +52,7 @@ public async Task Login(string token, string returnUrl) return Unauthorized(); } + [HttpGet("/auth/externallogin")] [AllowAnonymous] public async Task ExternalLogin(string provider, string userName, string name, string accessToken) @@ -59,7 +60,8 @@ public async Task ExternalLogin(string provider, string userName, var user = await _userManager.FindByNameAsync(userName); if (user is null) { - var admin = await _userManager.FindByNameAsync("administrator") ?? throw new NotFoundException($"Application user administrator Not Found."); + var admin = await _userManager.FindByNameAsync("administrator") ?? + throw new NotFoundException("Application user administrator Not Found."); user = new ApplicationUser { EmailConfirmed = true, @@ -74,32 +76,24 @@ public async Task ExternalLogin(string provider, string userName, TenantName = admin.TenantName }; var createResult = await _userManager.CreateAsync(user); - if (!createResult.Succeeded) - { - return Unauthorized(); - } + if (!createResult.Succeeded) return Unauthorized(); var assignResult = await _userManager.AddToRoleAsync(user, RoleName.Basic); - if (!createResult.Succeeded) - { - return Unauthorized(); - } + if (!createResult.Succeeded) return Unauthorized(); await _userManager.AddLoginAsync(user, new UserLoginInfo(provider, userName, accessToken)); } - if (!user.IsActive) - { - return Unauthorized(); - } + if (!user.IsActive) return Unauthorized(); var isPersistent = true; await _signInManager.SignInAsync(user, isPersistent); return Redirect("/"); - } + [HttpGet("/auth/logout")] public async Task Logout() { var userId = _signInManager.Context.User.GetUserId(); - var identityUser = await _userManager.FindByIdAsync(userId!) ?? throw new NotFoundException($"Application user not found."); + var identityUser = await _userManager.FindByIdAsync(userId!) ?? + throw new NotFoundException("Application user not found."); identityUser.IsLive = false; await _userManager.UpdateAsync(identityUser); _logger.LogInformation("{@UserName} logout successful", identityUser.UserName); diff --git a/src/Server/Middlewares/ExceptionHandlingMiddleware.cs b/src/Server/Middlewares/ExceptionHandlingMiddleware.cs index aac36c5af..684de4a19 100644 --- a/src/Server/Middlewares/ExceptionHandlingMiddleware.cs +++ b/src/Server/Middlewares/ExceptionHandlingMiddleware.cs @@ -1,13 +1,14 @@ using System.Net; +using System.Text.Json; using CleanArchitecture.Blazor.Application.Common.ExceptionHandlers; using Microsoft.Extensions.Localization; namespace CleanArchitecture.Blazor.Server.Middlewares; -public class ExceptionHandlingMiddleware : Microsoft.AspNetCore.Http.IMiddleware +public class ExceptionHandlingMiddleware : IMiddleware { - private readonly ILogger _logger; private readonly IStringLocalizer _localizer; + private readonly ILogger _logger; public ExceptionHandlingMiddleware( ILogger logger, @@ -25,28 +26,19 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next) } catch (Exception exception) { - var responseModel = await Result.FailureAsync(new string[] { exception.Message }); + var responseModel = await Result.FailureAsync(exception.Message); var response = context.Response; response.ContentType = "application/json"; if (exception is not ServerException && exception.InnerException != null) - { while (exception.InnerException != null) - { exception = exception.InnerException; - } - } - if (!string.IsNullOrEmpty(exception.Message)) - { - responseModel = await Result.FailureAsync(new string[] { exception.Message }); - } + if (!string.IsNullOrEmpty(exception.Message)) responseModel = await Result.FailureAsync(exception.Message); switch (exception) { case ServerException e: response.StatusCode = (int)e.StatusCode; if (e.ErrorMessages is not null) - { responseModel = await Result.FailureAsync(e.ErrorMessages.ToArray()); - } break; case KeyNotFoundException: response.StatusCode = (int)HttpStatusCode.NotFound; @@ -56,8 +48,9 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next) response.StatusCode = (int)HttpStatusCode.InternalServerError; break; } + //_logger.LogError(exception, $"{exception}. Request failed with Status Code {response.StatusCode}"); - await response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(responseModel)); + await response.WriteAsync(JsonSerializer.Serialize(responseModel)); } } -} +} \ No newline at end of file diff --git a/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs b/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs index 31a5cd3d8..4dfcd38e3 100644 --- a/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs +++ b/src/Server/Middlewares/HangfireDashboardAuthorizationFilter.cs @@ -1,9 +1,9 @@ using Hangfire.Dashboard; namespace CleanArchitecture.Blazor.Server.Middlewares; + public class HangfireDashboardAsyncAuthorizationFilter : IDashboardAsyncAuthorizationFilter { - public Task AuthorizeAsync(DashboardContext context) { return Task.FromResult(true); @@ -14,7 +14,6 @@ public class HangfireDashboardAuthorizationFilter : IDashboardAuthorizationFilte { public bool Authorize(DashboardContext context) { - return true; } } \ No newline at end of file diff --git a/src/Server/Middlewares/LocalizationCookiesMiddleware.cs b/src/Server/Middlewares/LocalizationCookiesMiddleware.cs index 9280229c4..332472c73 100644 --- a/src/Server/Middlewares/LocalizationCookiesMiddleware.cs +++ b/src/Server/Middlewares/LocalizationCookiesMiddleware.cs @@ -3,10 +3,8 @@ namespace CleanArchitecture.Blazor.Server.Middlewares; #nullable disable -public class LocalizationCookiesMiddleware : Microsoft.AspNetCore.Http.IMiddleware +public class LocalizationCookiesMiddleware : IMiddleware { - public CookieRequestCultureProvider Provider { get; } - public LocalizationCookiesMiddleware(IOptions requestLocalizationOptions) { Provider = @@ -18,6 +16,8 @@ public LocalizationCookiesMiddleware(IOptions reques .FirstOrDefault(); } + public CookieRequestCultureProvider Provider { get; } + public async Task InvokeAsync(HttpContext context, RequestDelegate next) { if (Provider != null) @@ -25,16 +25,14 @@ public async Task InvokeAsync(HttpContext context, RequestDelegate next) var feature = context.Features.Get(); if (feature != null) - { // remember culture across request context.Response .Cookies .Append( Provider.CookieName, CookieRequestCultureProvider.MakeCookieValue(feature.RequestCulture), - new CookieOptions() { Expires = new DateTimeOffset(DateTime.Now.AddMonths(3)) } + new CookieOptions { Expires = new DateTimeOffset(DateTime.Now.AddMonths(3)) } ); - } } await next(context); diff --git a/src/Server/Middlewares/LocalizationMiddleware.cs b/src/Server/Middlewares/LocalizationMiddleware.cs index 189bf3e33..f52ed2964 100644 --- a/src/Server/Middlewares/LocalizationMiddleware.cs +++ b/src/Server/Middlewares/LocalizationMiddleware.cs @@ -2,26 +2,25 @@ namespace CleanArchitecture.Blazor.Server.Middlewares; -public class LocalizationMiddleware : Microsoft.AspNetCore.Http.IMiddleware +public class LocalizationMiddleware : IMiddleware { public async Task InvokeAsync(HttpContext context, RequestDelegate next) { var cultureKey = context.Request.Headers["Accept-Language"]; if (!string.IsNullOrEmpty(cultureKey)) - { if (DoesCultureExist(cultureKey!)) { var culture = new CultureInfo(cultureKey!); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; } - } await next(context); } private static bool DoesCultureExist(string cultureName) { - return CultureInfo.GetCultures(CultureTypes.AllCultures).Any(culture => string.Equals(culture.Name, cultureName, StringComparison.CurrentCultureIgnoreCase)); + return CultureInfo.GetCultures(CultureTypes.AllCultures).Any(culture => + string.Equals(culture.Name, cultureName, StringComparison.CurrentCultureIgnoreCase)); } -} +} \ No newline at end of file diff --git a/src/Server/Server.csproj b/src/Server/Server.csproj index 39b261b4a..8c29d04f5 100644 --- a/src/Server/Server.csproj +++ b/src/Server/Server.csproj @@ -9,29 +9,29 @@ default - - - - - - - - - - - - - + + + + + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + - + - - + + diff --git a/src/Server/Services/ServerHubWrapper.cs b/src/Server/Services/ServerHubWrapper.cs index 59ad0b512..7e613cf28 100644 --- a/src/Server/Services/ServerHubWrapper.cs +++ b/src/Server/Services/ServerHubWrapper.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.SignalR; namespace CleanArchitecture.Blazor.Server.Services; + public class ServerHubWrapper : IApplicationHubWrapper { private readonly IHubContext _hubContext; @@ -21,4 +22,4 @@ public async Task JobCompleted(string message) { await _hubContext.Clients.All.Completed(message); } -} +} \ No newline at end of file diff --git a/src/Server/_Imports.cs b/src/Server/_Imports.cs index 6c57ddace..cb06ed3e4 100644 --- a/src/Server/_Imports.cs +++ b/src/Server/_Imports.cs @@ -5,4 +5,4 @@ global using FluentValidation; global using Microsoft.AspNetCore.Builder; global using Microsoft.AspNetCore.Http; -global using Microsoft.Extensions.Logging; +global using Microsoft.Extensions.Logging; \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Application.IntegrationTests.csproj b/tests/Application.IntegrationTests/Application.IntegrationTests.csproj index ef6b97e33..184f3b1ff 100644 --- a/tests/Application.IntegrationTests/Application.IntegrationTests.csproj +++ b/tests/Application.IntegrationTests/Application.IntegrationTests.csproj @@ -1,39 +1,39 @@  - - net8.0 - CleanArchitecture.Blazor.Application.IntegrationTests - CleanArchitecture.Blazor.Application.IntegrationTests - - false - - default - - - - - - - - - Always - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - + + net8.0 + CleanArchitecture.Blazor.Application.IntegrationTests + CleanArchitecture.Blazor.Application.IntegrationTests + + false + + default + + + + + + + + + Always + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + diff --git a/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs b/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs index 8f8356f52..8c95e535e 100644 --- a/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Commands/AddEditKeyValueCommandTests.cs @@ -2,40 +2,45 @@ using CleanArchitecture.Blazor.Application.Features.KeyValues.Commands.AddEdit; using CleanArchitecture.Blazor.Domain.Entities; using FluentAssertions; +using FluentValidation; using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Commands; + using static Testing; + internal class AddEditKeyValueCommandTests : TestBase { - [Test] public void ShouldThrowValidationException() { var command = new AddEditKeyValueCommand(); FluentActions.Invoking(() => - SendAsync(command)).Should().ThrowAsync(); + SendAsync(command)).Should().ThrowAsync(); } [Test] public async Task InsertItem() { - var addCommand = new AddEditKeyValueCommand() { Name= Picklist.Brand, Text="Test",Value="Test",Description= "Description" }; + var addCommand = new AddEditKeyValueCommand + { Name = Picklist.Brand, Text = "Test", Value = "Test", Description = "Description" }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); find.Should().NotBeNull(); find.Name.Should().Be(Picklist.Brand); find.Text.Should().Be("Test"); find.Value.Should().Be("Test"); - } + [Test] public async Task UpdateItem() { - var addCommand = new AddEditKeyValueCommand() { Name = Picklist.Brand, Text = "Test", Value = "Test", Description = "Description" }; + var addCommand = new AddEditKeyValueCommand + { Name = Picklist.Brand, Text = "Test", Value = "Test", Description = "Description" }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); - var editCommand = new AddEditKeyValueCommand() { Id=find.Id, Name = Picklist.Brand, Text = "Test1", Value = "Test1", Description = "Description1" }; + var editCommand = new AddEditKeyValueCommand + { Id = find.Id, Name = Picklist.Brand, Text = "Test1", Value = "Test1", Description = "Description1" }; await SendAsync(editCommand); var updated = await FindAsync(find.Id); updated.Should().NotBeNull(); @@ -44,4 +49,4 @@ public async Task UpdateItem() updated.Value.Should().Be("Test1"); updated.Description.Should().Be("Description1"); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs b/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs index ab1e832c9..0542d68a9 100644 --- a/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Commands/DeleteKeyValueTests.cs @@ -6,39 +6,37 @@ using FluentAssertions; using NUnit.Framework; -namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Commands +namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Commands; + +using static Testing; + +public class DeleteKeyValueTests : TestBase { - using static Testing; + [Test] + public void ShouldRequireValidKeyValueId() + { + var command = new DeleteKeyValueCommand(new[] { 99 }); - public class DeleteKeyValueTests : TestBase + FluentActions.Invoking(() => + SendAsync(command)).Should().ThrowAsync(); + } + + [Test] + public async Task ShouldDeleteKeyValue() { - [Test] - public void ShouldRequireValidKeyValueId() + var addCommand = new AddEditKeyValueCommand { - var command = new DeleteKeyValueCommand (new int[] { 99}); + Name = Picklist.Brand, + Text = "Word", + Value = "Word", + Description = "For Test" + }; + var result = await SendAsync(addCommand); - FluentActions.Invoking(() => - SendAsync(command)).Should().ThrowAsync(); - } + await SendAsync(new DeleteKeyValueCommand(new[] { result.Data })); - [Test] - public async Task ShouldDeleteKeyValue() - { - var addCommand = new AddEditKeyValueCommand() - { - Name = Picklist.Brand, - Text= "Word", - Value = "Word", - Description = "For Test" - }; - var result= await SendAsync(addCommand); - - await SendAsync(new DeleteKeyValueCommand(new int[] { result.Data })); - - var item = await FindAsync(result.Data); - - item.Should().BeNull(); - } - + var item = await FindAsync(result.Data); + + item.Should().BeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs b/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs index fbd147f1c..925f33a91 100644 --- a/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Queries/ExportKeyValuesQueryTests.cs @@ -4,16 +4,16 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries; + using static Testing; + internal class ExportKeyValuesQueryTests : TestBase { - - [Test] public async Task ShouldNotEmptyExportQuery() { var query = new ExportKeyValuesQuery(); - var result =await SendAsync(query); + var result = await SendAsync(query); result.Should().NotBeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs index f2d968ad0..3b1394237 100644 --- a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesQueryTests.cs @@ -6,18 +6,18 @@ using FluentAssertions; using NUnit.Framework; -namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries +namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries; + +using static Testing; + +public class KeyValuesQueryTests : TestBase { - using static Testing; - public class KeyValuesQueryTests : TestBase + [Test] + public void ShouldNotNullKeyValuesQueryByName() { - [Test] - public void ShouldNotNullKeyValuesQueryByName() - { - var query = new KeyValuesQueryByName(Picklist.Brand); - var result = SendAsync(query); - FluentActions.Invoking(() => - SendAsync(query)).Should().NotBeNull(); - } + var query = new KeyValuesQueryByName(Picklist.Brand); + var result = SendAsync(query); + FluentActions.Invoking(() => + SendAsync(query)).Should().NotBeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs index a1f9690b8..6bc41a24a 100644 --- a/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs +++ b/tests/Application.IntegrationTests/KeyValues/Queries/KeyValuesWithPaginationQueryTests.cs @@ -4,19 +4,26 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.KeyValues.Queries; + using static Testing; -internal class KeyValuesWithPaginationQueryTests: TestBase + +internal class KeyValuesWithPaginationQueryTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text1", Value = "Value1" ,Description= "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text2", Value = "Value2", Description = "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text3", Value = "Value3", Description = "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text4", Value = "Value4", Description = "Test Description" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text5", Value = "Value5", Description = "Test Description" }); - + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text1", Value = "Value1", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text2", Value = "Value2", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text3", Value = "Value3", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text4", Value = "Value4", Description = "Test Description" }); + await AddAsync(new KeyValue + { Name = Picklist.Brand, Text = "Text5", Value = "Value5", Description = "Test Description" }); } + [Test] public async Task ShouldNotEmptyQuery() { @@ -24,11 +31,12 @@ public async Task ShouldNotEmptyQuery() var result = await SendAsync(query); Assert.Equals(5, result.TotalItems); } + [Test] public async Task ShouldNotEmptyKeywordQuery() { - var query = new KeyValuesWithPaginationQuery() { Keyword="1"}; + var query = new KeyValuesWithPaginationQuery { Keyword = "1" }; var result = await SendAsync(query); Assert.Equals(1, result.TotalItems); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs b/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs index da3254ad4..445da0da5 100644 --- a/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs +++ b/tests/Application.IntegrationTests/Products/Commands/AddEditProductCommandTests.cs @@ -1,25 +1,33 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; using CleanArchitecture.Blazor.Application.Features.Products.Commands.AddEdit; using CleanArchitecture.Blazor.Domain.Entities; using FluentAssertions; +using FluentValidation; using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Commands; + using static Testing; -internal class AddEditProductCommandTests: TestBase + +internal class AddEditProductCommandTests : TestBase { [Test] public void ShouldThrowValidationException() { var command = new AddEditProductCommand(); FluentActions.Invoking(() => - SendAsync(command)).Should().ThrowAsync(); + SendAsync(command)).Should().ThrowAsync(); } [Test] public async Task InsertItem() { - var addCommand = new AddEditProductCommand() { Name = "Test", Brand="Brand", Price=100m, Unit="EA", Description = "Description", Pictures= new System.Collections.Generic.List{ new ProductImage() { Name="test.jpg", Url="test.jpg", Size=1 } } }; + var addCommand = new AddEditProductCommand + { + Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description", + Pictures = new List { new() { Name = "test.jpg", Url = "test.jpg", Size = 1 } } + }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); find.Should().NotBeNull(); @@ -28,13 +36,22 @@ public async Task InsertItem() find.Price.Should().Be(100); find.Unit.Should().Be("EA"); } + [Test] public async Task UpdateItem() { - var addCommand = new AddEditProductCommand() { Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description",Pictures = new System.Collections.Generic.List { new ProductImage() { Name = "test.jpg", Url = "test.jpg", Size = 1 } } }; + var addCommand = new AddEditProductCommand + { + Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description", + Pictures = new List { new() { Name = "test.jpg", Url = "test.jpg", Size = 1 } } + }; var result = await SendAsync(addCommand); var find = await FindAsync(result.Data); - var editCommand = new AddEditProductCommand() { Id = find.Id, Name = "Test1", Brand = "Brand1", Price =200m, Unit = "KG", Pictures= addCommand.Pictures, Description = "Description1" }; + var editCommand = new AddEditProductCommand + { + Id = find.Id, Name = "Test1", Brand = "Brand1", Price = 200m, Unit = "KG", Pictures = addCommand.Pictures, + Description = "Description1" + }; await SendAsync(editCommand); var updated = await FindAsync(find.Id); updated.Should().NotBeNull(); @@ -44,4 +61,4 @@ public async Task UpdateItem() updated.Price.Should().Be(200); updated.Unit.Should().Be("KG"); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs b/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs index 3ea56f156..42d08d345 100644 --- a/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs +++ b/tests/Application.IntegrationTests/Products/Commands/DeleteProductCommandTests.cs @@ -9,13 +9,15 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Commands; + using static Testing; -internal class DeleteProductCommandTests: TestBase + +internal class DeleteProductCommandTests : TestBase { [Test] - public void ShouldRequireValidKeyValueId() + public void ShouldRequireValidKeyValueId() { - var command = new DeleteProductCommand(new int[] { 99 }); + var command = new DeleteProductCommand(new[] { 99 }); FluentActions.Invoking(() => SendAsync(command)).Should().ThrowAsync(); @@ -24,23 +26,26 @@ public void ShouldRequireValidKeyValueId() [Test] public async Task ShouldDeleteOne() { - var addCommand = new AddEditProductCommand() { Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description" }; + var addCommand = new AddEditProductCommand + { Name = "Test", Brand = "Brand", Price = 100m, Unit = "EA", Description = "Description" }; var result = await SendAsync(addCommand); - await SendAsync(new DeleteProductCommand(new int[] { result.Data })); + await SendAsync(new DeleteProductCommand(new[] { result.Data })); var item = await FindAsync(result.Data); item.Should().BeNull(); } + [SetUp] public async Task InitData() { - await AddAsync(new Product() { Name = "Test1" }); - await AddAsync(new Product() { Name = "Test2" }); - await AddAsync(new Product() { Name = "Test3" }); - await AddAsync(new Product() { Name = "Test4" }); + await AddAsync(new Product { Name = "Test1" }); + await AddAsync(new Product { Name = "Test2" }); + await AddAsync(new Product { Name = "Test3" }); + await AddAsync(new Product { Name = "Test4" }); } + [Test] public async Task ShouldDeleteAll() { @@ -53,7 +58,5 @@ public async Task ShouldDeleteAll() var deleteResult = await SendAsync(query); deleteResult.Should().BeNullOrEmpty(); - - } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs b/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs index 93782745a..83bc47d75 100644 --- a/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs +++ b/tests/Application.IntegrationTests/Products/Commands/ImportProductsCommandTests.cs @@ -8,7 +8,8 @@ namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Commands; using static Testing; -internal class ImportProductsCommandTests: TestBase + +internal class ImportProductsCommandTests : TestBase { [Test] public async Task DownloadTemplate() @@ -22,10 +23,10 @@ public async Task DownloadTemplate() public async Task ImportDataFromExcel() { var dir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - var excelFile = Path.Combine(dir,"../../../", "Products", "ImportExcel", "Products.xlsx"); + var excelFile = Path.Combine(dir, "../../../", "Products", "ImportExcel", "Products.xlsx"); var data = File.ReadAllBytes(excelFile); var cmd = new ImportProductsCommand("Products.xlsx", data); var result = await SendAsync(cmd); result.Succeeded.Should().BeTrue(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs b/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs index b3319fd43..8e2ca0818 100644 --- a/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs +++ b/tests/Application.IntegrationTests/Products/Queries/ExportProductsQueryTests.cs @@ -4,14 +4,17 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Queries; + using static Testing; + internal class ExportProductsQueryTests : TestBase { [Test] public async Task ShouldNotEmptyExportQuery() { - var query = new ExportProductsQuery() { - OrderBy = "Id", + var query = new ExportProductsQuery + { + OrderBy = "Id", SortDirection = "Ascending" }; var result = await SendAsync(query); @@ -21,11 +24,13 @@ public async Task ShouldNotEmptyExportQuery() [Test] public async Task ShouldNotEmptyExportQueryWithFilter() { - var query = new ExportProductsQuery() { Keyword="1", + var query = new ExportProductsQuery + { + Keyword = "1", OrderBy = "Id", SortDirection = "Ascending" }; var result = await SendAsync(query); result.Should().NotBeNull(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs b/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs index 86696b71a..f09e18783 100644 --- a/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs +++ b/tests/Application.IntegrationTests/Products/Queries/GetAllProductsQueryTests.cs @@ -5,17 +5,20 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Queries; + using static Testing; + internal class GetAllProductsQueryTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new Product() { Name = "Test1" }); - await AddAsync(new Product() { Name = "Test2" }); - await AddAsync(new Product() { Name = "Test3" }); - await AddAsync(new Product() { Name = "Test4" }); + await AddAsync(new Product { Name = "Test1" }); + await AddAsync(new Product { Name = "Test2" }); + await AddAsync(new Product { Name = "Test3" }); + await AddAsync(new Product { Name = "Test4" }); } + [Test] public async Task ShouldQueryAll() { @@ -23,14 +26,15 @@ public async Task ShouldQueryAll() var result = await SendAsync(query); Assert.Equals(4, result.Count()); } + [Test] public async Task ShouldQueryById() { var query = new GetAllProductsQuery(); var result = await SendAsync(query); - var id= result.Last().Id; - var getProductQuery = new GetProductQuery() { Id = id }; + var id = result.Last().Id; + var getProductQuery = new GetProductQuery { Id = id }; var product = await SendAsync(getProductQuery); Assert.Equals(id, product.Id); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs b/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs index d9419a344..eee2991a4 100644 --- a/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs +++ b/tests/Application.IntegrationTests/Products/Queries/ProductsPaginationQueryTests.cs @@ -4,18 +4,21 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Products.Queries; + using static Testing; + internal class ProductsPaginationQueryTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new Product() { Name = "Test1", Price=19, Brand="Test1", Unit="EA", Description="Test1" }); - await AddAsync(new Product() { Name = "Test2", Price = 19, Brand = "Test2", Unit = "EA", Description = "Test1" }); - await AddAsync(new Product() { Name = "Test3", Price = 19, Brand = "Test3", Unit = "EA", Description = "Test1" }); - await AddAsync(new Product() { Name = "Test4", Price = 19, Brand = "Test4", Unit = "EA", Description = "Test1" }); - await AddAsync(new Product() { Name = "Test5", Price = 19, Brand = "Test5", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test1", Price = 19, Brand = "Test1", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test2", Price = 19, Brand = "Test2", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test3", Price = 19, Brand = "Test3", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test4", Price = 19, Brand = "Test4", Unit = "EA", Description = "Test1" }); + await AddAsync(new Product { Name = "Test5", Price = 19, Brand = "Test5", Unit = "EA", Description = "Test1" }); } + [Test] public async Task ShouldNotEmptyQuery() { @@ -23,10 +26,11 @@ public async Task ShouldNotEmptyQuery() var result = await SendAsync(query); Assert.Equals(5, result.TotalItems); } + [Test] public async Task ShouldNotEmptyKeywordQuery() { - var query = new ProductsWithPaginationQuery() { Keyword = "1" }; + var query = new ProductsWithPaginationQuery { Keyword = "1" }; var result = await SendAsync(query); Assert.Equals(5, result.TotalItems); } @@ -34,8 +38,8 @@ public async Task ShouldNotEmptyKeywordQuery() [Test] public async Task ShouldNotEmptySpecificationQuery() { - var query = new ProductsWithPaginationQuery() { Keyword = "1", Brand= "Test1", Unit="EA", Name= "Test1" }; + var query = new ProductsWithPaginationQuery { Keyword = "1", Brand = "Test1", Unit = "EA", Name = "Test1" }; var result = await SendAsync(query); Assert.Equals(1, result.TotalItems); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs b/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs index 4fabb326d..e1fb33e16 100644 --- a/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs +++ b/tests/Application.IntegrationTests/Services/PicklistServiceTests.cs @@ -4,17 +4,20 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Services; + using static Testing; + public class PicklistServiceTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text="Text1",Value="Value1" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text2", Value = "Value2" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text3", Value = "Value3" }); - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text4", Value = "Value4" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text1", Value = "Value1" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text2", Value = "Value2" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text3", Value = "Value3" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text4", Value = "Value4" }); } + [Test] public async Task ShouldLoadDataSource() { @@ -22,16 +25,15 @@ public async Task ShouldLoadDataSource() await picklist.InitializeAsync(); var count = picklist.DataSource.Count(); Assert.Equals(4, count); - } + [Test] public async Task ShouldUpdateDataSource() { - await AddAsync(new KeyValue() { Name = Picklist.Brand, Text = "Text5", Value = "Value5" }); + await AddAsync(new KeyValue { Name = Picklist.Brand, Text = "Text5", Value = "Value5" }); var picklist = CreatePicklistService(); await picklist.Refresh(); var count = picklist.DataSource.Count(); Assert.Equals(5, count); - } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs b/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs index 262056caa..06c5e86f1 100644 --- a/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs +++ b/tests/Application.IntegrationTests/Services/TenantsServiceTests.cs @@ -4,16 +4,18 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.IntegrationTests.Services; + using static Testing; + public class TenantsServiceTests : TestBase { [SetUp] public async Task InitData() { - await AddAsync(new Tenant() { Name = "Test1", Description= "Test1" }); - await AddAsync(new Tenant() { Name = "Test2", Description = "Text2" }); - + await AddAsync(new Tenant { Name = "Test1", Description = "Test1" }); + await AddAsync(new Tenant { Name = "Test2", Description = "Text2" }); } + [Test] public void ShouldLoadDataSource() { @@ -21,16 +23,15 @@ public void ShouldLoadDataSource() tenantsService.Initialize(); var count = tenantsService.DataSource.Count(); Assert.Equals(2, count); - } + [Test] public async Task ShouldUpdateDataSource() { - await AddAsync(new Tenant() { Name = "Test3", Description = "Test3" }); + await AddAsync(new Tenant { Name = "Test3", Description = "Test3" }); var tenantsService = CreateTenantsService(); await tenantsService.Refresh(); var count = tenantsService.DataSource.Count(); Assert.Equals(3, count); - } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/TestBase.cs b/tests/Application.IntegrationTests/TestBase.cs index ae87bd6a6..4647b6054 100644 --- a/tests/Application.IntegrationTests/TestBase.cs +++ b/tests/Application.IntegrationTests/TestBase.cs @@ -1,16 +1,15 @@ using System.Threading.Tasks; using NUnit.Framework; -namespace CleanArchitecture.Blazor.Application.IntegrationTests -{ - using static Testing; +namespace CleanArchitecture.Blazor.Application.IntegrationTests; + +using static Testing; - public class TestBase +public class TestBase +{ + [SetUp] + public async Task TestSetUp() { - [SetUp] - public async Task TestSetUp() - { - await ResetState(); - } + await ResetState(); } -} +} \ No newline at end of file diff --git a/tests/Application.IntegrationTests/Testing.cs b/tests/Application.IntegrationTests/Testing.cs index 7a86b2c39..1822ef36b 100644 --- a/tests/Application.IntegrationTests/Testing.cs +++ b/tests/Application.IntegrationTests/Testing.cs @@ -71,10 +71,11 @@ public async Task RunBeforeAnyTests() _scopeFactory = services.BuildServiceProvider().GetService(); - _checkpoint = await Respawner.CreateAsync(_configuration.GetValue("DatabaseSettings:ConnectionString"), new RespawnerOptions - { - TablesToIgnore = new Table[] { "__EFMigrationsHistory" } - }); + _checkpoint = await Respawner.CreateAsync(_configuration.GetValue("DatabaseSettings:ConnectionString"), + new RespawnerOptions + { + TablesToIgnore = new Table[] { "__EFMigrationsHistory" } + }); EnsureDatabase(); } @@ -121,10 +122,7 @@ public static async Task RunAsUserAsync(string userName, string password { var roleManager = scope.ServiceProvider.GetService>(); - foreach (var role in roles) - { - await roleManager.CreateAsync(new IdentityRole(role)); - } + foreach (var role in roles) await roleManager.CreateAsync(new IdentityRole(role)); await userManager.AddToRolesAsync(user, roles); } @@ -184,6 +182,7 @@ public static IPicklistService CreatePicklistService() var scope = _scopeFactory.CreateScope(); return scope.ServiceProvider.GetRequiredService(); } + public static ITenantService CreateTenantsService() { var scope = _scopeFactory.CreateScope(); diff --git a/tests/Application.UnitTests/Application.UnitTests.csproj b/tests/Application.UnitTests/Application.UnitTests.csproj index 478827047..c66f4b893 100644 --- a/tests/Application.UnitTests/Application.UnitTests.csproj +++ b/tests/Application.UnitTests/Application.UnitTests.csproj @@ -1,29 +1,29 @@  - - net8.0 - CleanArchitecture.Blazor.Application.UnitTests - CleanArchitecture.Blazor.Application.UnitTests + + net8.0 + CleanArchitecture.Blazor.Application.UnitTests + CleanArchitecture.Blazor.Application.UnitTests - false + false - default - + default + - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + - - - - + + + + diff --git a/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs b/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs index dbd96be9d..c1ad13f5a 100644 --- a/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs +++ b/tests/Application.UnitTests/Common/Behaviours/RequestLoggerTests.cs @@ -28,17 +28,19 @@ public async Task ShouldCallGetUserNameAsyncOnceIfAuthenticated() { _currentUserService.Setup(x => x.UserId).Returns("Administrator"); var requestLogger = new LoggingPreProcessor(_logger.Object, _currentUserService.Object); - await requestLogger.Process(new AddEditProductCommand { Brand= "Brand", Name= "Brand", Price=1.0m, Unit="EA" }, new CancellationToken()); + await requestLogger.Process( + new AddEditProductCommand { Brand = "Brand", Name = "Brand", Price = 1.0m, Unit = "EA" }, + new CancellationToken()); _currentUserService.Verify(i => i.UserName, Times.Once); - } [Test] public async Task ShouldNotCallGetUserNameAsyncOnceIfUnauthenticated() { var requestLogger = new LoggingPreProcessor(_logger.Object, _currentUserService.Object); - await requestLogger.Process(new AddEditProductCommand { Brand = "Brand", Name = "Brand", Price = 1.0m, Unit = "EA" }, new CancellationToken()); + await requestLogger.Process( + new AddEditProductCommand { Brand = "Brand", Name = "Brand", Price = 1.0m, Unit = "EA" }, + new CancellationToken()); _identityService.Verify(i => i.GetUserNameAsync(It.IsAny(), CancellationToken.None), Times.Never); - } -} +} \ No newline at end of file diff --git a/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs b/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs index ffb8245f8..3c265b266 100644 --- a/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs +++ b/tests/Application.UnitTests/Common/Exceptions/ValidationExceptionTests.cs @@ -9,15 +9,14 @@ namespace CleanArchitecture.Blazor.Application.UnitTests.Common.Exceptions; public class ValidationExceptionTests { - - [Test] public void SingleValidationFailureCreatesASingleElementErrorDictionary() { var expectedErrorMessage = "'Age' must be over 18"; - var failures = new List { - new ValidationFailure("Age", expectedErrorMessage), + var failures = new List + { + new("Age", expectedErrorMessage) }; var validationException = new ValidationException(failures); var actualErrorMessages = validationException.Errors.Select(x => x.ErrorMessage); @@ -25,24 +24,21 @@ public void SingleValidationFailureCreatesASingleElementErrorDictionary() } [Test] - public void MultipleValidationFailureForMultiplePropertiesCreatesAMultipleElementErrorDictionaryEachWithMultipleValues() + public void + MultipleValidationFailureForMultiplePropertiesCreatesAMultipleElementErrorDictionaryEachWithMultipleValues() { var failures = new List - { - new ValidationFailure("Age", "must be 18 or older"), - new ValidationFailure("Age", "must be 25 or younger"), - new ValidationFailure("Password", "must contain at least 8 characters"), - new ValidationFailure("Password", "must contain a digit"), - new ValidationFailure("Password", "must contain upper case letter"), - new ValidationFailure("Password", "must contain lower case letter"), - }; + { + new("Age", "must be 18 or older"), + new("Age", "must be 25 or younger"), + new("Password", "must contain at least 8 characters"), + new("Password", "must contain a digit"), + new("Password", "must contain upper case letter"), + new("Password", "must contain lower case letter") + }; var actual = new ValidationException(failures).Errors; actual.Should().NotBeEmpty(); - - - } -} - +} \ No newline at end of file diff --git a/tests/Application.UnitTests/Common/Mappings/MappingTests.cs b/tests/Application.UnitTests/Common/Mappings/MappingTests.cs index aae3ed713..06c191fd8 100644 --- a/tests/Application.UnitTests/Common/Mappings/MappingTests.cs +++ b/tests/Application.UnitTests/Common/Mappings/MappingTests.cs @@ -18,7 +18,8 @@ public class MappingTests public MappingTests() { - _configuration = new MapperConfiguration(cfg => cfg.AddMaps(Assembly.GetAssembly(typeof(IApplicationDbContext)))); + _configuration = + new MapperConfiguration(cfg => cfg.AddMaps(Assembly.GetAssembly(typeof(IApplicationDbContext)))); _mapper = _configuration.CreateMapper(); } @@ -32,17 +33,13 @@ public void ShouldHaveValidConfiguration() [TestCase(typeof(Document), typeof(DocumentDto), true)] [TestCase(typeof(KeyValue), typeof(KeyValueDto), true)] [TestCase(typeof(Product), typeof(ProductDto), true)] - public void ShouldSupportMappingFromSourceToDestination(Type source, Type destination, bool inverseMap = false) { var instance = GetInstanceOf(source); _mapper.Map(instance, source, destination); - if (inverseMap) - { - ShouldSupportMappingFromSourceToDestination(destination, source, false); - } + if (inverseMap) ShouldSupportMappingFromSourceToDestination(destination, source); } private object GetInstanceOf(Type type) @@ -53,5 +50,4 @@ private object GetInstanceOf(Type type) // Type without parameterless constructor return FormatterServices.GetUninitializedObject(type); } -} - +} \ No newline at end of file diff --git a/tests/Application.UnitTests/Constants/ConstantStringTests.cs b/tests/Application.UnitTests/Constants/ConstantStringTests.cs index a274db066..fe0f83dd6 100644 --- a/tests/Application.UnitTests/Constants/ConstantStringTests.cs +++ b/tests/Application.UnitTests/Constants/ConstantStringTests.cs @@ -2,6 +2,7 @@ using NUnit.Framework; namespace CleanArchitecture.Blazor.Application.UnitTests.Constants; + public class ConstantStringTests { [Test] @@ -39,6 +40,5 @@ public void Test() Assert.Equals("Microsoft", ConstantString.Microsoft); Assert.Equals("Facebook", ConstantString.Facebook); Assert.Equals("Google", ConstantString.Google); - } -} +} \ No newline at end of file diff --git a/tests/Domain.UnitTests/Domain.UnitTests.csproj b/tests/Domain.UnitTests/Domain.UnitTests.csproj index d9c5ec88d..f3e40eed5 100644 --- a/tests/Domain.UnitTests/Domain.UnitTests.csproj +++ b/tests/Domain.UnitTests/Domain.UnitTests.csproj @@ -1,28 +1,28 @@  - - net8.0 - CleanArchitecture.Blazor.Domain.UnitTests - CleanArchitecture.Blazor.Domain.UnitTests + + net8.0 + CleanArchitecture.Blazor.Domain.UnitTests + CleanArchitecture.Blazor.Domain.UnitTests - false + false - default - + default + - + - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + - - - + + + diff --git a/tests/Domain.UnitTests/ValueObjects/ColourTests.cs b/tests/Domain.UnitTests/ValueObjects/ColourTests.cs index a455ba5de..e20a086af 100644 --- a/tests/Domain.UnitTests/ValueObjects/ColourTests.cs +++ b/tests/Domain.UnitTests/ValueObjects/ColourTests.cs @@ -9,46 +9,45 @@ namespace CleanArchitecture.Blazor.Domain.UnitTests.ValueObjects; public class ColourTests +{ + [Test] + public void ShouldReturnCorrectColourCode() { - [Test] - public void ShouldReturnCorrectColourCode() - { - const string code = "#FFFFFF"; - - var colour = Colour.From(code); - - colour.Code.Should().Be(code); - } - - [Test] - public void ToStringReturnsCode() - { - var colour = Colour.White; - - colour.ToString().Should().Be(colour.Code); - } - - [Test] - public void ShouldPerformImplicitConversionToColourCodeString() - { - string code = Colour.White; - - code.Should().Be("#FFFFFF"); - } - - [Test] - public void ShouldPerformExplicitConversionGivenSupportedColourCode() - { - var colour = (Colour)"#FFFFFF"; - - colour.Should().Be(Colour.White); - } - - [Test] - public void ShouldThrowUnsupportedColourExceptionGivenNotSupportedColourCode() - { - FluentActions.Invoking(() => Colour.From("##FF33CC")) - .Should().Throw(); - } + const string code = "#FFFFFF"; + + var colour = Colour.From(code); + + colour.Code.Should().Be(code); + } + + [Test] + public void ToStringReturnsCode() + { + var colour = Colour.White; + + colour.ToString().Should().Be(colour.Code); + } + + [Test] + public void ShouldPerformImplicitConversionToColourCodeString() + { + string code = Colour.White; + + code.Should().Be("#FFFFFF"); + } + + [Test] + public void ShouldPerformExplicitConversionGivenSupportedColourCode() + { + var colour = (Colour)"#FFFFFF"; + + colour.Should().Be(Colour.White); } + [Test] + public void ShouldThrowUnsupportedColourExceptionGivenNotSupportedColourCode() + { + FluentActions.Invoking(() => Colour.From("##FF33CC")) + .Should().Throw(); + } +} \ No newline at end of file From 3646560dec30da12d2c5198e7eb376d52c7f11dd Mon Sep 17 00:00:00 2001 From: Bram1903 <70259613+Bram1903@users.noreply.github.com> Date: Sat, 23 Dec 2023 09:48:46 +0100 Subject: [PATCH 3/7] Improve code readability and standardization This commit includes minor formatting changes across several files to improve the readability of the code and adhere to standard coding practices. Changes include code arrangement, the handling of newlines at EOF, and adjusting certain tags for visual consistency. --- src/Server.UI/Components/Routes.razor | 12 ++++-------- src/Server.UI/DependencyInjection.cs | 1 + src/Server.UI/Pages/404.razor | 2 +- src/Server.UI/Pages/Error.razor | 11 +++++++---- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Server.UI/Components/Routes.razor b/src/Server.UI/Components/Routes.razor index 8bd924405..e91fb58b1 100644 --- a/src/Server.UI/Components/Routes.razor +++ b/src/Server.UI/Components/Routes.razor @@ -1,12 +1,8 @@ -@using CleanArchitecture.Blazor.Server.UI.Constants -@using CleanArchitecture.Blazor.Server.UI.Pages.Identity.Authentication - - -@inject IStringLocalizer L +@inject IStringLocalizer L @inject NavigationManager NavManager @inject LayoutService LayoutService - + @@ -15,10 +11,10 @@ @L["Please wait, we are authorizing you..."] - + - + diff --git a/src/Server.UI/DependencyInjection.cs b/src/Server.UI/DependencyInjection.cs index f9ea12650..913b8fd05 100644 --- a/src/Server.UI/DependencyInjection.cs +++ b/src/Server.UI/DependencyInjection.cs @@ -77,6 +77,7 @@ public static WebApplication ConfigureServer(this WebApplication app, IConfigura // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } + app.UseStatusCodePagesWithRedirects("/404"); app.MapHealthChecks("/health"); app.UseHttpsRedirection(); diff --git a/src/Server.UI/Pages/404.razor b/src/Server.UI/Pages/404.razor index 8f10bf3d0..8311cd4f5 100644 --- a/src/Server.UI/Pages/404.razor +++ b/src/Server.UI/Pages/404.razor @@ -19,4 +19,4 @@ @code { -} +} \ No newline at end of file diff --git a/src/Server.UI/Pages/Error.razor b/src/Server.UI/Pages/Error.razor index 57239fc2c..599a599a2 100644 --- a/src/Server.UI/Pages/Error.razor +++ b/src/Server.UI/Pages/Error.razor @@ -31,13 +31,16 @@ and restarting the app.

+ @code { - [CascadingParameter] - private HttpContext? HttpContext { get; set; } + [CascadingParameter] private HttpContext? HttpContext { get; set; } private string? RequestId { get; set; } private bool ShowRequestId => !string.IsNullOrEmpty(RequestId); - protected override void OnInitialized() => + protected override void OnInitialized() + { RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier; -} + } + +} \ No newline at end of file From 6af8e1733649212c1da070fb9417a5222fdb765b Mon Sep 17 00:00:00 2001 From: Bram1903 <70259613+Bram1903@users.noreply.github.com> Date: Wed, 27 Dec 2023 09:13:19 +0100 Subject: [PATCH 4/7] Refactor variable name in MudServices configuration, to prevent a hidden outer parameter with the same name. --- src/Server.UI/DependencyInjection.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Server.UI/DependencyInjection.cs b/src/Server.UI/DependencyInjection.cs index 913b8fd05..18d9fa25a 100644 --- a/src/Server.UI/DependencyInjection.cs +++ b/src/Server.UI/DependencyInjection.cs @@ -27,16 +27,16 @@ public static IServiceCollection AddServerUI(this IServiceCollection services, I services.AddRazorComponents().AddInteractiveServerComponents(); services.AddCascadingAuthenticationState(); services.AddMudBlazorDialog() - .AddMudServices(config => + .AddMudServices(mudServicesConfiguration => { - config.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight; - config.SnackbarConfiguration.PreventDuplicates = false; - config.SnackbarConfiguration.NewestOnTop = true; - config.SnackbarConfiguration.ShowCloseIcon = true; - config.SnackbarConfiguration.VisibleStateDuration = 4000; - config.SnackbarConfiguration.HideTransitionDuration = 500; - config.SnackbarConfiguration.ShowTransitionDuration = 500; - config.SnackbarConfiguration.SnackbarVariant = Variant.Filled; + mudServicesConfiguration.SnackbarConfiguration.PositionClass = Defaults.Classes.Position.BottomRight; + mudServicesConfiguration.SnackbarConfiguration.PreventDuplicates = false; + mudServicesConfiguration.SnackbarConfiguration.NewestOnTop = true; + mudServicesConfiguration.SnackbarConfiguration.ShowCloseIcon = true; + mudServicesConfiguration.SnackbarConfiguration.VisibleStateDuration = 4000; + mudServicesConfiguration.SnackbarConfiguration.HideTransitionDuration = 500; + mudServicesConfiguration.SnackbarConfiguration.ShowTransitionDuration = 500; + mudServicesConfiguration.SnackbarConfiguration.SnackbarVariant = Variant.Filled; }).AddHotKeys2(); services.AddFluxor(options => From 2236fe3979a2d266287fdcbaa607253eb812e60a Mon Sep 17 00:00:00 2001 From: Bram1903 <70259613+Bram1903@users.noreply.github.com> Date: Sat, 30 Dec 2023 17:01:29 +0100 Subject: [PATCH 5/7] Simply more refactoring :-) --- README.md | 4 +-- ...egisterFormModelFluentValidator.ca-ES.resx | 3 +- ...egisterFormModelFluentValidator.de-DE.resx | 3 +- .../RegisterFormModelFluentValidator.en.resx | 3 +- ...egisterFormModelFluentValidator.es-ES.resx | 3 +- ...egisterFormModelFluentValidator.fr-FR.resx | 3 +- ...egisterFormModelFluentValidator.ja-JP.resx | 3 +- ...egisterFormModelFluentValidator.km-KH.resx | 3 +- .../RegisterFormModelFluentValidator.resx | 3 +- .../RegisterFormModelFluentValidator.ru.resx | 3 +- ...egisterFormModelFluentValidator.zh-CN.resx | 3 +- .../Export/ExportAuditTrailsQuery.ca-ES.resx | 3 +- .../Export/ExportAuditTrailsQuery.de-DE.resx | 3 +- .../Export/ExportAuditTrailsQuery.en.resx | 3 +- .../Export/ExportAuditTrailsQuery.es-ES.resx | 3 +- .../Export/ExportAuditTrailsQuery.fr-FR.resx | 3 +- .../Export/ExportAuditTrailsQuery.ja-JP.resx | 3 +- .../Export/ExportAuditTrailsQuery.km-KH.resx | 3 +- .../Export/ExportAuditTrailsQuery.resx | 3 +- .../Export/ExportAuditTrailsQuery.ru.resx | 3 +- .../Export/ExportAuditTrailsQuery.zh-CN.resx | 3 +- ...portDocumentTypesCommandHandler.ca-ES.resx | 3 +- ...portDocumentTypesCommandHandler.de-DE.resx | 3 +- .../ImportDocumentTypesCommandHandler.en.resx | 3 +- ...portDocumentTypesCommandHandler.es-ES.resx | 3 +- ...portDocumentTypesCommandHandler.fr-FR.resx | 3 +- ...portDocumentTypesCommandHandler.ja-JP.resx | 3 +- ...portDocumentTypesCommandHandler.km-KH.resx | 3 +- .../ImportDocumentTypesCommandHandler.resx | 3 +- .../ImportDocumentTypesCommandHandler.ru.resx | 3 +- ...portDocumentTypesCommandHandler.zh-CN.resx | 3 +- ...ExportDocumentTypesQueryHandler.ca-ES.resx | 3 +- ...ExportDocumentTypesQueryHandler.de-DE.resx | 3 +- .../ExportDocumentTypesQueryHandler.en.resx | 3 +- ...ExportDocumentTypesQueryHandler.es-ES.resx | 3 +- ...ExportDocumentTypesQueryHandler.fr-FR.resx | 3 +- ...ExportDocumentTypesQueryHandler.ja-JP.resx | 3 +- ...ExportDocumentTypesQueryHandler.km-KH.resx | 3 +- .../ExportDocumentTypesQueryHandler.resx | 3 +- .../ExportDocumentTypesQueryHandler.ru.resx | 3 +- ...ExportDocumentTypesQueryHandler.zh-CN.resx | 3 +- .../ExportDocumentsQueryHandler.ca-ES.resx | 3 +- .../ExportDocumentsQueryHandler.de-DE.resx | 3 +- .../ExportDocumentsQueryHandler.en.resx | 3 +- .../ExportDocumentsQueryHandler.es-ES.resx | 3 +- .../ExportDocumentsQueryHandler.fr-FR.resx | 3 +- .../ExportDocumentsQueryHandler.ja-JP.resx | 3 +- .../ExportDocumentsQueryHandler.km-KH.resx | 3 +- .../Export/ExportDocumentsQueryHandler.resx | 3 +- .../ExportDocumentsQueryHandler.ru.resx | 3 +- .../ExportDocumentsQueryHandler.zh-CN.resx | 3 +- .../ResetPasswordCommandHandler.ca-ES.resx | 3 +- .../ResetPasswordCommandHandler.de-DE.resx | 3 +- .../ResetPasswordCommandHandler.en.resx | 3 +- .../ResetPasswordCommandHandler.es-ES.resx | 3 +- .../ResetPasswordCommandHandler.fr-FR.resx | 3 +- .../ResetPasswordCommandHandler.ja-JP.resx | 3 +- .../ResetPasswordCommandHandler.km-KH.resx | 3 +- .../ResetPasswordCommandHandler.resx | 3 +- .../ResetPasswordCommandHandler.ru.resx | 3 +- .../ResetPasswordCommandHandler.zh-CN.resx | 3 +- .../ImportKeyValuesCommandHandler.ca-ES.resx | 3 +- .../ImportKeyValuesCommandHandler.de-DE.resx | 3 +- .../ImportKeyValuesCommandHandler.en.resx | 3 +- .../ImportKeyValuesCommandHandler.es-ES.resx | 3 +- .../ImportKeyValuesCommandHandler.fr-FR.resx | 3 +- .../ImportKeyValuesCommandHandler.ja-JP.resx | 3 +- .../ImportKeyValuesCommandHandler.km-KH.resx | 3 +- .../Import/ImportKeyValuesCommandHandler.resx | 3 +- .../ImportKeyValuesCommandHandler.ru.resx | 3 +- .../ImportKeyValuesCommandHandler.zh-CN.resx | 3 +- .../ExportKeyValuesQueryHandler.ca-ES.resx | 3 +- .../ExportKeyValuesQueryHandler.de-DE.resx | 3 +- .../ExportKeyValuesQueryHandler.en.resx | 3 +- .../ExportKeyValuesQueryHandler.es-ES.resx | 3 +- .../ExportKeyValuesQueryHandler.fr-FR.resx | 3 +- .../ExportKeyValuesQueryHandler.ja-JP.resx | 3 +- .../ExportKeyValuesQueryHandler.km-KH.resx | 3 +- .../Export/ExportKeyValuesQueryHandler.resx | 3 +- .../ExportKeyValuesQueryHandler.ru.resx | 3 +- .../ExportKeyValuesQueryHandler.zh-CN.resx | 3 +- .../Export/ExportLogsQueryHandler.ca-ES.resx | 3 +- .../Export/ExportLogsQueryHandler.de-DE.resx | 3 +- .../Export/ExportLogsQueryHandler.en.resx | 3 +- .../Export/ExportLogsQueryHandler.es-ES.resx | 3 +- .../Export/ExportLogsQueryHandler.fr-FR.resx | 3 +- .../Export/ExportLogsQueryHandler.ja-JP.resx | 3 +- .../Export/ExportLogsQueryHandler.km-KH.resx | 3 +- .../Export/ExportLogsQueryHandler.resx | 3 +- .../Export/ExportLogsQueryHandler.ru.resx | 3 +- .../Export/ExportLogsQueryHandler.zh-CN.resx | 3 +- .../ImportProductsCommandHandler.ca-ES.resx | 3 +- .../ImportProductsCommandHandler.de-DE.resx | 3 +- .../ImportProductsCommandHandler.en.resx | 3 +- .../ImportProductsCommandHandler.es-ES.resx | 3 +- .../ImportProductsCommandHandler.fr-FR.resx | 3 +- .../ImportProductsCommandHandler.ja-JP.resx | 3 +- .../ImportProductsCommandHandler.km-KH.resx | 3 +- .../Import/ImportProductsCommandHandler.resx | 3 +- .../ImportProductsCommandHandler.ru.resx | 3 +- .../ImportProductsCommandHandler.zh-CN.resx | 3 +- .../ExportProductsQueryHandler.ca-ES.resx | 3 +- .../ExportProductsQueryHandler.de-DE.resx | 3 +- .../Export/ExportProductsQueryHandler.en.resx | 3 +- .../ExportProductsQueryHandler.es-ES.resx | 3 +- .../ExportProductsQueryHandler.fr-FR.resx | 3 +- .../ExportProductsQueryHandler.ja-JP.resx | 3 +- .../ExportProductsQueryHandler.km-KH.resx | 3 +- .../Export/ExportProductsQueryHandler.resx | 3 +- .../Export/ExportProductsQueryHandler.ru.resx | 3 +- .../ExportProductsQueryHandler.zh-CN.resx | 3 +- .../Extensions/SerilogExtensions.cs | 6 ++-- .../Constants/ConstantString.ca-ES.resx | 3 +- .../Constants/ConstantString.de-DE.resx | 3 +- .../Constants/ConstantString.en.resx | 3 +- .../Constants/ConstantString.es-ES.resx | 3 +- .../Constants/ConstantString.fr-FR.resx | 3 +- .../Constants/ConstantString.ja-JP.resx | 3 +- .../Constants/ConstantString.km-KH.resx | 3 +- .../Resources/Constants/ConstantString.resx | 3 +- .../Constants/ConstantString.ru.resx | 3 +- .../Constants/ConstantString.zh-CN.resx | 3 +- .../Services/JWT/AccessTokenProvider.cs | 2 -- src/Server.UI/Components/App.razor | 22 ++++++------ .../Dialogs/DeleteConfirmation.razor | 2 +- .../Dialogs/LogoutConfirmation.razor | 2 +- .../Components/Identity/UserLoginState.razor | 4 +-- .../Components/Shared/ErrorHandler.razor | 2 +- .../Components/Shared/Layout/MainLayout.razor | 2 +- .../Components/CustomerFormDialog.razor | 4 +-- src/Server.UI/Pages/Customers/Customers.razor | 2 +- src/Server.UI/Pages/Dashboard/Dashboard.razor | 34 +++++++++---------- .../Components/UploadFilesFormDialog.razor | 4 +-- src/Server.UI/Pages/Documents/Documents.razor | 2 +- .../Identity/Authentication/Forgot.razor | 2 +- .../Identity/Authentication/Register.razor | 2 +- .../Pages/Identity/Authentication/Reset.razor | 2 +- .../Pages/Identity/Users/Profile.razor | 7 ++-- .../Pages/SystemManagement/AuditTrails.razor | 28 +++++++-------- .../Components/CreatePicklistDialog.razor | 2 +- .../Pages/SystemManagement/Dictionaries.razor | 2 +- .../Pages/Tenants/TenantFormDialog.razor | 2 +- .../Localization/LanguageSelector.ar-iq.resx | 3 +- .../Localization/LanguageSelector.ca-ES.resx | 3 +- .../Localization/LanguageSelector.de-DE.resx | 3 +- .../Localization/LanguageSelector.en.resx | 3 +- .../Localization/LanguageSelector.es-ES.resx | 3 +- .../Localization/LanguageSelector.fr-FR.resx | 3 +- .../Localization/LanguageSelector.ja-JP.resx | 3 +- .../Localization/LanguageSelector.km-KH.resx | 3 +- .../Localization/LanguageSelector.resx | 3 +- .../Localization/LanguageSelector.ru.resx | 3 +- .../Localization/LanguageSelector.zh-CN.resx | 3 +- .../Components/Shared/SideMenu.ar-IQ.resx | 3 +- .../Components/Shared/SideMenu.ca-ES.resx | 3 +- .../Components/Shared/SideMenu.de-DE.resx | 3 +- .../Components/Shared/SideMenu.en.resx | 3 +- .../Components/Shared/SideMenu.es-ES.resx | 3 +- .../Components/Shared/SideMenu.fr-FR.resx | 3 +- .../Components/Shared/SideMenu.ja-JP.resx | 3 +- .../Components/Shared/SideMenu.km-KH.resx | 3 +- .../Resources/Components/Shared/SideMenu.resx | 3 +- .../Components/Shared/SideMenu.ru.resx | 3 +- .../Components/Shared/SideMenu.zh-CN.resx | 3 +- .../Pages/Authentication/Forgot.ar-IQ.resx | 13 ++++--- .../Pages/Authentication/Forgot.ca-ES.resx | 18 ++++++---- .../Pages/Authentication/Forgot.de-DE.resx | 18 ++++++---- .../Pages/Authentication/Forgot.en.resx | 18 ++++++---- .../Pages/Authentication/Forgot.es-ES.resx | 18 ++++++---- .../Pages/Authentication/Forgot.fr-FR.resx | 18 ++++++---- .../Pages/Authentication/Forgot.ja-JP.resx | 18 ++++++---- .../Pages/Authentication/Forgot.km-KH.resx | 18 ++++++---- .../Pages/Authentication/Forgot.resx | 13 ++++--- .../Pages/Authentication/Forgot.ru.resx | 18 ++++++---- .../Pages/Authentication/Forgot.zh-CN.resx | 18 ++++++---- .../Pages/Authentication/Login.ar-IQ.resx | 8 +++-- .../Pages/Authentication/Login.ca-ES.resx | 8 +++-- .../Pages/Authentication/Login.de-DE.resx | 8 +++-- .../Pages/Authentication/Login.en.resx | 8 +++-- .../Pages/Authentication/Login.es-ES.resx | 8 +++-- .../Pages/Authentication/Login.fr-FR.resx | 8 +++-- .../Pages/Authentication/Login.ja-JP.resx | 8 +++-- .../Pages/Authentication/Login.km-KH.resx | 8 +++-- .../Resources/Pages/Authentication/Login.resx | 8 +++-- .../Pages/Authentication/Login.ru.resx | 8 +++-- .../Pages/Authentication/Login.zh-CN.resx | 8 +++-- .../Pages/Authentication/Register.ar-IQ.resx | 3 +- .../Pages/Authentication/Register.ca-ES.resx | 3 +- .../Pages/Authentication/Register.de-DE.resx | 3 +- .../Pages/Authentication/Register.en.resx | 3 +- .../Pages/Authentication/Register.es-ES.resx | 3 +- .../Pages/Authentication/Register.fr-FR.resx | 3 +- .../Pages/Authentication/Register.ja-JP.resx | 3 +- .../Pages/Authentication/Register.km-KH.resx | 3 +- .../Pages/Authentication/Register.resx | 3 +- .../Pages/Authentication/Register.ru.resx | 3 +- .../Pages/Authentication/Register.zh-CN.resx | 3 +- .../Pages/Authentication/Reset.ar-IQ.resx | 3 +- .../Pages/Authentication/Reset.ca-ES.resx | 3 +- .../Pages/Authentication/Reset.de-DE.resx | 3 +- .../Pages/Authentication/Reset.en.resx | 3 +- .../Pages/Authentication/Reset.es-ES.resx | 3 +- .../Pages/Authentication/Reset.fr-FR.resx | 3 +- .../Pages/Authentication/Reset.ja-JP.resx | 3 +- .../Pages/Authentication/Reset.km-KH.resx | 3 +- .../Resources/Pages/Authentication/Reset.resx | 3 +- .../Pages/Authentication/Reset.ru.resx | 3 +- .../Pages/Authentication/Reset.zh-CN.resx | 3 +- .../Pages/Documents/Documents.ar-IQ.resx | 3 +- .../Pages/Documents/Documents.ca-ES.resx | 3 +- .../Pages/Documents/Documents.de-DE.resx | 3 +- .../Pages/Documents/Documents.en.resx | 3 +- .../Pages/Documents/Documents.es-ES.resx | 3 +- .../Pages/Documents/Documents.fr-FR.resx | 3 +- .../Pages/Documents/Documents.ja-JP.resx | 3 +- .../Pages/Documents/Documents.km-KH.resx | 3 +- .../Resources/Pages/Documents/Documents.resx | 3 +- .../Pages/Documents/Documents.ru.resx | 3 +- .../Pages/Documents/Documents.zh-CN.resx | 3 +- .../Pages/Identity/Roles/Roles.ar-IQ.resx | 3 +- .../Pages/Identity/Roles/Roles.ca-ES.resx | 3 +- .../Pages/Identity/Roles/Roles.de-DE.resx | 3 +- .../Pages/Identity/Roles/Roles.en.resx | 3 +- .../Pages/Identity/Roles/Roles.es-ES.resx | 3 +- .../Pages/Identity/Roles/Roles.fr-FR.resx | 3 +- .../Pages/Identity/Roles/Roles.ja-JP.resx | 3 +- .../Pages/Identity/Roles/Roles.km-KH.resx | 3 +- .../Resources/Pages/Identity/Roles/Roles.resx | 3 +- .../Pages/Identity/Roles/Roles.ru.resx | 3 +- .../Pages/Identity/Roles/Roles.zh-CN.resx | 3 +- .../Pages/Identity/Users/Profile.ar-IQ.resx | 3 +- .../Pages/Identity/Users/Profile.ca-ES.resx | 3 +- .../Pages/Identity/Users/Profile.de-DE.resx | 3 +- .../Pages/Identity/Users/Profile.en.resx | 3 +- .../Pages/Identity/Users/Profile.es-ES.resx | 3 +- .../Pages/Identity/Users/Profile.fr-FR.resx | 3 +- .../Pages/Identity/Users/Profile.ja-JP.resx | 3 +- .../Pages/Identity/Users/Profile.km-KH.resx | 3 +- .../Pages/Identity/Users/Profile.resx | 3 +- .../Pages/Identity/Users/Profile.ru.resx | 3 +- .../Pages/Identity/Users/Profile.zh-CN.resx | 3 +- .../Pages/Identity/Users/Users.ar-IQ.resx | 3 +- .../Pages/Identity/Users/Users.ca-ES.resx | 3 +- .../Pages/Identity/Users/Users.de-DE.resx | 3 +- .../Pages/Identity/Users/Users.en.resx | 3 +- .../Pages/Identity/Users/Users.es-ES.resx | 3 +- .../Pages/Identity/Users/Users.fr-FR.resx | 3 +- .../Pages/Identity/Users/Users.ja-JP.resx | 3 +- .../Pages/Identity/Users/Users.km-KH.resx | 3 +- .../Resources/Pages/Identity/Users/Users.resx | 3 +- .../Pages/Identity/Users/Users.ru.resx | 3 +- .../Pages/Identity/Users/Users.zh-CN.resx | 3 +- .../Pages/Products/Products.ar-IQ.resx | 3 +- .../Pages/Products/Products.ca-ES.resx | 3 +- .../Pages/Products/Products.de-DE.resx | 3 +- .../Resources/Pages/Products/Products.en.resx | 3 +- .../Pages/Products/Products.es-ES.resx | 3 +- .../Pages/Products/Products.fr-FR.resx | 3 +- .../Pages/Products/Products.ja-JP.resx | 3 +- .../Pages/Products/Products.km-KH.resx | 3 +- .../Resources/Pages/Products/Products.resx | 3 +- .../Resources/Pages/Products/Products.ru.resx | 3 +- .../Pages/Products/Products.zh-CN.resx | 3 +- .../SystemManagement/AuditTrails.ar-IQ.resx | 3 +- .../SystemManagement/AuditTrails.ca-ES.resx | 3 +- .../SystemManagement/AuditTrails.de-DE.resx | 3 +- .../SystemManagement/AuditTrails.en.resx | 3 +- .../SystemManagement/AuditTrails.es-ES.resx | 3 +- .../SystemManagement/AuditTrails.fr-FR.resx | 3 +- .../SystemManagement/AuditTrails.ja-JP.resx | 3 +- .../SystemManagement/AuditTrails.km-KH.resx | 3 +- .../Pages/SystemManagement/AuditTrails.resx | 3 +- .../SystemManagement/AuditTrails.ru.resx | 3 +- .../SystemManagement/AuditTrails.zh-CN.resx | 3 +- .../SystemManagement/Dictionaries.ar-IQ.resx | 3 +- .../SystemManagement/Dictionaries.ca-ES.resx | 3 +- .../SystemManagement/Dictionaries.de-DE.resx | 3 +- .../SystemManagement/Dictionaries.en.resx | 3 +- .../SystemManagement/Dictionaries.es-ES.resx | 3 +- .../SystemManagement/Dictionaries.fr-FR.resx | 3 +- .../SystemManagement/Dictionaries.ja-JP.resx | 3 +- .../SystemManagement/Dictionaries.km-KH.resx | 3 +- .../Pages/SystemManagement/Dictionaries.resx | 3 +- .../SystemManagement/Dictionaries.ru.resx | 3 +- .../SystemManagement/Dictionaries.zh-CN.resx | 3 +- .../Pages/SystemManagement/Logs.ar-IQ.resx | 3 +- .../Pages/SystemManagement/Logs.ca-ES.resx | 3 +- .../Pages/SystemManagement/Logs.de-DE.resx | 3 +- .../Pages/SystemManagement/Logs.en.resx | 3 +- .../Pages/SystemManagement/Logs.es-ES.resx | 3 +- .../Pages/SystemManagement/Logs.fr-FR.resx | 3 +- .../Pages/SystemManagement/Logs.ja-JP.resx | 3 +- .../Pages/SystemManagement/Logs.km-KH.resx | 3 +- .../Pages/SystemManagement/Logs.resx | 3 +- .../Pages/SystemManagement/Logs.ru.resx | 3 +- .../Pages/SystemManagement/Logs.zh-CN.resx | 3 +- .../Pages/Tenants/Tenants.ar-IQ.resx | 3 +- .../Pages/Tenants/Tenants.ca-ES.resx | 3 +- .../Pages/Tenants/Tenants.de-DE.resx | 3 +- .../Resources/Pages/Tenants/Tenants.en.resx | 3 +- .../Pages/Tenants/Tenants.es-ES.resx | 3 +- .../Pages/Tenants/Tenants.fr-FR.resx | 3 +- .../Pages/Tenants/Tenants.ja-JP.resx | 3 +- .../Pages/Tenants/Tenants.km-KH.resx | 3 +- .../Resources/Pages/Tenants/Tenants.resx | 3 +- .../Resources/Pages/Tenants/Tenants.ru.resx | 3 +- .../Pages/Tenants/Tenants.zh-CN.resx | 3 +- .../Shared/SharedResource.ar-IQ.resx | 3 +- .../Shared/SharedResource.ca-ES.resx | 3 +- .../Shared/SharedResource.de-DE.resx | 3 +- .../Resources/Shared/SharedResource.en.resx | 3 +- .../Shared/SharedResource.es-ES.resx | 3 +- .../Shared/SharedResource.fr-FR.resx | 3 +- .../Shared/SharedResource.ja-JP.resx | 3 +- .../Shared/SharedResource.km-KH.resx | 3 +- .../Resources/Shared/SharedResource.resx | 3 +- .../Resources/Shared/SharedResource.ru.resx | 3 +- .../Shared/SharedResource.zh-CN.resx | 3 +- .../InMemoryNotificationService.cs | 2 -- 319 files changed, 786 insertions(+), 453 deletions(-) diff --git a/README.md b/README.md index 918db647d..65c8ba045 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,8 @@ Blazor technology. ## Docker compose https deployment - Create self-signed development certificates for the project - - - cmd: `dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\CleanArchitecture.Blazor.Server.UI.pfx -p Password@123` + - + cmd: `dotnet dev-certs https -ep $env:USERPROFILE\.aspnet\https\CleanArchitecture.Blazor.Server.UI.pfx -p Password@123` - cmd: `dotnet dev-certs https --trust` - Manage User secrets to save the password - cmd: `dotnet user-secrets init` diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ca-ES.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ca-ES.resx index fe8733585..960159be6 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ca-ES.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx index 5ed9d457d..b7953076a 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx index 1a1025922..8a50bf4b2 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx index e17ffab9a..ddcb24abe 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx index 4eba8139a..0716251cc 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx index 23b1fc492..93dbf64bf 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx index 057edb7ff..1b6994494 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx index 3a6c2a7b8..bbb1b3371 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx index 09c9dded7..7a06c6dbb 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx index acdb9d5e5..8ee3be781 100644 --- a/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx +++ b/src/Application/Resources/Common/Security/RegisterFormModelFluentValidator.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx index 4648b45df..b8daf1ab5 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx index c336ee4b6..da4dc2f58 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx index ea0a7c113..9e59474ee 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx index 5331cbcde..fea68d0fa 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx index f24b01785..ba7c0dc3f 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx index c989d82be..eb6200d05 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx index 50f489282..08102ae72 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx index ea0a7c113..9e59474ee 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx index 13e740247..8bcb82665 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx index a5c0a00aa..ca01866d2 100644 --- a/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx +++ b/src/Application/Resources/Features/AuditTrails/Queries/Export/ExportAuditTrailsQuery.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx index bb0a12d43..cf6d2b539 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx index 679d9ecf6..0dbec911b 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx index 638ca2c46..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx index 483089c96..f686236cd 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx index bb5b1c58c..1c13bcb41 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx index 4f8885ba8..acbecff26 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx index 3fd86a481..8081c40c7 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx index 638ca2c46..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx index 4e4c95851..e9ef7aa64 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx index 558cf3181..0126885ca 100644 --- a/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/DocumentTypes/Commands/Import/ImportDocumentTypesCommandHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx index bb0a12d43..cf6d2b539 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx index 679d9ecf6..0dbec911b 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx index 638ca2c46..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx index 483089c96..f686236cd 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx index bb5b1c58c..1c13bcb41 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx index 4f8885ba8..acbecff26 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx index 3fd86a481..8081c40c7 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx index 638ca2c46..c2ab7dbb2 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx index 4e4c95851..e9ef7aa64 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx index 558cf3181..0126885ca 100644 --- a/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/DocumentTypes/Queries/Export/ExportDocumentTypesQueryHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx index 089d613aa..e105253c2 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx index 876bdbf28..8cfbc28f3 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx index 3c368d962..8bead2f04 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx index cf3570b6b..0baa2427c 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx index 5ca4b8398..f104cfab3 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx index 992c96034..3da5a0016 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx index fd0d46771..7468129a6 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx index 3c368d962..8bead2f04 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx index 80a657d2c..297363f35 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx index 477082a4e..0ac0bdcaa 100644 --- a/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Documents/Queries/Export/ExportDocumentsQueryHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx index a31094f59..b7cdf7ef4 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx index 8b99104bf..9d144e0cb 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx index 8f3dd13d1..4cd332396 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx index 4f32f452c..36774db59 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx index 583ab05e0..f106bd04c 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx index 0c3b369cf..d21202f6d 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx index 55e1d09a9..8b08aaddb 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx index 8f3dd13d1..4cd332396 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx index 43c6ef190..6210e97fa 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx index 762274b3b..9b8bf1b8d 100644 --- a/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Identity/Commands/ResetPassword/ResetPasswordCommandHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx index e74fd0cae..0b475a553 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx index e790c40d9..193e2bece 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx index 8b5745487..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx index 70ab782a3..262a7f793 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx index 521c0d02e..940988fff 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx index 976ea1549..da74a2eb8 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx index e179b4795..a93ea5131 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx index 8b5745487..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx index 474ef5519..d74053e66 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx index 65e461cfc..e232d2e20 100644 --- a/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/KeyValues/Commands/Import/ImportKeyValuesCommandHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx index e74fd0cae..0b475a553 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx index e790c40d9..193e2bece 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx index 8b5745487..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx index 70ab782a3..262a7f793 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx index 521c0d02e..940988fff 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx index 976ea1549..da74a2eb8 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx index e179b4795..a93ea5131 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx index 8b5745487..d90ed6706 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx index 474ef5519..d74053e66 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx index 65e461cfc..e232d2e20 100644 --- a/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/KeyValues/Queries/Export/ExportKeyValuesQueryHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx index 40e0b5577..09a6557e4 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx index c27335557..3f6943036 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx index 8bca96246..98c01688e 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx index ef190fd91..3814b69af 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx index ce1f244a8..2c5454cd0 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx index cc659e82d..7c90fd1ee 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx index 26290427f..c5fae0439 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx index bf53a37b9..5cce74b21 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx index b9c3a796e..cf3009460 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx index 6842d9309..c1b488474 100644 --- a/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Loggers/Queries/Export/ExportLogsQueryHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx index 10e0765fc..17a9c9dde 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx index 1299b7aa1..068037723 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx index 6b90cc0f6..c98369be0 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx index 3f2c04564..4a07b80d8 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx index 51937cd9d..01eadfd90 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx index f390abc86..ea87fcc29 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx index 92b488c93..2c5109be0 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx index a298f3c57..b40b38e5d 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx index d6a7a877b..7fb972ccd 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx index be073480c..bb1bfe68a 100644 --- a/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Products/Commands/Import/ImportProductsCommandHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx index 10e0765fc..17a9c9dde 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx index 1299b7aa1..068037723 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx index 6b90cc0f6..c98369be0 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx index 3f2c04564..4a07b80d8 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx index 51937cd9d..01eadfd90 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx index f390abc86..ea87fcc29 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx index 92b488c93..2c5109be0 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx index a298f3c57..b40b38e5d 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx index d6a7a877b..7fb972ccd 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx index be073480c..bb1bfe68a 100644 --- a/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx +++ b/src/Application/Resources/Features/Products/Queries/Export/ExportProductsQueryHandler.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Extensions/SerilogExtensions.cs b/src/Infrastructure/Extensions/SerilogExtensions.cs index 664be9d0c..728bb4f2c 100644 --- a/src/Infrastructure/Extensions/SerilogExtensions.cs +++ b/src/Infrastructure/Extensions/SerilogExtensions.cs @@ -153,7 +153,10 @@ private static void WriteToNpgsql(LoggerConfiguration serilogConfig, string? con { "log_event", new LogEventSerializedColumnWriter(NpgsqlDbType.Varchar) }, { "user_name", new SinglePropertyColumnWriter("UserName", PropertyWriteMethod.Raw, NpgsqlDbType.Varchar) }, { "client_ip", new SinglePropertyColumnWriter("ClientIp", PropertyWriteMethod.Raw, NpgsqlDbType.Varchar) }, - { "client_agent",new SinglePropertyColumnWriter("ClientAgent", PropertyWriteMethod.ToString, NpgsqlDbType.Varchar) } + { + "client_agent", + new SinglePropertyColumnWriter("ClientAgent", PropertyWriteMethod.ToString, NpgsqlDbType.Varchar) + } }; serilogConfig.WriteTo.Async(wt => wt.PostgreSQL( connectionString, @@ -164,7 +167,6 @@ private static void WriteToNpgsql(LoggerConfiguration serilogConfig, string? con schemaName: "public", useCopy: false, failureCallback: e => Console.WriteLine($"Sink error: {e.Message}") - )); } diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx b/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx index 536fd7535..0a19460d9 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ca-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx b/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx index 5f7239abc..1b9ad9f74 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.de-DE.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.en.resx b/src/Infrastructure/Resources/Constants/ConstantString.en.resx index 18e285005..e99e8cab1 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.en.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.en.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx b/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx index 80074e7b3..e8c26ecbf 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.es-ES.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx b/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx index 96b801831..d79c84056 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.fr-FR.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx b/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx index 684944966..a7c81229f 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ja-JP.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx b/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx index a9009324d..c394dda29 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.km-KH.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.resx b/src/Infrastructure/Resources/Constants/ConstantString.resx index d82e43fb7..b20508a80 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.ru.resx b/src/Infrastructure/Resources/Constants/ConstantString.ru.resx index 7fcff9753..4d9e5e367 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.ru.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.ru.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx b/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx index ac1eb9cdf..b0716408c 100644 --- a/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx +++ b/src/Infrastructure/Resources/Constants/ConstantString.zh-CN.resx @@ -59,7 +59,8 @@ : using a System.ComponentModel.TypeConverter : and then encoded with base64 encoding. --> - diff --git a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs index c55d76799..7a4169397 100644 --- a/src/Infrastructure/Services/JWT/AccessTokenProvider.cs +++ b/src/Infrastructure/Services/JWT/AccessTokenProvider.cs @@ -77,9 +77,7 @@ public async Task GetClaimsPrincipal() RefreshToken = token.Value.RefreshToken; var validationResult = await _tokenValidator.ValidateTokenAsync(AccessToken!); if (validationResult.IsValid) - { return SetUserPropertiesFromClaimsPrincipal(new ClaimsPrincipal(validationResult.ClaimsIdentity)); - } var validationRefreshResult = await _refreshTokenValidator.ValidateTokenAsync(RefreshToken!); if (validationRefreshResult.IsValid) diff --git a/src/Server.UI/Components/App.razor b/src/Server.UI/Components/App.razor index abef9be0b..304e7d758 100644 --- a/src/Server.UI/Components/App.razor +++ b/src/Server.UI/Components/App.razor @@ -80,17 +80,17 @@ - - - - - - - - - - - + + + + + + + + +